· 6 years ago · Feb 01, 2019, 01:54 PM
12019-02-01 13:49:32.009 [P2P3] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
22019-02-01 13:49:33.008 [P2P2] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
32019-02-01 13:49:34.012 [P2P3] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
42019-02-01 13:49:35.009 [P2P1] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
52019-02-01 13:49:36.026 [P2P2] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
62019-02-01 13:49:36.650 [P2P5] DEBUG net src/p2p/net_node.inl:1105 Considering connecting (out) to peer: c7920a1552d3bd00 93.105.231.224:13100
72019-02-01 13:49:37.009 [P2P6] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
82019-02-01 13:49:38.009 [P2P4] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
92019-02-01 13:49:39.009 [P2P8] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
102019-02-01 13:49:40.011 [P2P7] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
112019-02-01 13:49:41.014 [P2P6] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
122019-02-01 13:49:42.010 [P2P4] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
132019-02-01 13:49:43.010 [P2P3] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
142019-02-01 13:49:44.012 [P2P8] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
152019-02-01 13:49:45.014 [P2P0] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
162019-02-01 13:49:46.010 [P2P4] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
172019-02-01 13:49:47.015 [P2P3] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
182019-02-01 13:49:48.013 [P2P0] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
192019-02-01 13:49:49.011 [P2P7] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
202019-02-01 13:49:50.013 [P2P6] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
212019-02-01 13:49:51.013 [P2P5] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
222019-02-01 13:49:52.011 [P2P8] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
232019-02-01 13:49:53.012 [P2P2] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
242019-02-01 13:49:54.014 [P2P5] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
252019-02-01 13:49:55.012 [P2P8] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
262019-02-01 13:49:56.016 [P2P7] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
272019-02-01 13:49:57.012 [P2P5] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
282019-02-01 13:49:58.012 [P2P6] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
292019-02-01 13:49:59.170 [P2P0] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
302019-02-01 13:50:00.029 [P2P8] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
312019-02-01 13:50:01.015 [P2P7] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
322019-02-01 13:50:02.013 [P2P2] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
332019-02-01 13:50:03.013 [P2P5] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
342019-02-01 13:50:04.015 [P2P7] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
352019-02-01 13:50:05.013 [P2P2] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
362019-02-01 13:50:06.017 [P2P0] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
372019-02-01 13:50:07.016 [P2P5] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
382019-02-01 13:50:08.014 [P2P4] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
392019-02-01 13:50:09.014 [P2P7] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
402019-02-01 13:50:10.014 [P2P3] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
412019-02-01 13:50:11.014 [P2P5] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
422019-02-01 13:50:12.017 [P2P5] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
432019-02-01 13:50:13.014 [P2P3] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
442019-02-01 13:50:14.015 [P2P7] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=513
452019-02-01 13:50:14.902 7fe44bfb0700 WARN net src/p2p/net_node.inl:1604 [93.105.231.224:13100 OUT] COMMAND_REQUEST_SUPPORT_FLAGS invoke failed. (-3, LEVIN_ERROR_CONNECTION_DESTROYED)
462019-02-01 13:50:14.903 7fe44bfb0700 WARN net src/p2p/net_node.inl:774 [93.105.231.224:13100 OUT] COMMAND_TIMED_SYNC invoke failed. (-3, LEVIN_ERROR_CONNECTION_DESTROYED)
472019-02-01 13:50:23.787 [SRV_MAIN] INFO net src/p2p/net_node.inl:1780 [93.105.231.224:13100 de1f3ccf-c503-e9ff-c58b-a0c0abc223af OUT] CLOSE CONNECTION
48NEW PEER DISCOVERED 51.77.136.40:12211
49NEW PEER DISCOVERED 51.77.136.40:13100
50NEW PEER DISCOVERED 51.77.136.40:12210
51NEW PEER DISCOVERED 51.77.136.40:12200
52TRY CONNECT 51.77.136.40:12211
53ACTIVE CONNECT 51.77.136.40:12211
54[INC 51.77.136.40:55380 PRE-HANDSHAKE] - INCOMING
55[INC 51.77.136.40:55380 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
56NEW PEER DISCOVERED 51.77.136.40:55380
57[INC 51.77.136.40:55380 PRE-HANDSHAKE] - HANDSHAKE SUCCES
58[INC 51.77.136.40:55380 ACTIVE] - SENT RESPONSECOMMAND1001
59[INC 51.77.136.40:55380 ACTIVE] - RECEIVED REQUESTCOMMAND1007
60[INC 51.77.136.40:55380 ACTIVE] - Starting TAR PIT
61[INC 51.77.136.40:55380 ACTIVE] - SENT TAR PIT HEADER
62[INC 51.77.136.40:55380 ACTIVE] - SENT TAR PIT MSG
63[INC 51.77.136.40:55380 ACTIVE] - SENT TAR PIT MSG
64[INC 51.77.136.40:55380 ACTIVE] - SENT TAR PIT MSG
65[INC 51.77.136.40:55380 ACTIVE] - SENT TAR PIT MSG
66[INC 51.77.136.40:55380 ACTIVE] - SENT TAR PIT MSG
67[INC 51.77.136.40:55380 ACTIVE] - SENT TAR PIT MSG
68[INC 51.77.136.40:55380 ACTIVE] - SENT TAR PIT MSG
69[INC 51.77.136.40:55380 ACTIVE] - SENT TAR PIT MSG
70[INC 51.77.136.40:55380 ACTIVE] - SENT TAR PIT MSG
71[INC 51.77.136.40:55380 ACTIVE] - SENT TAR PIT MSG
72[INC 51.77.136.40:55380 ACTIVE] - DISCONNECTED
73[INC 51.77.136.40:55380 INACTIVE] - SENT TAR PIT MSG
74root@vps636185:~/ryo# ./ryod --add-priority-node 93.105.231.224:13100 --log-level 2
752019-02-01 13:37:26.132 [P2P0] DEBUG net src/p2p/net_node.inl:898 Connecting to 93.105.231.224:13100(peer_type=1, last_seen: never)...
762019-02-01 13:37:26.229 [P2P0] INFO net src/p2p/net_node.inl:1764 [93.105.231.224:13100 9cc3c836-67ee-3673-9bac-37ec24bf5003 OUT] NEW CONNECTION
772019-02-01 13:37:26.230 [P2P0] DEBUG net contrib/epee/include/net/abstract_tcp_server2.inl:273 connection type P2P 51.77.136.40:55380 <--> 93.105.231.224:13100
782019-02-01 13:37:26.247 [P2P0] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:168 [93.105.231.224:13100 OUT] anvoke_handler, timeout: 5000
792019-02-01 13:37:26.324 [P2P2] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=1481
802019-02-01 13:37:26.327 [P2P8] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=1448
812019-02-01 13:37:26.328 [P2P4] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=1448
822019-02-01 13:37:26.328 [P2P9] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=1448
832019-02-01 13:37:26.329 [P2P6] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:393 [93.105.231.224:13100 OUT] LEVIN_PACKET partial msg received. len=2896
842019-02-01 13:37:26.368 [P2P3] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:414 [93.105.231.224:13100 OUT] LEVIN_PACKET_RECIEVED. [len=9866, flags2, r?=0, cmd = 1001, v=1
852019-02-01 13:37:26.370 [P2P3] DEBUG default contrib/epee/include/net/net_utils_base.h:200 Found as addr: 93.105.231.224:36125
862019-02-01 13:37:26.370 [P2P3] DEBUG default contrib/epee/include/net/net_utils_base.h:200 Found as addr: 93.105.231.224:13100
872019-02-01 13:37:26.381 [P2P3] DEBUG net src/p2p/net_node.inl:1359 [93.105.231.224:13100 OUT] REMOTE PEERLIST: TIME_DELTA: 0, remote peerlist size=100
882019-02-01 13:37:26.382 [P2P3] DEBUG net src/p2p/net_node.inl:1360 [93.105.231.224:13100 OUT] REMOTE PEERLIST: a43b852d72b245cd 51.77.136.40:55380 last_seen: d0.h0.m0.s0
894554b33642e1ba6f 93.105.231.224:36125 last_seen: d0.h0.m2.s20
90a21cb2e03c3587d0 93.105.231.224:13100 last_seen: d0.h0.m43.s17
912019-02-01 13:37:26.389 [P2P3] DEBUG net src/p2p/net_node.inl:734 [93.105.231.224:13100 OUT] COMMAND_HANDSHAKE INVOKED OK
922019-02-01 13:37:26.390 [P2P0] DEBUG net contrib/epee/include/net/levin_protocol_handler_async.h:168 [93.105.231.224:13100 OUT] anvoke_handler, timeout: 5000
932019-02-01 13:37:26.390 [P2P0] DEBUG net src/p2p/net_node.inl:954 [93.105.231.224:13100 OUT] CONNECTION HANDSHAKED OK.
942019-02-01 13:37:26.459 [P2P1] DEBUG default contrib/epee/include/net/net_utils_base.h:200 Found as addr: 93.105.231.224:13100
954554b33642e1ba6f 93.105.231.224:13100 last_seen: d0.h0.m2.s20
962019-02-01 13:37:26.583 [P2P1] DEBUG default contrib/epee/include/net/net_utils_base.h:200 Found as addr: 93.105.231.224:13100
974554b33642e1ba6f 93.105.231.224:13100 last_seen: d0.h0.m2.s19
982019-02-01 13:37:26.851 [P2P9] DEBUG default contrib/epee/include/net/net_utils_base.h:200 Found as addr: 93.105.231.224:13100
994554b33642e1ba6f 93.105.231.224:13100 last_seen: d0.h0.m2.s20
1002019-02-01 13:37:27.957 [P2P7] DEBUG default contrib/epee/include/net/net_utils_base.h:200 Found as addr: 93.105.231.224:13100
1014554b33642e1ba6f 93.105.231.224:13100 last_seen: d0.h0.m2.s20
1022019-02-01 13:37:31.390 [P2P5] INFO net contrib/epee/include/net/levin_protocol_handler_async.h:173 [93.105.231.224:13100 OUT] Timeout on invoke operation happened, command: 1007 timeout: 5000
1032019-02-01 13:37:31.392 [P2P5] WARN net src/p2p/net_node.inl:1604 [93.105.231.224:13100 OUT] COMMAND_REQUEST_SUPPORT_FLAGS invoke failed. (-4, LEVIN_ERROR_CONNECTION_TIMEDOUT)
1042019-02-01 13:37:31.393 [P2P5] INFO net src/p2p/net_node.inl:1780 [93.105.231.224:13100 9cc3c836-67ee-3673-9bac-37ec24bf5003 OUT] CLOSE CONNECTION
1052019-02-01 13:37:31.394 [P2P5] DEBUG net.p2p contrib/epee/src/connection_basic.cpp:183 Destructing connection p2p#1 to 93.105.231.224
106 struct anvoke_handler : invoke_response_handler_base
107 anvoke_handler(const callback_t &cb, uint64_t timeout, async_protocol_handler &con, int command)
108 MDEBUG(con.get_context_ref() << "anvoke_handler, timeout: " << timeout);
109 virtual ~anvoke_handler()
110 boost::shared_ptr<invoke_response_handler_base> handler(boost::make_shared<anvoke_handler<callback_t>>(cb, timeout, con, command));
111 friend struct anvoke_handler;
112 virtual bool is_timer_started() const = 0;
113 virtual bool is_timer_started() const
114 return handler->is_timer_started();
115 struct invoke_response_handler_base
116 struct anvoke_handler : invoke_response_handler_base
117 std::list<boost::shared_ptr<invoke_response_handler_base>> m_invoke_response_handlers;
118 boost::shared_ptr<invoke_response_handler_base> handler(boost::make_shared<anvoke_handler<callback_t>>(cb, timeout, con, command));
119 // invoke_response_handler_base is cancelled
120 std::for_each(local_invoke_response_handlers.begin(), local_invoke_response_handlers.end(), [](const boost::shared_ptr<invoke_response_handler_base> &pinv_resp_hndlr) {
121 boost::shared_ptr<invoke_response_handler_base> response_handler = m_invoke_response_handlers.front();
122 boost::shared_ptr<invoke_response_handler_base> response_handler = m_invoke_response_handlers.front();
123 bool add_invoke_response_handler(const callback_t &cb, uint64_t timeout, async_protocol_handler &con, int command)
124 if(!add_invoke_response_handler(cb, timeout, *this, command))
125 bool async_invoke(int command, const std::string &in_buff, const callback_t &cb, size_t timeout = LEVIN_DEFAULT_TIMEOUT_PRECONFIGURED)
126 return LEVIN_OK == r ? aph->async_invoke(command, in_buff, cb, timeout) : r;
127bool async_invoke_remote_command2(boost::uuids::uuid conn_id, int command, const t_arg &out_struct, t_transport &transport, const callback_t &cb, size_t inv_timeout = LEVIN_DEFAULT_TIMEOUT_PRECONFIGURED)
128 return async_invoke_remote_command<t_response>(con_id, command, req, m_net_server.get_config_object(), cb);
129RANDOM KOSHER PEER W 37.232.129.226:34250
130RANDOM KOSHER PEER W 37.232.129.226:34250
131[INC 37.232.129.226:34502 PRE-HANDSHAKE] - INCOMING
132[INC 37.232.129.226:34502 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
133NEW PEER DISCOVERED 37.232.129.226:34502
134[INC 37.232.129.226:34502 PRE-HANDSHAKE] - HANDSHAKE SUCCES
135[INC 37.232.129.226:34502 ACTIVE] - SENT RESPONSECOMMAND1001
136[INC 37.232.129.226:34502 ACTIVE] - RECEIVED REQUESTCOMMAND1007
137[INC 37.232.129.226:34502 ACTIVE] - Starting TAR PIT
138[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT HEADER
139[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
140[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
141[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
142[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
143[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
144[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
145[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
146[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
147[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
148[INC 37.232.129.226:34502 ACTIVE] - DISCONNECTED
149[INC 37.232.129.226:34502 INACTIVE] - SENT TAR PIT MSG
150RANDOM KOSHER PEER W 37.232.129.226:34502
151RANDOM KOSHER PEER W 37.232.129.226:34502
152RANDOM KOSHER PEER W 37.232.129.226:34502
153RANDOM KOSHER PEER W 37.232.129.226:34502
154[INC 37.232.129.226:34570 PRE-HANDSHAKE] - INCOMING
155[INC 37.232.129.226:34570 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
156NEW PEER DISCOVERED 37.232.129.226:34570
157[INC 37.232.129.226:34570 PRE-HANDSHAKE] - HANDSHAKE SUCCES
158[INC 37.232.129.226:34570 ACTIVE] - SENT RESPONSECOMMAND1001
159[INC 37.232.129.226:34570 ACTIVE] - RECEIVED REQUESTCOMMAND1007
160[INC 37.232.129.226:34570 ACTIVE] - Starting TAR PIT
161[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT HEADER
162[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
163[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
164[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
165[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
166[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
167[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
168[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
169[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
170[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
171[INC 37.232.129.226:34570 ACTIVE] - DISCONNECTED
172[INC 37.232.129.226:34570 INACTIVE] - SENT TAR PIT MSG
173RANDOM KOSHER PEER W 37.232.129.226:34570
174RANDOM KOSHER PEER W 37.232.129.226:34570
175RANDOM KOSHER PEER W 37.232.129.226:34570
176RANDOM KOSHER PEER W 37.232.129.226:34570
177RANDOM KOSHER PEER W 37.232.129.226:34570
178[INC 37.232.129.226:34654 PRE-HANDSHAKE] - INCOMING
179[INC 37.232.129.226:34654 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
180NEW PEER DISCOVERED 37.232.129.226:34654
181[INC 37.232.129.226:34654 PRE-HANDSHAKE] - HANDSHAKE SUCCES
182[INC 37.232.129.226:34654 ACTIVE] - SENT RESPONSECOMMAND1001
183[INC 37.232.129.226:34654 ACTIVE] - RECEIVED REQUESTCOMMAND1007
184[INC 37.232.129.226:34654 ACTIVE] - Starting TAR PIT
185[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT HEADER
186[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
187[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
188[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
189[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
190[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
191[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
192[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
193[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
194[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
195[INC 37.232.129.226:34654 ACTIVE] - DISCONNECTED
196[INC 37.232.129.226:34654 INACTIVE] - SENT TAR PIT MSG
197RANDOM KOSHER PEER W 37.232.129.226:34654
198RANDOM KOSHER PEER W 37.232.129.226:34654
199RANDOM KOSHER PEER W 37.232.129.226:34654
200RANDOM KOSHER PEER W 37.232.129.226:34654
201RANDOM KOSHER PEER W 37.232.129.226:34654
202[INC 37.232.129.226:34730 PRE-HANDSHAKE] - INCOMING
203[INC 37.232.129.226:34730 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
204NEW PEER DISCOVERED 37.232.129.226:34730
205[INC 37.232.129.226:34730 PRE-HANDSHAKE] - HANDSHAKE SUCCES
206[INC 37.232.129.226:34730 ACTIVE] - SENT RESPONSECOMMAND1001
207[INC 37.232.129.226:34730 ACTIVE] - RECEIVED REQUESTCOMMAND1007
208[INC 37.232.129.226:34730 ACTIVE] - Starting TAR PIT
209[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT HEADER
210[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
211[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
212[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
213[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
214[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
215[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
216[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
217[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
218[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
219[INC 37.232.129.226:34730 ACTIVE] - DISCONNECTED
220[INC 37.232.129.226:34730 INACTIVE] - SENT TAR PIT MSG
221RANDOM KOSHER PEER W 37.232.129.226:34730
222RANDOM KOSHER PEER W 37.232.129.226:34730
223RANDOM KOSHER PEER W 37.232.129.226:34730
224RANDOM KOSHER PEER W 37.232.129.226:34730
225RANDOM KOSHER PEER W 37.232.129.226:34730
226RANDOM KOSHER PEER W 37.232.129.226:34730
227RANDOM KOSHER PEER W 37.232.129.226:34730
228[INC 37.232.129.226:34816 PRE-HANDSHAKE] - INCOMING
229[INC 37.232.129.226:34816 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
230NEW PEER DISCOVERED 37.232.129.226:34816
231[INC 37.232.129.226:34816 PRE-HANDSHAKE] - HANDSHAKE SUCCES
232[INC 37.232.129.226:34816 ACTIVE] - SENT RESPONSECOMMAND1001
233[INC 37.232.129.226:34816 ACTIVE] - RECEIVED REQUESTCOMMAND1007
234[INC 37.232.129.226:34816 ACTIVE] - Starting TAR PIT
235[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT HEADER
236[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
237[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
238[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
239[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
240[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
241[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
242[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
243[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
244[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
245[INC 37.232.129.226:34816 ACTIVE] - DISCONNECTED
246[INC 37.232.129.226:34816 INACTIVE] - SENT TAR PIT MSG
247[INC 37.232.129.226:34830 PRE-HANDSHAKE] - INCOMING
248[INC 37.232.129.226:34830 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
249NEW PEER DISCOVERED 37.232.129.226:34830
250[INC 37.232.129.226:34830 PRE-HANDSHAKE] - HANDSHAKE SUCCES
251[INC 37.232.129.226:34830 ACTIVE] - SENT RESPONSECOMMAND1001
252[INC 37.232.129.226:34830 ACTIVE] - RECEIVED REQUESTCOMMAND1007
253[INC 37.232.129.226:34830 ACTIVE] - Starting TAR PIT
254[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT HEADER
255[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
256[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
257[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
258[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
259[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
260[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
261[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
262[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
263[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
264[INC 37.232.129.226:34830 ACTIVE] - DISCONNECTED
265[INC 37.232.129.226:34830 INACTIVE] - SENT TAR PIT MSG
266RANDOM KOSHER PEER W 37.232.129.226:34830
267RANDOM KOSHER PEER W 37.232.129.226:34830
268[INC 37.232.129.226:34878 PRE-HANDSHAKE] - INCOMING
269[INC 37.232.129.226:34878 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
270NEW PEER DISCOVERED 37.232.129.226:34878
271[INC 37.232.129.226:34878 PRE-HANDSHAKE] - HANDSHAKE SUCCES
272[INC 37.232.129.226:34878 ACTIVE] - SENT RESPONSECOMMAND1001
273[INC 37.232.129.226:34878 ACTIVE] - RECEIVED REQUESTCOMMAND1007
274[INC 37.232.129.226:34878 ACTIVE] - Starting TAR PIT
275[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT HEADER
276[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
277[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
278[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
279[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
280[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
281[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
282[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
283[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
284[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
285[INC 37.232.129.226:34878 ACTIVE] - DISCONNECTED
286[INC 37.232.129.226:34878 INACTIVE] - SENT TAR PIT MSG
287[OUT 77.68.82.168:12210 INACTIVE] - DISCONNECTED
288NEW PEER DISCOVERED 77.68.82.168:12210
289TRY CONNECT 77.68.82.168:12210
290ACTIVE CONNECT 77.68.82.168:12210
291[INC 77.68.82.168:58016 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
292[INC 77.68.82.168:58016 PRE-HANDSHAKE] - INCOMING
293NEW PEER DISCOVERED 77.68.82.168:58016
294[INC 77.68.82.168:58016 PRE-HANDSHAKE] - HANDSHAKE SUCCES
295[INC 77.68.82.168:58016 ACTIVE] - SENT RESPONSECOMMAND1001
296[INC 77.68.82.168:58016 ACTIVE] - RECEIVED REQUESTCOMMAND1007
297[INC 77.68.82.168:58016 ACTIVE] - Starting TAR PIT
298[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT HEADER
299[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - SENT REQUESTCOMMAND1001
300[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
301[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
302[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - RECEIVED RESPONSECOMMAND1001
303[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
304[INC 77.68.82.168:58020 PRE-HANDSHAKE] - INCOMING
305[INC 77.68.82.168:58020 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
306[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - HANDSHAKE SUCCES
307[INC 77.68.82.168:58020 PRE-HANDSHAKE] - PING WITH: OK/11681408209644783568
308[INC 77.68.82.168:58020 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
309[INC 77.68.82.168:58020 PRE-HANDSHAKE] - DISCONNECTED
310[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
311[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
312[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
313[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
314[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
315[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
316[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
317[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
318[INC 77.68.82.168:58016 ACTIVE] - DISCONNECTED
319[INC 77.68.82.168:58016 INACTIVE] - SENT TAR PIT MSG
320[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND2008
321[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND1002
322[OUT 77.68.82.168:12210 ACTIVE] - SENT RESPONSECOMMAND1002
323[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND2008
324[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND2002
325[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND1002
326[OUT 77.68.82.168:12210 ACTIVE] - SENT RESPONSECOMMAND1002
327[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND2008
328[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND2008
329[OUT 77.68.82.168:12210 INACTIVE] - DISCONNECTED
330NEW PEER DISCOVERED 77.68.82.168:12210
331TRY CONNECT 77.68.82.168:12210
332ACTIVE CONNECT 77.68.82.168:12210
333[INC 77.68.82.168:58016 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
334[INC 77.68.82.168:58016 PRE-HANDSHAKE] - INCOMING
335NEW PEER DISCOVERED 77.68.82.168:58016
336[INC 77.68.82.168:58016 PRE-HANDSHAKE] - HANDSHAKE SUCCES
337[INC 77.68.82.168:58016 ACTIVE] - SENT RESPONSECOMMAND1001
338[INC 77.68.82.168:58016 ACTIVE] - RECEIVED REQUESTCOMMAND1007
339[INC 77.68.82.168:58016 ACTIVE] - Starting TAR PIT
340[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT HEADER
341[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - SENT REQUESTCOMMAND1001
342[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
343[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
344[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - RECEIVED RESPONSECOMMAND1001
345[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
346[INC 77.68.82.168:58020 PRE-HANDSHAKE] - INCOMING
347[INC 77.68.82.168:58020 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
348[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - HANDSHAKE SUCCES
349[INC 77.68.82.168:58020 PRE-HANDSHAKE] - PING WITH: OK/11681408209644783568
350[INC 77.68.82.168:58020 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
351[INC 77.68.82.168:58020 PRE-HANDSHAKE] - DISCONNECTED
352[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
353[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
354[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
355[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
356[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
357[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
358[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
359[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
360[INC 77.68.82.168:58016 ACTIVE] - DISCONNECTED
361[INC 77.68.82.168:58016 INACTIVE] - SENT TAR PIT MSG
362[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND2008
363[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND1002
364[OUT 77.68.82.168:12210 ACTIVE] - SENT RESPONSECOMMAND1002
365[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND2008
366[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND2002
367[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND1002
368[OUT 77.68.82.168:12210 ACTIVE] - SENT RESPONSECOMMAND1002
369[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND2008
370[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND2008
371[INC 77.68.82.168:58016 ACTIVE] - Starting TAR PIT
372[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT HEADER
373[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
374[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
375[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
376[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
377[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
378[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
379[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
380[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
381[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
382[INC 77.68.82.168:58016 INACTIVE] - SENT TAR PIT MSG
383[INC 37.232.129.226:34502 ACTIVE] - Starting TAR PIT
384[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT HEADER
385[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
386[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
387[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
388[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
389[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
390[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
391[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
392[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
393[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
394[INC 37.232.129.226:34502 INACTIVE] - SENT TAR PIT MSG
395[INC 37.232.129.226:34570 ACTIVE] - Starting TAR PIT
396[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT HEADER
397[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
398[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
399[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
400[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
401[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
402[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
403[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
404[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
405[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
406[INC 37.232.129.226:34570 INACTIVE] - SENT TAR PIT MSG
407[INC 37.232.129.226:34654 ACTIVE] - Starting TAR PIT
408[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT HEADER
409[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
410[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
411[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
412[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
413[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
414[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
415[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
416[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
417[INC 37.232.129.226:34654 ACTIVE] - SENT TAR PIT MSG
418[INC 37.232.129.226:34654 INACTIVE] - SENT TAR PIT MSG
419[INC 37.232.129.226:34730 ACTIVE] - Starting TAR PIT
420[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT HEADER
421[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
422[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
423[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
424[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
425[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
426[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
427[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
428[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
429[INC 37.232.129.226:34730 ACTIVE] - SENT TAR PIT MSG
430[INC 37.232.129.226:34730 INACTIVE] - SENT TAR PIT MSG
431[INC 37.232.129.226:34816 ACTIVE] - Starting TAR PIT
432[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT HEADER
433[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
434[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
435[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
436[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
437[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
438[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
439[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
440[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
441[INC 37.232.129.226:34816 ACTIVE] - SENT TAR PIT MSG
442[INC 37.232.129.226:34816 INACTIVE] - SENT TAR PIT MSG
443[INC 37.232.129.226:34830 ACTIVE] - Starting TAR PIT
444[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT HEADER
445[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
446[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
447[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
448[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
449[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
450[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
451[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
452[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
453[INC 37.232.129.226:34830 ACTIVE] - SENT TAR PIT MSG
454[INC 37.232.129.226:34830 INACTIVE] - SENT TAR PIT MSG
455[INC 37.232.129.226:34878 ACTIVE] - Starting TAR PIT
456[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT HEADER
457[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
458[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
459[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
460[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
461[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
462[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
463[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
464[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
465[INC 37.232.129.226:34878 ACTIVE] - SENT TAR PIT MSG
466[INC 37.232.129.226:34878 INACTIVE] - SENT TAR PIT MSG
467RANDOM KOSHER PEER W 37.232.129.226:34250
468RANDOM KOSHER PEER W 37.232.129.226:34250
469[INC 37.232.129.226:34502 PRE-HANDSHAKE] - INCOMING
470[INC 37.232.129.226:34502 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
471NEW PEER DISCOVERED 37.232.129.226:34502
472[INC 37.232.129.226:34502 PRE-HANDSHAKE] - HANDSHAKE SUCCES
473[INC 37.232.129.226:34502 ACTIVE] - SENT RESPONSECOMMAND1001
474[INC 37.232.129.226:34502 ACTIVE] - RECEIVED REQUESTCOMMAND1007
475[INC 37.232.129.226:34502 ACTIVE] - Starting TAR PIT
476[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT HEADER
477[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
478[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
479[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
480[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
481[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
482[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
483[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
484[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
485[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
486[INC 37.232.129.226:34502 ACTIVE] - DISCONNECTED
487[INC 37.232.129.226:34502 INACTIVE] - SENT TAR PIT MSG
488RANDOM KOSHER PEER W 37.232.129.226:34502
489RANDOM KOSHER PEER W 37.232.129.226:34502
490RANDOM KOSHER PEER W 37.232.129.226:34502
491RANDOM KOSHER PEER W 37.232.129.226:34502
492[INC 37.232.129.226:34570 PRE-HANDSHAKE] - INCOMING
493[INC 37.232.129.226:34570 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
494NEW PEER DISCOVERED 37.232.129.226:34570
495[INC 37.232.129.226:34570 PRE-HANDSHAKE] - HANDSHAKE SUCCES
496[INC 37.232.129.226:34570 ACTIVE] - SENT RESPONSECOMMAND1001
497[INC 37.232.129.226:34570 ACTIVE] - RECEIVED REQUESTCOMMAND1007
498[INC 37.232.129.226:34570 ACTIVE] - Starting TAR PIT
499[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT HEADER
500[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
501[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
502[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
503[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
504[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
505[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
506[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
507[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
508[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
509[INC 37.232.129.226:34570 ACTIVE] - DISCONNECTED
510[INC 37.232.129.226:34570 INACTIVE] - SENT TAR PIT MSG
511RANDOM KOSHER PEER W 37.232.129.226:34570
512RANDOM KOSHER PEER W 37.232.129.226:34570
513[OUT 77.68.82.168:12210 INACTIVE] - DISCONNECTED
514NEW PEER DISCOVERED 77.68.82.168:12210
515TRY CONNECT 77.68.82.168:12210
516ACTIVE CONNECT 77.68.82.168:12210
517[INC 77.68.82.168:58016 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
518[INC 77.68.82.168:58016 PRE-HANDSHAKE] - INCOMING
519NEW PEER DISCOVERED 77.68.82.168:58016
520[INC 77.68.82.168:58016 PRE-HANDSHAKE] - HANDSHAKE SUCCES
521[INC 77.68.82.168:58016 ACTIVE] - SENT RESPONSECOMMAND1001
522[INC 77.68.82.168:58016 ACTIVE] - RECEIVED REQUESTCOMMAND1007
523[INC 77.68.82.168:58016 ACTIVE] - Starting TAR PIT
524[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT HEADER
525[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - SENT REQUESTCOMMAND1001
526[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
527[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
528[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - RECEIVED RESPONSECOMMAND1001
529[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
530[INC 77.68.82.168:58020 PRE-HANDSHAKE] - INCOMING
531[INC 77.68.82.168:58020 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
532[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - HANDSHAKE SUCCES
533[INC 77.68.82.168:58020 PRE-HANDSHAKE] - PING WITH: OK/11681408209644783568
534[INC 77.68.82.168:58020 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
535[INC 77.68.82.168:58020 PRE-HANDSHAKE] - DISCONNECTED
536[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
537[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
538[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
539[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
540[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
541[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
542[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
543[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
544[INC 77.68.82.168:58016 ACTIVE] - DISCONNECTED
545[INC 77.68.82.168:58016 INACTIVE] - SENT TAR PIT MSG
546[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND2008
547[OUT 77.68.82.168:12210 ACTIVE] - RECEIVED REQUESTCOMMAND1002
548[OUT 77.68.82.168:12210 ACTIVE] - SENT RESPONSECOMMAND1002
549[INC 77.68.82.168:58016 ACTIVE] - Starting TAR PIT
550[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT HEADER
551[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
552[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
553[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
554[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
555[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
556[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
557[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
558[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
559[INC 77.68.82.168:58016 ACTIVE] - SENT TAR PIT MSG
560[INC 77.68.82.168:58016 INACTIVE] - SENT TAR PIT MSG
561[INC 37.232.129.226:34502 ACTIVE] - Starting TAR PIT
562[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT HEADER
563[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
564[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
565[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
566[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
567[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
568[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
569[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
570[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
571[INC 37.232.129.226:34502 ACTIVE] - SENT TAR PIT MSG
572[INC 37.232.129.226:34502 INACTIVE] - SENT TAR PIT MSG
573[INC 37.232.129.226:34570 ACTIVE] - Starting TAR PIT
574[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT HEADER
575[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
576[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
577[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
578[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
579[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
580[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
581[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
582[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
583[INC 37.232.129.226:34570 ACTIVE] - SENT TAR PIT MSG
584[INC 37.232.129.226:34570 INACTIVE] - SENT TAR PIT MSG
585RANDOM KOSHER PEER W 37.232.129.226:33556
586[INC 37.232.129.226:33802 PRE-HANDSHAKE] - INCOMING
587[INC 37.232.129.226:33802 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
588NEW PEER DISCOVERED 37.232.129.226:33802
589[INC 37.232.129.226:33802 PRE-HANDSHAKE] - HANDSHAKE SUCCES
590[INC 37.232.129.226:33802 ACTIVE] - SENT RESPONSECOMMAND1001
591[INC 37.232.129.226:33802 ACTIVE] - RECEIVED REQUESTCOMMAND1007
592[INC 37.232.129.226:33802 ACTIVE] - Starting TAR PIT
593[INC 37.232.129.226:33802 ACTIVE] - SENT TART PIT HEADER
594[INC 37.232.129.226:33802 ACTIVE] - SENT TART PIT MSG
595[INC 37.232.129.226:33802 ACTIVE] - SENT TART PIT MSG
596[INC 37.232.129.226:33802 ACTIVE] - SENT TART PIT MSG
597[INC 37.232.129.226:33802 ACTIVE] - SENT TART PIT MSG
598[INC 37.232.129.226:33802 ACTIVE] - DISCONNECTED
599[INC 37.232.129.226:33802 INACTIVE] - SENT TART PIT MSG
600RANDOM KOSHER PEER W 37.232.129.226:33802
601RANDOM KOSHER PEER W 37.232.129.226:33802
602[INC 37.232.129.226:33838 PRE-HANDSHAKE] - INCOMING
603[INC 37.232.129.226:33838 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
604NEW PEER DISCOVERED 37.232.129.226:33838
605[INC 37.232.129.226:33838 PRE-HANDSHAKE] - HANDSHAKE SUCCES
606[INC 37.232.129.226:33838 ACTIVE] - SENT RESPONSECOMMAND1001
607[INC 37.232.129.226:33838 ACTIVE] - RECEIVED REQUESTCOMMAND1007
608[INC 37.232.129.226:33838 ACTIVE] - Starting TAR PIT
609[INC 37.232.129.226:33838 ACTIVE] - SENT TART PIT HEADER
610[INC 37.232.129.226:33838 ACTIVE] - SENT TART PIT MSG
611[INC 37.232.129.226:33838 ACTIVE] - SENT TART PIT MSG
612[INC 37.232.129.226:33838 ACTIVE] - SENT TART PIT MSG
613[INC 37.232.129.226:33838 ACTIVE] - SENT TART PIT MSG
614[INC 37.232.129.226:33838 ACTIVE] - DISCONNECTED
615[INC 37.232.129.226:33838 INACTIVE] - SENT TART PIT MSG
616[INC 37.232.129.226:33852 PRE-HANDSHAKE] - INCOMING
617[INC 37.232.129.226:33852 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
618NEW PEER DISCOVERED 37.232.129.226:33852
619[INC 37.232.129.226:33852 PRE-HANDSHAKE] - HANDSHAKE SUCCES
620[INC 37.232.129.226:33852 ACTIVE] - SENT RESPONSECOMMAND1001
621[INC 37.232.129.226:33852 ACTIVE] - RECEIVED REQUESTCOMMAND1007
622[INC 37.232.129.226:33852 ACTIVE] - Starting TAR PIT
623[INC 37.232.129.226:33852 ACTIVE] - SENT TART PIT HEADER
624[INC 37.232.129.226:33852 ACTIVE] - SENT TART PIT MSG
625[INC 37.232.129.226:33852 ACTIVE] - SENT TART PIT MSG
626[INC 37.232.129.226:33852 ACTIVE] - SENT TART PIT MSG
627[INC 37.232.129.226:33852 ACTIVE] - SENT TART PIT MSG
628[INC 37.232.129.226:33852 ACTIVE] - DISCONNECTED
629[INC 37.232.129.226:33852 INACTIVE] - SENT TART PIT MSG
630[INC 37.232.129.226:33870 PRE-HANDSHAKE] - INCOMING
631[INC 37.232.129.226:33870 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
632NEW PEER DISCOVERED 37.232.129.226:33870
633[INC 37.232.129.226:33870 PRE-HANDSHAKE] - HANDSHAKE SUCCES
634[INC 37.232.129.226:33870 ACTIVE] - SENT RESPONSECOMMAND1001
635[INC 37.232.129.226:33870 ACTIVE] - RECEIVED REQUESTCOMMAND1007
636[INC 37.232.129.226:33870 ACTIVE] - Starting TAR PIT
637[INC 37.232.129.226:33870 ACTIVE] - SENT TART PIT HEADER
638[INC 37.232.129.226:33870 ACTIVE] - SENT TART PIT MSG
639[INC 37.232.129.226:33870 ACTIVE] - SENT TART PIT MSG
640[INC 37.232.129.226:33870 ACTIVE] - SENT TART PIT MSG
641[INC 37.232.129.226:33870 ACTIVE] - SENT TART PIT MSG
642[INC 37.232.129.226:33870 ACTIVE] - DISCONNECTED
643[INC 37.232.129.226:33870 INACTIVE] - SENT TART PIT MSG
644RANDOM KOSHER PEER W 37.232.129.226:33870
645RANDOM KOSHER PEER W 37.232.129.226:33870
646[INC 37.232.129.226:33900 PRE-HANDSHAKE] - INCOMING
647[INC 37.232.129.226:33900 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
648NEW PEER DISCOVERED 37.232.129.226:33900
649[INC 37.232.129.226:33900 PRE-HANDSHAKE] - HANDSHAKE SUCCES
650[INC 37.232.129.226:33900 ACTIVE] - SENT RESPONSECOMMAND1001
651[INC 37.232.129.226:33900 ACTIVE] - RECEIVED REQUESTCOMMAND1007
652[INC 37.232.129.226:33900 ACTIVE] - Starting TAR PIT
653[INC 37.232.129.226:33900 ACTIVE] - SENT TART PIT HEADER
654[INC 37.232.129.226:33900 ACTIVE] - SENT TART PIT MSG
655[INC 37.232.129.226:33900 ACTIVE] - SENT TART PIT MSG
656[INC 37.232.129.226:33900 ACTIVE] - SENT TART PIT MSG
657[INC 37.232.129.226:33900 ACTIVE] - SENT TART PIT MSG
658[OUT 194.85.135.154:12210 ACTIVE] - [INC 37.232.129.226:33900 ACTIVE] - RECEIVED REQUESTCOMMAND DISCONNECTED
659[INC 37.232.129.226:33900 INACTIVE] - SENT TART PIT MSG
660RANDOM KOSHER PEER W 37.232.129.226:33900
661RANDOM KOSHER PEER W 37.232.129.226:33900
662RANDOM KOSHER PEER W 37.232.129.226:33900
663RANDOM KOSHER PEER W 37.232.129.226:33900
664[INC 37.232.129.226:33966 PRE-HANDSHAKE] - INCOMING
665[INC 37.232.129.226:33966 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
666NEW PEER DISCOVERED 37.232.129.226:33966
667[INC 37.232.129.226:33966 PRE-HANDSHAKE] - HANDSHAKE SUCCES
668[INC 37.232.129.226:33966 ACTIVE] - SENT RESPONSECOMMAND1001
669[INC 37.232.129.226:33966 ACTIVE] - RECEIVED REQUESTCOMMAND1007
670[INC 37.232.129.226:33966 ACTIVE] - Starting TAR PIT
671[INC 37.232.129.226:33966 ACTIVE] - SENT TART PIT HEADER
672[INC 37.232.129.226:33966 ACTIVE] - SENT TART PIT MSG
673[INC 37.232.129.226:33966 ACTIVE] - SENT TART PIT MSG
674[INC 37.232.129.226:33966 ACTIVE] - SENT TART PIT MSG
675[INC 37.232.129.226:33966 ACTIVE] - SENT TART PIT MSG
676[INC 37.232.129.226:33966 ACTIVE] - DISCONNECTED
677[INC 37.232.129.226:33966 INACTIVE] - SENT TART PIT MSG
678[INC 37.232.129.226:33984 PRE-HANDSHAKE] - INCOMING
679[INC 37.232.129.226:33984 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
680NEW PEER DISCOVERED 37.232.129.226:33984
681[INC 37.232.129.226:33984 PRE-HANDSHAKE] - HANDSHAKE SUCCES
682[INC 37.232.129.226:33984 ACTIVE] - SENT RESPONSECOMMAND1001
683[INC 37.232.129.226:33984 ACTIVE] - RECEIVED REQUESTCOMMAND1007
684[INC 37.232.129.226:33984 ACTIVE] - Starting TAR PIT
685[INC 37.232.129.226:33984 ACTIVE] - SENT TART PIT HEADER
686[INC 37.232.129.226:33984 ACTIVE] - SENT TART PIT MSG
687[INC 37.232.129.226:33984 ACTIVE] - SENT TART PIT MSG
688[INC 37.232.129.226:33984 ACTIVE] - SENT TART PIT MSG
689[INC 37.232.129.226:33984 ACTIVE] - SENT TART PIT MSG
690[INC 37.232.129.226:33984 ACTIVE] - DISCONNECTED
691[INC 37.232.129.226:33984 INACTIVE] - SENT TART PIT MSG
692[INC 37.232.129.226:34000 PRE-HANDSHAKE] - INCOMING
693[INC 37.232.129.226:34000 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
694NEW PEER DISCOVERED 37.232.129.226:34000
695[INC 37.232.129.226:34000 PRE-HANDSHAKE] - HANDSHAKE SUCCES
696[INC 37.232.129.226:34000 ACTIVE] - SENT RESPONSECOMMAND1001
697[INC 37.232.129.226:34000 ACTIVE] - RECEIVED REQUESTCOMMAND1007
698[INC 37.232.129.226:34000 ACTIVE] - Starting TAR PIT
699[INC 37.232.129.226:34000 ACTIVE] - SENT TART PIT HEADER
700[INC 37.232.129.226:34000 ACTIVE] - SENT TART PIT MSG
701[INC 37.232.129.226:34000 ACTIVE] - SENT TART PIT MSG
702[INC 37.232.129.226:34000 ACTIVE] - SENT TART PIT MSG
703[INC 37.232.129.226:34000 ACTIVE] - SENT TART PIT MSG
704[INC 37.232.129.226:34000 ACTIVE] - DISCONNECTED
705[INC 37.232.129.226:34000 INACTIVE] - SENT TART PIT MSG
706[INC 37.232.129.226:34012 PRE-HANDSHAKE] - INCOMING
707[INC 37.232.129.226:34012 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
708NEW PEER DISCOVERED 37.232.129.226:34012
709[INC 37.232.129.226:34012 PRE-HANDSHAKE] - HANDSHAKE SUCCES
710[INC 37.232.129.226:34012 ACTIVE] - SENT RESPONSECOMMAND1001
711[INC 37.232.129.226:34012 ACTIVE] - RECEIVED REQUESTCOMMAND1007
712[INC 37.232.129.226:34012 ACTIVE] - Starting TAR PIT
713[INC 37.232.129.226:34012 ACTIVE] - SENT TART PIT HEADER
714[INC 37.232.129.226:34012 ACTIVE] - SENT TART PIT MSG
715[INC 37.232.129.226:34012 ACTIVE] - SENT TART PIT MSG
716[INC 37.232.129.226:34012 ACTIVE] - SENT TART PIT MSG
717[INC 37.232.129.226:34012 ACTIVE] - SENT TART PIT MSG
718[INC 37.232.129.226:34012 ACTIVE] - DISCONNECTED
719[INC 37.232.129.226:34012 INACTIVE] - SENT TART PIT MSG
720RANDOM KOSHER PEER W 37.232.129.226:34012
721RANDOM KOSHER PEER W 37.232.129.226:34012
722RANDOM KOSHER PEER W 37.232.129.226:34012
723RANDOM KOSHER PEER W 37.232.129.226:34012
724RANDOM KOSHER PEER W 37.232.129.226:34012
725RANDOM KOSHER PEER W 37.232.129.226:34012
726RANDOM KOSHER PEER W 37.232.129.226:34012
727RANDOM KOSHER PEER W 37.232.129.226:34012
728RANDOM KOSHER PEER W 37.232.129.226:34012
729RANDOM KOSHER PEER W 37.232.129.226:34012
730RANDOM KOSHER PEER W 37.232.129.226:34012
731[INC 37.232.129.226:33802 ACTIVE] - Starting TAR PIT
732[INC 37.232.129.226:33838 ACTIVE] - Starting TAR PIT
733[INC 37.232.129.226:33852 ACTIVE] - Starting TAR PIT
734[INC 37.232.129.226:33870 ACTIVE] - Starting TAR PIT
735[INC 37.232.129.226:33900 ACTIVE] - Starting TAR PIT
736[INC 37.232.129.226:33966 ACTIVE] - Starting TAR PIT
737[INC 37.232.129.226:33984 ACTIVE] - Starting TAR PIT
738[INC 37.232.129.226:34000 ACTIVE] - Starting TAR PIT
739[INC 37.232.129.226:34012 ACTIVE] - Starting TAR PIT
740RANDOM KOSHER PEER W 37.232.129.226:33556
741[INC 37.232.129.226:33802 PRE-HANDSHAKE] - INCOMING
742[INC 37.232.129.226:33802 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
743NEW PEER DISCOVERED 37.232.129.226:33802
744[INC 37.232.129.226:33802 PRE-HANDSHAKE] - HANDSHAKE SUCCES
745[INC 37.232.129.226:33802 ACTIVE] - SENT RESPONSECOMMAND1001
746[INC 37.232.129.226:33802 ACTIVE] - RECEIVED REQUESTCOMMAND1007
747[INC 37.232.129.226:33802 ACTIVE] - Starting TAR PIT
748[INC 37.232.129.226:33802 ACTIVE] - SENT TART PIT HEADER
749[INC 37.232.129.226:33802 ACTIVE] - SENT TART PIT MSG
750[INC 37.232.129.226:33802 ACTIVE] - SENT TART PIT MSG
751[INC 37.232.129.226:33802 ACTIVE] - SENT TART PIT MSG
752[INC 37.232.129.226:33802 ACTIVE] - SENT TART PIT MSG
753[INC 37.232.129.226:33802 ACTIVE] - DISCONNECTED
754[INC 37.232.129.226:33802 INACTIVE] - SENT TART PIT MSG
755RANDOM KOSHER PEER W 37.232.129.226:33802
756RANDOM KOSHER PEER W 37.232.129.226:33802
757[INC 37.232.129.226:33838 PRE-HANDSHAKE] - INCOMING
758[INC 37.232.129.226:33838 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
759NEW PEER DISCOVERED 37.232.129.226:33838
760[INC 37.232.129.226:33838 PRE-HANDSHAKE] - HANDSHAKE SUCCES
761[INC 37.232.129.226:33838 ACTIVE] - SENT RESPONSECOMMAND1001
762[INC 37.232.129.226:33838 ACTIVE] - RECEIVED REQUESTCOMMAND1007
763[INC 37.232.129.226:33838 ACTIVE] - Starting TAR PIT
764[INC 37.232.129.226:33838 ACTIVE] - SENT TART PIT HEADER
765[INC 37.232.129.226:33838 ACTIVE] - SENT TART PIT MSG
766[INC 37.232.129.226:33838 ACTIVE] - SENT TART PIT MSG
767[INC 37.232.129.226:33838 ACTIVE] - SENT TART PIT MSG
768[INC 37.232.129.226:33838 ACTIVE] - SENT TART PIT MSG
769[INC 37.232.129.226:33838 ACTIVE] - DISCONNECTED
770[INC 37.232.129.226:33838 INACTIVE] - SENT TART PIT MSG
771[INC 37.232.129.226:33852 PRE-HANDSHAKE] - INCOMING
772[INC 37.232.129.226:33852 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
773NEW PEER DISCOVERED 37.232.129.226:33852
774[INC 37.232.129.226:33852 PRE-HANDSHAKE] - HANDSHAKE SUCCES
775[INC 37.232.129.226:33852 ACTIVE] - SENT RESPONSECOMMAND1001
776[INC 37.232.129.226:33852 ACTIVE] - RECEIVED REQUESTCOMMAND1007
777[INC 37.232.129.226:33852 ACTIVE] - Starting TAR PIT
778[INC 37.232.129.226:33852 ACTIVE] - SENT TART PIT HEADER
779[INC 37.232.129.226:33852 ACTIVE] - SENT TART PIT MSG
780[INC 37.232.129.226:33852 ACTIVE] - SENT TART PIT MSG
781[INC 37.232.129.226:33852 ACTIVE] - SENT TART PIT MSG
782[INC 37.232.129.226:33852 ACTIVE] - SENT TART PIT MSG
783[INC 37.232.129.226:33852 ACTIVE] - DISCONNECTED
784[INC 37.232.129.226:33852 INACTIVE] - SENT TART PIT MSG
785[INC 37.232.129.226:33870 PRE-HANDSHAKE] - INCOMING
786[INC 37.232.129.226:33870 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
787NEW PEER DISCOVERED 37.232.129.226:33870
788[INC 37.232.129.226:33870 PRE-HANDSHAKE] - HANDSHAKE SUCCES
789[INC 37.232.129.226:33870 ACTIVE] - SENT RESPONSECOMMAND1001
790[INC 37.232.129.226:33870 ACTIVE] - RECEIVED REQUESTCOMMAND1007
791[INC 37.232.129.226:33870 ACTIVE] - Starting TAR PIT
792[INC 37.232.129.226:33870 ACTIVE] - SENT TART PIT HEADER
793[INC 37.232.129.226:33870 ACTIVE] - SENT TART PIT MSG
794[INC 37.232.129.226:33870 ACTIVE] - SENT TART PIT MSG
795[INC 37.232.129.226:33870 ACTIVE] - SENT TART PIT MSG
796[INC 37.232.129.226:33870 ACTIVE] - SENT TART PIT MSG
797[INC 37.232.129.226:33870 ACTIVE] - DISCONNECTED
798[INC 37.232.129.226:33870 INACTIVE] - SENT TART PIT MSG
799RANDOM KOSHER PEER W 37.232.129.226:33870
800[INC 37.232.129.226:33802 ACTIVE] - Starting TAR PIT
801[INC 37.232.129.226:33838 ACTIVE] - Starting TAR PIT
802[INC 37.232.129.226:33852 ACTIVE] - Starting TAR PIT
803[INC 37.232.129.226:33870 ACTIVE] - Starting TAR PIT
804[INC 37.232.129.226:58584 ACTIVE] - DISCONNECTED
805RANDOM KOSHER PEER W 37.232.129.226:58584
806[INC 37.232.129.226:33062 PRE-HANDSHAKE] - INCOMING
807[INC 37.232.129.226:33062 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
808NEW PEER DISCOVERED 37.232.129.226:33062
809[INC 37.232.129.226:33062 PRE-HANDSHAKE] - HANDSHAKE SUCCES
810[INC 37.232.129.226:33062 ACTIVE] - SENT RESPONSECOMMAND1001
811[INC 37.232.129.226:33062 ACTIVE] - RECEIVED REQUESTCOMMAND1007
812[INC 37.232.129.226:33062 ACTIVE] - Starting TAR PIT
813[INC 37.232.129.226:33062 ACTIVE] - DISCONNECTED
814RANDOM KOSHER PEER W 37.232.129.226:33062
815RANDOM KOSHER PEER W 37.232.129.226:33062
816RANDOM KOSHER PEER W 37.232.129.226:33062
817[INC 37.232.129.226:33120 PRE-HANDSHAKE] - INCOMING
818[INC 37.232.129.226:33120 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
819NEW PEER DISCOVERED 37.232.129.226:33120
820[INC 37.232.129.226:33120 PRE-HANDSHAKE] - HANDSHAKE SUCCES
821[INC 37.232.129.226:33120 ACTIVE] - SENT RESPONSECOMMAND1001
822[INC 37.232.129.226:33120 ACTIVE] - RECEIVED REQUESTCOMMAND1007
823[INC 37.232.129.226:33120 ACTIVE] - Starting TAR PIT
824Press Enter to start
825 int invoke_async(int command, const std::string &in_buff, boost::uuids::uuid connection_id, const callback_t &cb, size_t timeout = LEVIN_DEFAULT_TIMEOUT_PRECONFIGURED);
826int async_protocol_handler_config<t_connection_context>::invoke_async(int command, const std::string &in_buff, boost::uuids::uuid connection_id, const callback_t &cb, size_t timeout)
827 int res = transport.invoke_async(command, buff_to_send, conn_id, [cb, command](int code, const std::string &buff, typename t_transport::connection_context &context) -> bool {
828 bool invoke_async(uuid con_id, int command, t_request &req, callback_t cb)
829 invoke_async<COMMAND_EXAMPLE_2::response>(context.m_connection_id, COMMAND_EXAMPLE_2::ID, arg_, [](int code, const COMMAND_EXAMPLE_2::response &rsp, const net_utils::connection_context_base &context) {
830 int r = srv.invoke_async<COMMAND_EXAMPLE_1::request>(cntxt.m_connection_id, COMMAND_EXAMPLE_1::ID, arg, [port_, &wait_event_](int code, const COMMAND_EXAMPLE_1::request &rsp, const net_utils::connection_context_base &cntxt) {
831bool async_invoke_remote_command2(boost::uuids::uuid conn_id, int command, const t_arg &out_struct, t_transport &transport, const callback_t &cb, size_t inv_timeout = LEVIN_DEFAULT_TIMEOUT_PRECONFIGURED)
832 bool r = epee::net_utils::async_invoke_remote_command2<typename COMMAND_HANDSHAKE::response>(context_.m_connection_id, COMMAND_HANDSHAKE::ID, arg, m_net_server.get_config_object(),
833 bool r = epee::net_utils::async_invoke_remote_command2<typename COMMAND_TIMED_SYNC::response>(context_.m_connection_id, COMMAND_TIMED_SYNC::ID, arg, m_net_server.get_config_object(),
834 bool inv_call_res = epee::net_utils::async_invoke_remote_command2<COMMAND_PING::response>(ping_context.m_connection_id, COMMAND_PING::ID, req, m_net_server.get_config_object(),
835 bool r = epee::net_utils::async_invoke_remote_command2<typename COMMAND_REQUEST_SUPPORT_FLAGS::response>(
836 if(m_network == "auto")
837 if(result)
838 if(m_network != "auto")
839 if(net_type == "mainnet")
840 else if(net_type == "testnet")
841 else if(net_type == "stagenet")
842 if(m_address_strs.empty())
843 if(std::find(networks.begin(), networks.end(), m_network) == networks.end())
844 if(m_human)
845 if(i > 0)
846 if(command_line::get_windows_args(argptrs))
847 if(vm.count("help"))
848 if((err = (validator.validate_options() != 0)))
849 if(!m_remove_spaces)
850 tmp.erase(std::remove_if(tmp.begin(), tmp.end(), ::isspace), tmp.end());
851 if(!m_filename.empty())
852 if(m_has_filestream)
853 if(!m_has_filestream)
854 if(dbi->cursor(txn, &m_cur, 0))
855 if(!done)
856 set_size(sizeof(T));
857 set_ulen(sizeof(T));
858 if(buf != NULL)
859 if(m_block_heights->exists(DB_DEFAULT_TX, &val_h, 0) == 0)
860 if(m_height > 0)
861 if(m_block_heights->get(DB_DEFAULT_TX, &parent_key, &parent_h, 0))
862 if(parent_height != m_height)
863 if(res)
864 if(m_block_sizes->put(DB_DEFAULT_TX, &key, &sz, 0))
865 if(m_block_timestamps->put(DB_DEFAULT_TX, &key, &ts, 0))
866 Dbt_copy<difficulty_type> diff(cumulative_difficulty);
867 if(m_block_diffs->put(DB_DEFAULT_TX, &key, &diff, 0))
868 if(m_block_coins->put(DB_DEFAULT_TX, &key, &coinsgen, 0))
869 if(m_block_heights->put(DB_DEFAULT_TX, &val_h, &key, 0))
870 if(m_block_hashes->put(DB_DEFAULT_TX, &key, &val_h, 0))
871 if(m_height == 0)
872 if(m_block_hashes->get(DB_DEFAULT_TX, &k, &h, 0))
873 if(m_blocks->del(DB_DEFAULT_TX, &k, 0))
874 if(m_block_sizes->del(DB_DEFAULT_TX, &k, 0))
875 if(m_block_diffs->del(DB_DEFAULT_TX, &k, 0))
876 if(m_block_coins->del(DB_DEFAULT_TX, &k, 0))
877 if(m_block_timestamps->del(DB_DEFAULT_TX, &k, 0))
878 if(m_block_heights->del(DB_DEFAULT_TX, &h, 0))
879 if(m_block_hashes->del(DB_DEFAULT_TX, &k, 0))
880 if(m_txs->exists(DB_DEFAULT_TX, &val_h, 0) == 0)
881 if(m_txs->put(DB_DEFAULT_TX, &val_h, &blob, 0))
882 if(m_tx_heights->put(DB_DEFAULT_TX, &val_h, &height, 0))
883 if(m_tx_unlocks->put(DB_DEFAULT_TX, &val_h, &unlock_time, 0))
884 if(m_txs->exists(DB_DEFAULT_TX, &val_h, 0))
885 if(m_txs->del(DB_DEFAULT_TX, &val_h, 0))
886 if(m_tx_unlocks->del(DB_DEFAULT_TX, &val_h, 0))
887 if(m_tx_heights->del(DB_DEFAULT_TX, &val_h, 0))
888 if(result == DB_NOTFOUND)
889 else if(result)
890 if(m_output_txs->put(DB_DEFAULT_TX, &k, &v, 0))
891 if(m_tx_outputs->put(DB_DEFAULT_TX, &v, &k, 0))
892 if(m_output_indices->put(DB_DEFAULT_TX, &k, &val_local_index, 0))
893 if(m_output_amounts->put(DB_DEFAULT_TX, &val_amount, &k, 0))
894 if(tx_output.target.type() == typeid(txout_to_key))
895 if(m_output_keys->put(DB_DEFAULT_TX, &k, &data, 0))
896 if(result == DB_NOTFOUND)
897 else if(result)
898 if(result != 0 && result != DB_NOTFOUND)
899 if(result == 0)
900 else if(result == DB_NOTFOUND)
901 if(i > 1)
902 if(result == DB_NOTFOUND)
903 else if(result)
904 if(result == DB_NOTFOUND)
905 else if(result)
906 if(result == DB_NOTFOUND)
907 else if(result)
908 if(result == DB_NOTFOUND)
909 else if(result)
910 if(result != 0 && result != DB_NOTFOUND)
911 if(result == 0)
912 else if(result == DB_NOTFOUND)
913 if(goi == global_output_index)
914 if(i > 1)
915 if(found_index)
916 if(result)
917 if(m_spent_keys->exists(DB_DEFAULT_TX, &val_key, 0) == 0)
918 if(m_spent_keys->put(DB_DEFAULT_TX, &val_key, &val, 0))
919 if(result != 0 && result != DB_NOTFOUND)
920 if(!f(k))
921 if(!f(k))
922 if(result != DB_NOTFOUND)
923 if(!parse_and_validate_block_from_blob(bd, b))
924 if(!get_block_hash(b, hash))
925 if(!f(height, hash, b))
926 if(!f(height, hash, b))
927 if(result != DB_NOTFOUND)
928 if(!parse_and_validate_tx_from_blob(bd, tx))
929 if(!f(k, tx))
930 if(!f(k, tx))
931 if(result != DB_NOTFOUND)
932 if(!f(k, toi.first, toi.second))
933 if(!f(k, toi.first, toi.second))
934 if(result != DB_NOTFOUND)
935 if(!t_serializable_object_to_blob(output, b))
936 if(!(::serialization::serialize(ba, o)))
937 if(!global_indices.size())
938 if(!m_open)
939 if(m_open)
940 if(m_open)
941 if(boost::filesystem::exists(direc))
942 if(!boost::filesystem::is_directory(direc))
943 if(!boost::filesystem::create_directories(direc))
944 if(m_auto_remove_logs)
945 m_block_hashes->set_re_len(sizeof(crypto::hash));
946 m_block_timestamps->set_re_len(sizeof(uint64_t));
947 m_block_sizes->set_re_len(sizeof(size_t)); // should really store block size as uint64_t...
948 m_block_diffs->set_re_len(sizeof(difficulty_type));
949 m_block_coins->set_re_len(sizeof(uint64_t));
950 m_output_txs->set_re_len(sizeof(crypto::hash));
951 m_output_indices->set_re_len(sizeof(uint64_t));
952 m_output_keys->set_re_len(sizeof(output_data_t));
953 m_hf_starting_heights->set_re_len(sizeof(uint64_t));
954 m_hf_versions->set_re_len(sizeof(uint8_t));
955 if(get_result == 0)
956 if(result > VERSION)
957 else if(result < VERSION)
958 if(VERSION > 0 && m_height > 0)
959 if(!compatible)
960 if(1 /* this can't be set readonly atm */)
961 if(m_height == 0)
962 if(put_result != 0)
963 if(m_hf_starting_heights != nullptr)
964 if(m_hf_versions != nullptr)
965 if(m_env->txn_begin(NULL, txn, 0))
966 if(get_result == DB_NOTFOUND)
967 else if(get_result)
968 if(height)
969 if(get_result == DB_NOTFOUND)
970 else if(get_result)
971 if(get_result == DB_NOTFOUND)
972 else if(get_result)
973 if(!parse_and_validate_block_from_blob(bd, b))
974 if(get_result == DB_NOTFOUND)
975 else if(get_result)
976 if(m_height == 0)
977 if(get_result == DB_NOTFOUND)
978 else if(get_result)
979 if(get_result == DB_NOTFOUND)
980 else if(get_result)
981 if(height != 0)
982 if(get_result == DB_NOTFOUND)
983 else if(get_result)
984 if(get_result == DB_NOTFOUND)
985 else if(get_result)
986 if(m_height > 0)
987 if(m_height > 0)
988 if(get_result == DB_NOTFOUND)
989 else if(get_result)
990 if(get_result == DB_NOTFOUND)
991 else if(get_result)
992 if(get_result == DB_NOTFOUND)
993 else if(get_result)
994 if(!parse_and_validate_tx_from_blob(bd, tx))
995 if(get_result == DB_NOTFOUND)
996 else if(get_result)
997 if(result == DB_NOTFOUND)
998 else if(result)
999 if(get_result == DB_NOTFOUND)
1000 else if(get_result)
1001 if(!indices.size())
1002 if(result == DB_NOTFOUND)
1003 else if(result)
1004 if(result == DB_NOTFOUND)
1005 else if(result)
1006 if(output_index == global_index)
1007 if(found_index)
1008 if(get_result == DB_NOTFOUND)
1009 else if(get_result)
1010 if(get_result == DB_NOTFOUND)
1011 else if(get_result)
1012 if(m_spent_keys->exists(DB_DEFAULT_TX, &val_key, 0) == 0)
1013 if(m_env->txn_begin(NULL, txn, 0))
1014 if(m_env->txn_begin(NULL, txn, 0))
1015 if(get_result == DB_NOTFOUND)
1016 else if(get_result)
1017 if(get_result == DB_NOTFOUND)
1018 else if(get_result)
1019 if(index > max)
1020 (dbt)->ulen - sizeof(uint32_t)); \
1021 if(result == DB_NOTFOUND)
1022 else if(result)
1023 if(max <= 1 && num_elems <= max)
1024 if(max <= 1)
1025 if(result == DB_NOTFOUND)
1026 else if(result)
1027 buflen = (max + 1) * 4 * sizeof(uint64_t);
1028 if(index >= num_elems)
1029 if(index <= 1 || nomem)
1030 if(result == DB_NOTFOUND)
1031 else if(result)
1032 if(singlebuff)
1033 void *pbase = ((uint8_t *)(pdata->data)) + pdata->ulen - sizeof(uint32_t);
1034 if(*p == (uint32_t)-1)
1035 if(value == (uint8_t *)pdata->data)
1036 if(value != NULL)
1037 v = dlen == sizeof(uint64_t) ? *((uint64_t *)value) : *((uint32_t *)value);
1038 if(global_indices.size() > 0)
1039 if(get_result == DB_NOTFOUND)
1040 else if(get_result)
1041 if(global_indices.size() > 0)
1042 if(m_hf_versions == nullptr)
1043 if(db_stat1->bt_nkeys != db_stat2->bt_nkeys)
1044 if(m_write_txn)
1045 if(m_env->txn_begin(NULL, txn, 0))
1046 if(!m_write_txn)
1047 if(m_write_txn)
1048 if(m_env->txn_begin(NULL, txn, 0))
1049 if(m_env->dbremove(*txn_ptr, BDB_HF_STARTING_HEIGHTS, NULL, 0) != 0)
1050 if(m_env->dbremove(*txn_ptr, BDB_HF_VERSIONS, NULL, 0) != 0)
1051 if(!m_write_txn)
1052 if(m_hf_versions->put(DB_DEFAULT_TX, &val_key, &val, 0))
1053 if(get_result == DB_NOTFOUND || get_result == DB_KEYEMPTY)
1054 else if(get_result)
1055 if(count++ >= 300)
1056 if(m_env->txn_checkpoint(0, 0, 0) != 0)
1057 if(m_txn != NULL)
1058 if(message.size() == 0)
1059 if(m_txn->commit(0))
1060 if(m_txn != NULL)
1061 if(num_buffers > MaxAllowedBuffers)
1062 m_buffers.push_back((T)malloc(sizeof(T) * count));
1063 if(m_buffers[i])
1064 if(m_open_slot[i])
1065 if(it != m_buffer_map.end())
1066 return m_buffer_count * sizeof(T);
1067 if(m_buffer != nullptr)
1068 if(db_types[i] == db_type)
1069 if(i)
1070 if(db_type == "lmdb")
1071 if(db_type == "berkeley")
1072 if(!tx_hash_ptr)
1073 if(tx_input.type() == typeid(txin_to_key))
1074 else if(tx_input.type() == typeid(txin_gen))
1075 if(tx_input.type() == typeid(txin_to_key))
1076 if(miner_tx)
1077 if(m_hardfork->get_current_version_num() <= 3 && tx.version > 2)
1078 if(tx.vout[i].amount != 0)
1079 if(tx_input.type() == typeid(txin_to_key))
1080 if(blk.tx_hashes.size() != txs.size())
1081 if(tx_input.type() == typeid(txin_to_key))
1082 if(!parse_and_validate_block_from_blob(bd, b))
1083 if(!parse_and_validate_block_from_blob(bd, b))
1084 if(!get_tx_blob(h, bd))
1085 if(!parse_and_validate_tx_from_blob(bd, tx))
1086 if(!get_tx(h, tx))
1087 if(is_read_only())
1088 if(!has_key_image(ki))
1089endif()
1090endif()
1091#define MDB_val_set(var, val) MDB_val var = {sizeof(val), (void *)&val}
1092 mv_size = sizeof(T);
1093 if(va[n] == vb[n])
1094const MDB_val zerokval = {sizeof(zerokey), (void *)zerokey};
1095 if(auto res = mdb_dbi_open(txn, name, flags, &dbi))
1096 if(!m_cur_##name) \
1097 if(result) \
1098 if(!m_cur_##name) \
1099 if(result) \
1100 if(m_cursors != &m_wcursors) \
1101 else if(m_cursors != &m_wcursors && !m_tinfo->m_ti_rflags.m_rf_##name) \
1102 if(result) \
1103 for(i = 0; i < sizeof(mdb_txn_cursors) / sizeof(MDB_cursor *); i++)
1104 for(i = 0; i < sizeof(mdb_txn_cursors) / sizeof(MDB_cursor *); i++)
1105 if(cur[i])
1106 if(m_ti_rtxn)
1107 if(check)
1108 if(!m_check)
1109 if(m_tinfo != nullptr)
1110 memset(&m_tinfo->m_ti_rflags, 0, sizeof(m_tinfo->m_ti_rflags));
1111 else if(m_txn != nullptr)
1112 if(m_batch_txn) // this is a batch txn and should have been handled before this point for safety
1113 if(message.size() == 0)
1114 if(auto result = mdb_txn_commit(m_txn))
1115 if(m_txn != nullptr)
1116 if(result)
1117 if(res == MDB_MAP_RESIZED)
1118 if(res == MDB_MAP_RESIZED)
1119 if(si.available < add_size)
1120 if(increase_size > 0)
1121 if(m_write_txn != nullptr)
1122 if(m_batch_active)
1123 if(result)
1124 if(threshold_size > 0)
1125 if(mei.me_mapsize - size_used < threshold_size)
1126 if((double)size_used / mei.me_mapsize > resize_percent)
1127 if(batch_num_blocks > 0)
1128 if(need_resize(threshold_size))
1129 if(m_height > 1)
1130 if(block_stop >= num_prev_blocks)
1131 if(batch_bytes)
1132 if(m_height == 0)
1133 else if(m_cum_count >= num_prev_blocks)
1134 if(avg_block_size < min_block_size)
1135 if(batch_fudge_factor < 5000.0)
1136 if(mdb_cursor_get(m_cur_block_heights, (MDB_val *)&zerokval, &val_h, MDB_GET_BOTH) == 0)
1137 if(m_height > 0)
1138 if(result)
1139 if(prev->bh_height != m_height - 1)
1140 if(result)
1141 if(result)
1142 if(result)
1143 if(m_height == 0)
1144 if((result = mdb_cursor_get(m_cur_block_info, (MDB_val *)&zerokval, &h, MDB_GET_BOTH)))
1145 h.mv_size = sizeof(bh);
1146 if((result = mdb_cursor_get(m_cur_block_heights, (MDB_val *)&zerokval, &h, MDB_GET_BOTH)))
1147 if((result = mdb_cursor_del(m_cur_block_heights, 0)))
1148 if((result = mdb_cursor_get(m_cur_blocks, &k, NULL, MDB_SET)))
1149 if((result = mdb_cursor_del(m_cur_blocks, 0)))
1150 if((result = mdb_cursor_del(m_cur_block_info, 0)))
1151 if(result == 0)
1152 else if(result != MDB_NOTFOUND)
1153 val_h.mv_size = sizeof(ti);
1154 if(result)
1155 if(result)
1156 if(mdb_cursor_get(m_cur_tx_indices, (MDB_val *)&zerokval, &val_h, MDB_GET_BOTH))
1157 if((result = mdb_cursor_get(m_cur_txs, &val_tx_id, NULL, MDB_SET)))
1158 if(result)
1159 if(result == MDB_NOTFOUND)
1160 else if(result)
1161 if(!result)
1162 if(result)
1163 if(mdb_cursor_del(m_cur_tx_indices, 0))
1164 if(tx_output.amount != 0 && tx_output.amount != 1)
1165 if(tx_output.target.type() != typeid(txout_to_key))
1166 if(!commitment)
1167 if(result)
1168 if(!result)
1169 if(result)
1170 else if(result != MDB_NOTFOUND)
1171 data.mv_size = sizeof(ok);
1172 if((result = mdb_cursor_put(m_cur_output_amounts, &val_amount, &data, MDB_APPENDDUP)))
1173 v.mv_size = sizeof(uint64_t) * num_outputs;
1174 if(result)
1175 if(amount_output_indices.empty())
1176 if(tx.vout.empty())
1177 if(result == MDB_NOTFOUND)
1178 else if(result)
1179 if(result == MDB_NOTFOUND)
1180 else if(result)
1181 if(result)
1182 if(result)
1183 MDB_val k = {sizeof(k_image), (void *)&k_image};
1184 if(auto result = mdb_cursor_put(m_cur_spent_keys, (MDB_val *)&zerokval, &k, MDB_NODUPDATA))
1185 if(result == MDB_KEYEXIST)
1186 MDB_val k = {sizeof(k_image), (void *)&k_image};
1187 if(result != 0 && result != MDB_NOTFOUND)
1188 if(!result)
1189 if(result)
1190 if(!t_serializable_object_to_blob(output, b))
1191 if(!(::serialization::serialize(ba, o)))
1192 if(!m_open)
1193 if(m_batch_active)
1194 if(m_open)
1195 if(m_open)
1196 if(boost::filesystem::exists(direc))
1197 if(!boost::filesystem::is_directory(direc))
1198 if(!boost::filesystem::create_directories(direc))
1199 if(boost::filesystem::exists(old_files / CRYPTONOTE_BLOCKCHAINDATA_FILENAME) || boost::filesystem::exists(old_files / CRYPTONOTE_BLOCKCHAINDATA_LOCK_FILENAME))
1200 if((mdb_flags & MDB_WRITEMAP) == 0)
1201 if((result = mdb_env_create(&m_env)))
1202 if((result = mdb_env_set_maxdbs(m_env, 20)))
1203 if(threads > 110 && /* maxreaders default is 126, leave some slots for other read processes */
1204 if(db_flags & DBF_FAST)
1205 if(db_flags & DBF_FASTEST)
1206 if(db_flags & DBF_RDONLY)
1207 if(db_flags & DBF_SALVAGE)
1208 if(auto result = mdb_env_open(m_env, filename.c_str(), mdb_flags, 0644))
1209 if(cur_mapsize < mapsize)
1210 if(auto result = mdb_env_set_mapsize(m_env, mapsize))
1211 if(need_resize())
1212 if(mdb_flags & MDB_RDONLY)
1213 if(auto mdb_res = mdb_txn_begin(m_env, NULL, txn_flags, txn))
1214 if(!(mdb_flags & MDB_RDONLY))
1215 if(!(mdb_flags & MDB_RDONLY))
1216 if(result && result != MDB_NOTFOUND)
1217 if((result = mdb_stat(txn, m_blocks, &db_stats)))
1218 if(get_result == MDB_SUCCESS)
1219 if(*(const uint32_t *)v.mv_data > VERSION)
1220 else if(*(const uint32_t *)v.mv_data < VERSION)
1221 if(VERSION > 0 && m_height > 0)
1222 if(!compatible)
1223 if(!(mdb_flags & MDB_RDONLY))
1224 if(m_height == 0)
1225 if(put_result != MDB_SUCCESS)
1226 if(m_batch_active)
1227 if(auto result = mdb_env_sync(m_env, true))
1228 if(auto result = lmdb_txn_begin(m_env, NULL, 0, txn))
1229 if(auto result = mdb_drop(txn, m_blocks, 0))
1230 if(auto result = mdb_drop(txn, m_block_info, 0))
1231 if(auto result = mdb_drop(txn, m_block_heights, 0))
1232 if(auto result = mdb_drop(txn, m_txs, 0))
1233 if(auto result = mdb_drop(txn, m_tx_indices, 0))
1234 if(auto result = mdb_drop(txn, m_tx_outputs, 0))
1235 if(auto result = mdb_drop(txn, m_output_txs, 0))
1236 if(auto result = mdb_drop(txn, m_output_amounts, 0))
1237 if(auto result = mdb_drop(txn, m_spent_keys, 0))
1238 if(auto result = mdb_drop(txn, m_hf_versions, 0))
1239 if(auto result = mdb_drop(txn, m_properties, 0))
1240 if(auto result = mdb_put(txn, m_properties, &k, &v, 0))
1241 if(m_batch_active) \
1242 if(auto mdb_res = lmdb_txn_begin(m_env, NULL, flags, auto_txn)) \
1243 if(my_rtxn) \
1244 if(!m_batch_active) \
1245 if(m_batch_active || m_write_txn) \
1246 if(auto mdb_res = lmdb_txn_begin(m_env, NULL, flags, auto_txn)) \
1247 if(!m_batch_active && !m_write_txn) \
1248 MDB_val k = {sizeof(txid), (void *)&txid};
1249 MDB_val v = {sizeof(meta), (void *)&meta};
1250 if(auto result = mdb_cursor_put(m_cur_txpool_meta, &k, &v, MDB_NODUPDATA))
1251 if(result == MDB_KEYEXIST)
1252 if(auto result = mdb_cursor_put(m_cur_txpool_blob, &k, &blob_val, MDB_NODUPDATA))
1253 if(result == MDB_KEYEXIST)
1254 MDB_val k = {sizeof(txid), (void *)&txid};
1255 if(result != 0)
1256 if(result)
1257 v = MDB_val({sizeof(meta), (void *)&meta});
1258 if((result = mdb_cursor_put(m_cur_txpool_meta, &k, &v, MDB_NODUPDATA)) != 0)
1259 if(result == MDB_KEYEXIST)
1260 if(include_unrelayed_txes)
1261 if((result = mdb_stat(m_txn, m_txpool_meta, &db_stats)))
1262 if(result == MDB_NOTFOUND)
1263 if(result)
1264 if(!meta.do_not_relay)
1265 MDB_val k = {sizeof(txid), (void *)&txid};
1266 if(result != 0 && result != MDB_NOTFOUND)
1267 MDB_val k = {sizeof(txid), (void *)&txid};
1268 if(result != 0 && result != MDB_NOTFOUND)
1269 if(!result)
1270 if(result)
1271 if(result != 0 && result != MDB_NOTFOUND)
1272 if(!result)
1273 if(result)
1274 MDB_val k = {sizeof(txid), (void *)&txid};
1275 if(result == MDB_NOTFOUND)
1276 if(result != 0)
1277 MDB_val k = {sizeof(txid), (void *)&txid};
1278 if(result == MDB_NOTFOUND)
1279 if(result != 0)
1280 if(!get_txpool_tx_blob(txid, bd))
1281 if(result == MDB_NOTFOUND)
1282 if(result)
1283 if(!include_unrelayed_txes && meta.do_not_relay)
1284 if(include_blob)
1285 if(result == MDB_NOTFOUND)
1286 if(result)
1287 if(!f(txid, meta, passed_bd))
1288 if(!f(txid, meta, passed_bd))
1289 if(get_result == MDB_NOTFOUND)
1290 else if(get_result)
1291 if(height)
1292 if(get_result == MDB_NOTFOUND)
1293 else if(get_result)
1294 if(get_result == MDB_NOTFOUND)
1295 else if(get_result)
1296 if(get_result == MDB_NOTFOUND)
1297 else if(get_result)
1298 if(m_height == 0)
1299 if(get_result == MDB_NOTFOUND)
1300 else if(get_result)
1301 if(get_result == MDB_NOTFOUND)
1302 else if(get_result)
1303 if(height != 0)
1304 if(get_result == MDB_NOTFOUND)
1305 else if(get_result)
1306 if(get_result == MDB_NOTFOUND)
1307 else if(get_result)
1308 if(m_height != 0)
1309 if(m_height != 0)
1310 if((result = mdb_stat(m_txn, m_blocks, &db_stats)))
1311 if((result = mdb_stat(m_txn, m_output_txs, &db_stats)))
1312 if(get_result == 0)
1313 else if(get_result != MDB_NOTFOUND)
1314 if(!tx_found)
1315 if(!get_result)
1316 if(get_result == MDB_NOTFOUND)
1317 else if(get_result)
1318 if(get_result == MDB_NOTFOUND)
1319 else if(get_result)
1320 if(get_result == 0)
1321 if(get_result == MDB_NOTFOUND)
1322 else if(get_result)
1323 if((result = mdb_stat(m_txn, m_txs, &db_stats)))
1324 if(get_result == MDB_NOTFOUND)
1325 else if(get_result)
1326 if(result == MDB_SUCCESS)
1327 else if(result != MDB_NOTFOUND)
1328 if(get_result == MDB_NOTFOUND)
1329 else if(get_result)
1330 if(get_result)
1331 if(get_result == MDB_NOTFOUND)
1332 else if(get_result)
1333 if(!parse_and_validate_tx_from_blob(bd, tx))
1334 if(get_result == MDB_NOTFOUND)
1335 else if(get_result)
1336 if(amount == 0)
1337 memcpy(&ret, &okp->data, sizeof(pre_rct_output_data_t));
1338 if(get_result == MDB_NOTFOUND)
1339 else if(get_result)
1340 if(!indices.size())
1341 if(result == MDB_NOTFOUND)
1342 else if(result)
1343 int num_outputs = v.mv_size / sizeof(uint64_t);
1344 MDB_val k = {sizeof(img), (void *)&img};
1345 if(ret == MDB_NOTFOUND)
1346 if(ret < 0)
1347 if(!f(k_image))
1348 if(!f(k_image))
1349 if(h1)
1350 k = MDB_val{sizeof(h1), (void *)&h1};
1351 if(ret == MDB_NOTFOUND)
1352 if(ret)
1353 if(!parse_and_validate_block_from_blob(bd, b))
1354 if(!get_block_hash(b, hash))
1355 if(!f(height, hash, b))
1356 if(!f(height, hash, b))
1357 if(height >= h2)
1358 if(ret == MDB_NOTFOUND)
1359 if(ret)
1360 k.mv_size = sizeof(ti->data.tx_id);
1361 if(ret == MDB_NOTFOUND)
1362 if(ret)
1363 if(!parse_and_validate_tx_from_blob(bd, tx))
1364 if(!f(hash, tx))
1365 if(!f(hash, tx))
1366 if(ret == MDB_NOTFOUND)
1367 if(ret)
1368 if(!f(amount, toi.first, ok->data.height, toi.second))
1369 if(!f(amount, toi.first, ok->data.height, toi.second))
1370 if(ret == MDB_NOTFOUND)
1371 if(ret)
1372 if(amount != out_amount)
1373 if(!f(ok->data.height))
1374 if(!f(ok->data.height))
1375 if(!m_batch_transactions)
1376 if(m_batch_active)
1377 if(m_write_batch_txn != nullptr)
1378 if(m_write_txn)
1379 if(auto mdb_res = lmdb_txn_begin(m_env, NULL, 0, *m_write_batch_txn))
1380 memset(&m_wcursors, 0, sizeof(m_wcursors));
1381 if(m_tinfo.get())
1382 if(m_tinfo->m_ti_rflags.m_rf_txn)
1383 memset(&m_tinfo->m_ti_rflags, 0, sizeof(m_tinfo->m_ti_rflags));
1384 if(!m_batch_transactions)
1385 if(!m_batch_active)
1386 if(m_write_batch_txn == nullptr)
1387 if(m_writer != boost::this_thread::get_id())
1388 memset(&m_wcursors, 0, sizeof(m_wcursors));
1389 memset(&m_wcursors, 0, sizeof(m_wcursors));
1390 if(!m_batch_transactions)
1391 if(!m_batch_active)
1392 if(m_write_batch_txn == nullptr)
1393 if(m_writer != boost::this_thread::get_id())
1394 if(!m_batch_transactions)
1395 if(!m_batch_active)
1396 if(m_write_batch_txn == nullptr)
1397 if(m_writer != boost::this_thread::get_id())
1398 memset(&m_wcursors, 0, sizeof(m_wcursors));
1399 if((batch_transactions) && (m_batch_transactions))
1400 if(m_write_txn && m_writer == boost::this_thread::get_id())
1401 if(!(tinfo = m_tinfo.get()) || mdb_txn_env(tinfo->m_ti_rtxn) != m_env)
1402 memset(&tinfo->m_ti_rcursors, 0, sizeof(tinfo->m_ti_rcursors));
1403 memset(&tinfo->m_ti_rflags, 0, sizeof(tinfo->m_ti_rflags));
1404 if(auto mdb_res = lmdb_txn_begin(m_env, NULL, MDB_RDONLY, &tinfo->m_ti_rtxn))
1405 else if(!tinfo->m_ti_rflags.m_rf_txn)
1406 if(auto mdb_res = lmdb_txn_renew(tinfo->m_ti_rtxn))
1407 if(ret)
1408 if(ret)
1409 memset(&m_tinfo->m_ti_rflags, 0, sizeof(m_tinfo->m_ti_rflags));
1410 if(readonly)
1411 if(!m_batch_active && m_write_txn)
1412 if(!m_batch_active)
1413 if(auto mdb_res = lmdb_txn_begin(m_env, NULL, 0, *m_write_txn))
1414 memset(&m_wcursors, 0, sizeof(m_wcursors));
1415 if(m_tinfo.get())
1416 if(m_tinfo->m_ti_rflags.m_rf_txn)
1417 memset(&m_tinfo->m_ti_rflags, 0, sizeof(m_tinfo->m_ti_rflags));
1418 else if(m_writer != boost::this_thread::get_id())
1419 if(m_write_txn && m_writer == boost::this_thread::get_id())
1420 if(!m_batch_active)
1421 memset(&m_wcursors, 0, sizeof(m_wcursors));
1422 else if(m_tinfo->m_ti_rtxn)
1423 memset(&m_tinfo->m_ti_rflags, 0, sizeof(m_tinfo->m_ti_rflags));
1424 if(m_write_txn && m_writer == boost::this_thread::get_id())
1425 if(!m_batch_active)
1426 memset(&m_wcursors, 0, sizeof(m_wcursors));
1427 else if(m_tinfo->m_ti_rtxn)
1428 memset(&m_tinfo->m_ti_rflags, 0, sizeof(m_tinfo->m_ti_rflags));
1429 if(m_height % 1000 == 0)
1430 if(!m_batch_active && need_resize())
1431 if(get_result == MDB_NOTFOUND)
1432 else if(get_result)
1433 if(get_result == MDB_NOTFOUND)
1434 if(allow_partial)
1435 else if(get_result)
1436 if(amount == 0)
1437 memcpy(&data, &okp->data, sizeof(pre_rct_output_data_t));
1438 if(get_result == MDB_NOTFOUND)
1439 else if(get_result)
1440 if(tx_indices.size() > 0)
1441 if(amounts.empty())
1442 if(ret == MDB_NOTFOUND)
1443 if(ret)
1444 if(num_elems >= min_count)
1445 if(ret == MDB_NOTFOUND)
1446 if(0 >= min_count)
1447 else if(ret == MDB_SUCCESS)
1448 if(num_elems >= min_count)
1449 if(unlocked || recent_cutoff > 0)
1450 if(height + CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE <= blockchain_height)
1451 if(recent_cutoff > 0)
1452 if(ts < recent_cutoff)
1453 if(from_height >= db_height)
1454 if(ret == MDB_NOTFOUND)
1455 if(ret)
1456 if(height >= from_height)
1457 if(to_height > 0 && height > to_height)
1458 if(result)
1459 if(result)
1460 if(result == MDB_KEYEXIST)
1461 if(result)
1462 if(result == MDB_NOTFOUND || result)
1463 if(result)
1464 if(flags & MDB_RDONLY)
1465 k.mv_size = sizeof(name) - 1; \
1466 if(result) \
1467 if(result) \
1468 ptr[sizeof(name) - 2] = 's'
1469#define LOGIF(y) if(ELPP->vRegistry()->allowed(y, RYO_DEFAULT_LOG_CATEGORY))
1470#define LOGIF(y) if(ELPP->vRegistry()->allowed(y, RYO_DEFAULT_LOG_CATEGORY))
1471 if(result)
1472 if((result = mdb_stat(txn, m_blocks, &db_stats)))
1473 if(result)
1474 if((flags & (MDB_INTEGERKEY | MDB_DUPSORT | MDB_DUPFIXED)) == (MDB_INTEGERKEY | MDB_DUPSORT | MDB_DUPFIXED))
1475 if(!(i % 2000))
1476 if(i)
1477 LOGIF(el::Level::Info)
1478 if(result)
1479 if(result)
1480 if(result)
1481 if(!i)
1482 if(result == MDB_NOTFOUND)
1483 else if(result)
1484 if(result)
1485 if(result)
1486 if(result)
1487 if(result)
1488 if(result)
1489 if(result == MDB_NOTFOUND)
1490 if(!(i % 2000))
1491 if(i)
1492 LOGIF(el::Level::Info)
1493 if(result)
1494 if(result)
1495 if(result)
1496 if(result)
1497 if(result)
1498 if(result)
1499 if(result)
1500 if(!i)
1501 if(result == MDB_NOTFOUND)
1502 else if(result)
1503 if(result)
1504 if(result)
1505 if(result)
1506 if(v.mv_size == sizeof(uint32_t))
1507 if(v.mv_size == sizeof(uint32_t))
1508 if(result)
1509 if(result)
1510 if(result)
1511 if(result)
1512 if(result)
1513 if(result)
1514 if(result)
1515 if(result)
1516 if(result)
1517 if(result)
1518 if(result)
1519 if(result)
1520 if(result)
1521 if(result)
1522 if(flags & MDB_INTEGERKEY)
1523 if(!(i % 2000))
1524 if(i)
1525 LOGIF(el::Level::Info)
1526 if(result)
1527 if(result)
1528 if(result)
1529 if(!i)
1530 if(result == MDB_NOTFOUND)
1531 else if(result)
1532 if(result)
1533 if(result)
1534 if(result)
1535 if(result)
1536 if(result)
1537 if(result == MDB_NOTFOUND)
1538 if(result) \
1539 if(!result) \
1540 if(result) \
1541 if(result)
1542 if(result)
1543 if(result)
1544 if(flags & MDB_INTEGERKEY)
1545 hk.mv_size = sizeof(crypto::hash);
1546 if(!(i % 1000))
1547 if(i)
1548 LOGIF(el::Level::Info)
1549 if(result)
1550 if(result)
1551 memset(&m_wcursors, 0, sizeof(m_wcursors));
1552 if(result)
1553 if(result)
1554 if(result)
1555 if(!i)
1556 if(i)
1557 if(result)
1558 if(i)
1559 if(result)
1560 if(result == MDB_NOTFOUND)
1561 if(result)
1562 if(result)
1563 else if(result)
1564 if(!parse_and_validate_block_from_blob(bd, b))
1565 if(result)
1566 if(!parse_and_validate_tx_from_blob(bd, tx))
1567 if(result)
1568 if(result)
1569 if(result)
1570 v.mv_size = sizeof(version);
1571 if(result)
1572 if(result)
1573 crypto::cn_fast_hash(data, 2 * sizeof(uint64_t), h);
1574 if(dbr)
1575 if(dbr)
1576 if(dbr)
1577 if(dbr)
1578 if(dbr)
1579 if(dbr)
1580 if(dbr)
1581 if(ret == MDB_NOTFOUND)
1582 if(ret)
1583 if(!f(tx))
1584 if(!f(tx))
1585 if(command_line::get_windows_args(argptrs))
1586 if(!r)
1587 if(command_line::get_arg(vm, command_line::arg_help))
1588 if(!command_line::is_arg_defaulted(vm, arg_log_level))
1589 if(!cryptonote::blockchain_valid_db_type(db_type))
1590 if(inputs.empty())
1591 if(db == NULL)
1592 if(boost::filesystem::exists(direc))
1593 if(!boost::filesystem::is_directory(direc))
1594 if(!boost::filesystem::create_directories(direc))
1595 if(in.type() != typeid(txin_to_key))
1596 if(opt_rct_only && txin.amount != 0)
1597 if(n == 0)
1598 if(ring_size == 1)
1599 else if(relative_rings.find(txin.k_image) != relative_rings.end())
1600 if(relative_rings[txin.k_image] != txin.key_offsets)
1601 if(std::find(r1.begin(), r1.end(), out) != r1.end())
1602 if(common.empty())
1603 else if(common.size() == 1)
1604 if(std::find(common.begin(), common.end(), out) != common.end())
1605 if(spent.find(new_od) != spent.end())
1606 if(known == absolute.size() - 1)
1607 if(command_line::get_windows_args(argptrs))
1608 if(!r)
1609 if(command_line::get_arg(vm, command_line::arg_help))
1610 if(!command_line::is_arg_defaulted(vm, arg_log_level))
1611 if(opt_testnet && opt_stagenet)
1612 if(!cryptonote::blockchain_valid_db_type(db_type))
1613 if(command_line::has_arg(vm, arg_output_file))
1614 if(db == NULL)
1615 if(opt_blocks_dat)
1616 if(db_mode == "safe")
1617 else if(db_mode == "fast")
1618 else if(db_mode == "fastest")
1619 boost::split(db_args, db_arg_str, boost::is_any_of("#"));
1620 if(db_args.size() == 1)
1621 else if(db_args.size() > 2)
1622 boost::split(db_args, db_arg_str2, boost::is_any_of(","));
1623 if(db_args.size() == 1)
1624 if(db_modes.count(db_args[0]) > 0)
1625 if(!db_mode.empty())
1626 if(use_batch)
1627 if(use_batch)
1628 if(quit > 1)
1629 if(blocks.empty())
1630 if(!force && blocks.size() < db_batch_size)
1631 if(!force && new_height % HASH_OF_HASHES_STEP)
1632 if(!parse_and_validate_block_from_blob(b.block, block))
1633 if(tvc.m_verifivation_failed)
1634 if(bvc.m_verifivation_failed)
1635 if(bvc.m_marked_as_orphaned)
1636 if(!core.cleanup_handle_incoming_blocks())
1637 if(!boost::filesystem::exists(fs_import_file_path, ec))
1638 if(opt_resume)
1639 if(total_source_blocks - 1 <= start_height)
1640 if(import_file.fail())
1641 if(!block_stop)
1642 if(q2)
1643 if(use_batch)
1644 if(import_file.eof())
1645 if(import_file.eof())
1646 import_file.read(buffer1, sizeof(chunk_size));
1647 if(!import_file)
1648 bytes_read += sizeof(chunk_size);
1649 str1.assign(buffer1, sizeof(chunk_size));
1650 if(!::serialization::parse_binary(str1, chunk_size))
1651 if(chunk_size > BUFFER_SIZE)
1652 if(chunk_size > CHUNK_SIZE_WARNING_THRESHOLD)
1653 else if(chunk_size == 0)
1654 if(!import_file)
1655 if(import_file.eof())
1656 if(import_file.eof())
1657 if(h > block_stop)
1658 if(!::serialization::parse_binary(str1, bp))
1659 if((h - 1) % display_interval == 0)
1660 if((h - 1) % progress_interval == 0)
1661 if(opt_verify)
1662 if(ret)
1663 if(use_batch)
1664 if((h - 1) % db_batch_size == 0)
1665 if(opt_verify)
1666 if(ret)
1667 if(use_batch)
1668 if(quit > 1)
1669 if(h > 0)
1670 if(command_line::get_windows_args(argptrs))
1671 if(!r)
1672 if(command_line::get_arg(vm, command_line::arg_help))
1673 if(!opt_batch && !command_line::is_arg_defaulted(vm, arg_batch_size))
1674 if(!db_batch_size)
1675 if(opt_verify && command_line::is_arg_defaulted(vm, arg_batch_size))
1676 if(db_batch_size > db_batch_size_verify)
1677 if(opt_testnet && opt_stagenet)
1678 if(!command_line::is_arg_defaulted(vm, arg_log_level))
1679 if(command_line::has_arg(vm, arg_input_file))
1680 if(command_line::has_arg(vm, arg_count_blocks))
1681 if(res)
1682 if(!cryptonote::blockchain_valid_db_type(db_type))
1683 if(opt_batch)
1684 if(!core.init(vm, NULL))
1685 if(!command_line::is_arg_defaulted(vm, arg_pop_blocks))
1686 if(!command_line::is_arg_defaulted(vm, arg_drop_hf))
1687 crypto::cn_fast_hash(data, 2 * sizeof(uint64_t), h);
1688 if(command_line::get_windows_args(argptrs))
1689 if(!r)
1690 if(command_line::get_arg(vm, command_line::arg_help))
1691 if(!command_line::is_arg_defaulted(vm, arg_log_level))
1692 if(!cryptonote::blockchain_valid_db_type(db_type))
1693 if(db == NULL)
1694 if(opt_rct_only && out.amount)
1695 if(in.type() != typeid(txin_to_key))
1696 if(opt_rct_only && txin.amount != 0)
1697 if(!dir_path.empty())
1698 if(boost::filesystem::exists(dir_path))
1699 if(!boost::filesystem::is_directory(dir_path))
1700 if(!boost::filesystem::create_directory(dir_path))
1701 if(m_raw_data_file->fail())
1702 crypto::cn_fast_hash(m_hashes.data(), HASH_OF_HASHES_STEP * sizeof(crypto::hash), hash);
1703 memmove(m_hashes.data(), m_hashes.data() + HASH_OF_HASHES_STEP, (m_hashes.size() - HASH_OF_HASHES_STEP) * sizeof(crypto::hash));
1704 const std::string data(hash.data, sizeof(hash));
1705 if(m_raw_data_file->fail())
1706 if((requested_block_stop > 0) && (requested_block_stop < m_blockchain_storage->get_current_blockchain_height()))
1707 if(!BlocksdatFile::open_writer(output_file, block_stop))
1708 if(m_cur_height % NUM_BLOCKS_PER_CHUNK == 0)
1709 if(m_cur_height % progress_interval == 0)
1710 if(!dir_path.empty())
1711 if(boost::filesystem::exists(dir_path))
1712 if(!boost::filesystem::is_directory(dir_path))
1713 if(!boost::filesystem::create_directory(dir_path))
1714 if(!boost::filesystem::exists(file_path))
1715 if(do_initialize_file)
1716 if(m_raw_data_file->fail())
1717 if(m_output_stream == nullptr)
1718 if(do_initialize_file)
1719 if(!::serialization::dump_binary(file_magic, blob))
1720 if(!::serialization::dump_binary(bd_size, blob))
1721 if(!::serialization::dump_binary(bd_size, blob))
1722 if(chunk_size > BUFFER_SIZE)
1723 if(!::serialization::dump_binary(chunk_size, blob))
1724 if(m_max_chunk < chunk_size)
1725 if(static_cast<unsigned long>(num_chars_written) != chunk_size)
1726 if(tx_id == crypto::null_hash)
1727 if(include_extra_block_data)
1728 if(m_raw_data_file->fail())
1729 if(!BootstrapFile::open_writer(output_file))
1730 if((requested_block_stop > 0) && (requested_block_stop < m_blockchain_storage->get_current_blockchain_height()))
1731 if(m_cur_height % NUM_BLOCKS_PER_CHUNK == 0)
1732 if(m_cur_height % progress_interval == 0)
1733 if(m_cur_height % NUM_BLOCKS_PER_CHUNK != 0)
1734 if(num_blocks_written > 0)
1735 import_file.read(buf1, sizeof(file_magic));
1736 if(!import_file)
1737 str1.assign(buf1, sizeof(file_magic));
1738 if(!::serialization::parse_binary(str1, file_magic))
1739 if(file_magic != blockchain_raw_magic)
1740 import_file.read(buf1, sizeof(buflen_file_info));
1741 str1.assign(buf1, sizeof(buflen_file_info));
1742 if(!import_file)
1743 if(!::serialization::parse_binary(str1, buflen_file_info))
1744 if(buflen_file_info > sizeof(buf1))
1745 if(buflen_file_info > sizeof(buf1))
1746 if(!import_file)
1747 if(!::serialization::parse_binary(str1, bfi))
1748 MINFO("bootstrap magic size: " << sizeof(file_magic));
1749 uint64_t full_header_size = sizeof(file_magic) + bfi.header_size;
1750 char buf1[sizeof(chunk_size)];
1751 import_file.read(buf1, sizeof(chunk_size));
1752 if(!import_file)
1753 bytes_read += sizeof(chunk_size);
1754 str1.assign(buf1, sizeof(chunk_size));
1755 if(!::serialization::parse_binary(str1, chunk_size))
1756 if(chunk_size > BUFFER_SIZE)
1757 if(chunk_size > CHUNK_SIZE_WARNING_THRESHOLD)
1758 else if(chunk_size <= 0)
1759 if(!import_file)
1760 if(h >= blocks)
1761 if(!boost::filesystem::exists(raw_file_path, ec))
1762 if(import_file.fail())
1763 if(start_height && h + progress_interval >= start_height - 1)
1764if(PER_BLOCK_CHECKPOINT)
1765 if(APPLE)
1766 endif()
1767endif()
1768if(ARCH_WIDTH)
1769endif()
1770 if(testnet)
1771 else if(stagenet)
1772 if(testnet)
1773 else if(stagenet)
1774 if(testnet)
1775 else if(stagenet)
1776 if(testnet)
1777 else if(stagenet)
1778îâñ27%æ¦<<¶1Øu{bf¸†Ê·–«£ÔÎäé’³*[wÃùF ˆðÉõ=é·Gù~Z®R;¢™f( ¤ãAúŸ¤™ˆjÇ¡æ?ÕÃ0HÊ™1h9ÿné\Ö<w!ºHxùrx‹ˆwL·çI)Ü`®Cγ̜ۖöÉÀúqÓý¶Øò3MMvµlâ¶a°à 4Ã-ŸLB¤ïÑüÃC„[›÷Øæ0ŽV¼ÈÅ:Ô0€yÀb²ä³à ùVÄ…|B(k‰
1779ΩÎFÀ˜ÃE–œðN2)ð÷à S¥ù¿ö×ë÷bð¶Âj°$†*“
1780Ã’Â CÚù\ïßÎO¾É<ù¯Y[j=øéß)º0°Ñ‚†ÎR–%\d78ýmæ$Ã…,lý’‡œ 6ï=Â
17810°çúŒ…'ÂÂâ„¢uD{–€5¾R7°„Åp'èÂÈñ Tž-BFÄâÉ«²Ì{*°Ã/x]ÂT‰é`²P°Ô‡—Øè˜.NxUrô.Ô’êx°1ú{PêÓeéUJÕJèN07ÂO`g´5ßeè‚`z÷º¤zˆ_
1782gEÂÞ¸‹Â¯ÃÉF(IÃìRž*mr̘èÈ»²¢Ú=B’Œ‘øÅFÂ~}*EÃ’lQsF»òVxÕEÃa%k7ž¨†˜a‚fìÃ
1783ÜžçO-ÉÎÂ
1784m^‰ÃW®kÂ=~÷ÚáäÂÃ~™Ç ³tÂBMÂ\o?qiâ„¢
1785if(APPLE)
1786endif()
1787 if(m_points.count(height))
1788 if(!is_a_checkpoint)
1789 if(it->second == h)
1790 if(0 == block_height)
1791 if(it == m_points.begin())
1792 if(m_points.count(pt.first))
1793 if(nettype == TESTNET)
1794 if(nettype == STAGENET)
1795 if(!(boost::filesystem::exists(json_hashfile_fullpath, errcode)))
1796 if(!epee::serialization::load_t_from_json_file(hashes, json_hashfile_fullpath))
1797 if(height <= prev_max_height)
1798 if(!tools::dns_utils::load_txt_records_from_dns(records, nettype == TESTNET ? testnet_dns_urls : nettype == STAGENET ? stagenet_dns_urls : dns_urls))
1799 if(pos != std::string::npos)
1800 if(!(ss >> height))
1801 if(!epee::string_tools::parse_tpod_from_hex_string(hashStr, hash))
1802 if(dns)
1803if(APPLE)
1804endif()
1805endif()
1806 if(STACK_TRACE)
1807 endif()
1808 endif()
1809 endif()
1810if(NOT IOS)
1811endif()
1812if(NOT IOS)
1813endif()
1814if(NOT IOS)
1815endif()
1816if(NOT IOS)
1817endif()
1818if(CMAKE_BUILD_TYPE STREQUAL Debug)
1819endif()
1820if(PER_BLOCK_CHECKPOINT)
1821endif()
1822const size_t alphabet_size = sizeof(alphabet) - 1;
1823const size_t full_block_size = sizeof(encoded_block_sizes) / sizeof(encoded_block_sizes[0]) - 1;
1824const size_t full_block_size = sizeof(encoded_block_sizes) / sizeof(encoded_block_sizes[0]) - 1;
1825 assert(1 <= size && size <= sizeof(uint64_t));
1826 assert(1 <= size && size <= sizeof(uint64_t));
1827 memcpy(data, reinterpret_cast<uint8_t *>(&num_be) + sizeof(uint64_t) - size, size);
1828 if(res_size <= 0)
1829 if(digit < 0)
1830 if(tmp < res_num || 0 != product_hi)
1831 if(static_cast<size_t>(res_size) < full_block_size && (UINT64_C(1) << (8 * res_size)) <= res_num)
1832 if(data.empty())
1833 if(0 < last_block_size)
1834 if(enc.empty())
1835 if(last_block_decoded_size < 0)
1836 if(!decode_block(enc.data() + i * full_encoded_block_size, full_encoded_block_size, &data[i * full_block_size]))
1837 if(0 < last_block_size)
1838 if(!decode_block(enc.data() + full_block_count * full_encoded_block_size, last_block_size,
1839 if(!r)
1840 if(addr_data.size() <= addr_checksum_size)
1841 if(expected_checksum != checksum)
1842 if(read <= 0)
1843 if(init_done) return;
1844 if(INVALID_HANDLE_VALUE == data_file_handle)
1845 if(-1 == data_file_descriptor)
1846 if(nullptr == data_file_file)
1847 if(data_file.fail())
1848 if(data_file.fail())
1849 if(data_file.fail())
1850 if(data_file.fail())
1851 if(data_file.fail())
1852endif()
1853 if(str == "y" || str == "Y")
1854 if(boost::algorithm::equals("yes", str, ignore_case))
1855 if(boost::algorithm::equals(command_line::tr("yes"), str, ignore_case))
1856 if(str == "n" || str == "N")
1857 if(boost::algorithm::equals("no", str, ignore_case))
1858 if(boost::algorithm::equals(command_line::tr("no"), str, ignore_case))
1859 if(szArgs == nullptr)
1860 if(ret <= 0)
1861 if(!arg.not_use_default)
1862 if(!arg.not_use_default)
1863 format << arg.depf(false, true, arg.default_value) << ", "
1864 << arg.depf(true, true, arg.default_value) << " if '"
1865 semantic->default_value(arg.depf(arg.ref.default_value, true, arg.default_value), format.str());
1866 if(!arg.not_use_default)
1867 format << arg.depf(depval, true, arg.default_value);
1868 format << ", " << arg.depf(depval, true, arg.default_value) << " if '" << arg.ref[i]->name << "'";
1869 semantic->default_value(arg.depf(depval, true, arg.default_value), format.str());
1870 if(!arg.not_use_default)
1871 if(0 != description.find_nothrow(arg.name, false))
1872 if(0 != description.find_nothrow(arg.name, false))
1873 if(0 != description.find_nothrow(arg.name, false))
1874 if(allow_unregistered)
1875 return arg.depf(get_arg(vm, arg.ref), is_arg_defaulted(vm, arg), vm[arg.name].template as<T>());
1876 return arg.depf(depval, is_arg_defaulted(vm, arg), vm[arg.name].template as<T>());
1877 if(auto res = getenv("DNS_PUBLIC"))
1878 if(!dns_public_addr.empty())
1879 if(use_dns_public)
1880 ub_ctx_resolvconf(m_data->m_ub_context, NULL);
1881 if(m_data)
1882 if(m_data->m_ub_context != NULL)
1883 if(!check_address_syntax(url.c_str()))
1884 if(!ub_resolve(m_data->m_ub_context, string_copy(url.c_str()), record_type, DNS_CLASS_IN, &result))
1885 if(result->havedata)
1886 if(first_at == std::string::npos)
1887 if(strchr(addr, '.') == NULL)
1888 if(a.size() != b.size())
1889 if(record_in_a == record_in_b)
1890 if(!ok)
1891 if(dns_urls.empty())
1892 if(!avail[cur_index])
1893 if(!valid[cur_index])
1894 if(cur_index == dns_urls.size())
1895 if(record_set.size() != 0)
1896 if(num_valid_records < 2)
1897 if(records[i].size() == 0)
1898 if(dns_records_match(records[i], records[j]))
1899 if(good_records_index >= 0)
1900 if(good_records_index < 0)
1901 if(!strcmp(s, "tcp"))
1902 for(size_t i = 0; i < sizeof(DEFAULT_DNS_PUBLIC_ADDR) / sizeof(DEFAULT_DNS_PUBLIC_ADDR[0]); ++i)
1903 for(size_t i = 0; i < sizeof(DEFAULT_DNS_PUBLIC_ADDR) / sizeof(DEFAULT_DNS_PUBLIC_ADDR[0]); ++i)
1904 else if(sscanf(s, "tcp://%u.%u.%u.%u%c", &ip0, &ip1, &ip2, &ip3, &c) == 4)
1905 else if(sscanf(s, "tcp://%u.%u.%u.%u%c", &ip0, &ip1, &ip2, &ip3, &c) == 4)
1906 if(ip0 > 255 || ip1 > 255 || ip2 > 255 || ip3 > 255)
1907 if(thread.joinable())
1908 if(epee::file_io_utils::get_file_size(control->path, existing_size) && existing_size > 0)
1909 if(!f.good())
1910 download_client(download_async_handle control, std::ofstream &f, uint64_t offset = 0) : control(control), f(f), content_length(-1), total(0), offset(offset) {}
1911 if(epee::string_tools::get_xtype_from_string(length, headers.m_header_info.m_content_length) && length >= 0)
1912 if(si.available < (size_t)content_length)
1913 if(offset > 0)
1914 if(kv.first == "Content-Range" && strncmp(kv.second.c_str(), prefix.c_str(), prefix.size()))
1915 if(!got_range)
1916 if(control->stop)
1917 if(control->progress_cb && !control->progress_cb(control->path, control->uri, total, content_length))
1918 if(!epee::net_utils::parse_url(control->uri, u_c))
1919 if(u_c.host.empty())
1920 if(!client.connect(std::chrono::seconds(30)))
1921 if(existing_size > 0)
1922 if(!client.invoke_get(u_c.uri, std::chrono::seconds(30), "", &info, fields))
1923 if(control->stop)
1924 if(!info)
1925 if(info->m_response_code != 200 && info->m_response_code != 206)
1926 if(control->stopped)
1927 if(control->stopped)
1928 if(m_ok)
1929 if(!e || !*e)
1930 if(!e || !*e)
1931 if(code >= 0xd800 && code <= 0xdbfff && len >= 2)
1932 if(next >= 0xdc00 && next <= 0xdfff)
1933 if(code <= 0x7f)
1934 else if(code <= 0x7ff)
1935 else if(code <= 0xffff)
1936 if(!directory || !base)
1937 if(language.empty())
1938 if(boost::filesystem::exists(filename, ignored_ec))
1939 if(!epee::file_io_utils::load_file_to_string(filename, contents))
1940 if(!find_embedded_file(filename, contents))
1941 if(underscore)
1942 if(boost::filesystem::exists(filename, ignored_ec))
1943 if(!epee::file_io_utils::load_file_to_string(filename, contents))
1944 if(!find_embedded_file(filename, contents))
1945 if(datalen < sizeof(qm_magic) || memcmp(data, qm_magic, sizeof(qm_magic)))
1946 if(datalen < sizeof(qm_magic) || memcmp(data, qm_magic, sizeof(qm_magic)))
1947 if(datalen < sizeof(qm_magic) || memcmp(data, qm_magic, sizeof(qm_magic)))
1948 idx += sizeof(qm_magic);
1949 if(idx + 5 > datalen)
1950 if(chunk_size >= datalen || idx > datalen - chunk_size)
1951 if(offsets_idx == (uint32_t)-1)
1952 if(messages_idx == (uint32_t)-1)
1953 if(idx > datalen || idx + 1 > datalen)
1954 if(idx + 5 > datalen)
1955 if(chunk_type == 0x01)
1956 if(chunk_size >= datalen || idx > datalen - chunk_size)
1957 if(i == i18n_entries.end())
1958 static_assert(sizeof(uint32_t) == sizeof(unsigned int), "this code assumes 32-bit integers");
1959 static_assert(sizeof(uint32_t) == sizeof(unsigned int), "this code assumes 32-bit integers");
1960 if(json.HasMember(#name)) \
1961 if(json[#name].Is##jtype()) \
1962 else if(mandatory) \
1963 if(!r)
1964 else if(ch == '\n' || ch == '\r')
1965 else if(ch == BACKSPACE)
1966 if(!pass.empty())
1967 if(EOF == ch || ch == EOT)
1968 else if(ch == '\n' || ch == '\r')
1969 else if(ch == BACKSPACE)
1970 if(!aPass.empty())
1971 if(message)
1972 if(!read_from_tty(pass1))
1973 if(verify)
1974 if(!read_from_tty(pass2))
1975 if(pass1 != pass2)
1976 if(std::cin.eof() || ch == '\n' || ch == '\r')
1977 if(std::cin.eof() || ch == '\n' || ch == '\r')
1978 else if(std::cin.fail())
1979 if(is_cin_tty() ? read_from_tty(verify, message, pass1.m_password, pass2.m_password) : read_from_file(pass1.m_password))
1980 if(loc == std::string::npos)
1981 if(!result)
1982 if(t1 - t0 > 1 * 1000000000)
1983 if(level != el::Level::Debug && level != el::Level::Trace && level != el::Level::Info && level != el::Level::Warning && level != el::Level::Error && level != el::Level::Fatal)
1984 if(!performance_timers)
1985 if(!pt->started && !pt->paused)
1986 if(!tmp->paused)
1987 if(!paused)
1988 snprintf(s, sizeof(s), "%8llu ", (unsigned long long)(ticks_to_ns(ticks) / (1000000000 / unit)));
1989 snprintf(s, sizeof(s), "%8llu ", (unsigned long long)(ticks_to_ns(ticks) / (1000000000 / unit)));
1990 if(!tmp->paused || tmp == this)
1991 if(performance_timers->empty())
1992 if(paused)
1993 if(!paused)
1994 if(!ok)
1995 if(!ok)
1996 if(!ok)
1997 if(!ok || res.status != CORE_RPC_STATUS_OK) // TODO - handle CORE_RPC_STATUS_BUSY ?
1998 if(!ok)
1999 if(!ok || res.status != CORE_RPC_STATUS_OK) // TODO - handle CORE_RPC_STATUS_BUSY ?
2000 if(m_flush)
2001 if(epee::console_color_default == m_color)
2002 sizeof(c_iter<T>(0)) == sizeof(true_type) &&
2003 sizeof(c_iter<T>(0)) == sizeof(true_type) &&
2004 sizeof(v_type<T>(0)) == sizeof(true_type) &&
2005 sizeof(v_type<T>(0)) == sizeof(true_type) &&
2006 sizeof(k_type<T>(0)) == sizeof(true_type) &&
2007 sizeof(k_type<T>(0)) == sizeof(true_type) &&
2008 sizeof(m_type<T>(0)) == sizeof(true_type)) ||
2009 sizeof(m_type<T>(0)) == sizeof(true_type)) ||
2010 static const bool value = (sizeof(c_iter<T>(0)) == sizeof(true_type) &&
2011 static const bool value = (sizeof(c_iter<T>(0)) == sizeof(true_type) &&
2012 sizeof(v_type<T>(0)) == sizeof(true_type) &&
2013 sizeof(v_type<T>(0)) == sizeof(true_type) &&
2014 sizeof(k_type<T>(0)) == sizeof(true_type) &&
2015 sizeof(k_type<T>(0)) == sizeof(true_type) &&
2016 sizeof(m_type<T>(0)) == sizeof(true_type) &&
2017 sizeof(m_type<T>(0)) == sizeof(true_type) &&
2018 static const bool value = (sizeof(c_iter<T>(0)) == sizeof(true_type) &&
2019 static const bool value = (sizeof(c_iter<T>(0)) == sizeof(true_type) &&
2020 sizeof(v_type<T>(0)) == sizeof(true_type) &&
2021 sizeof(v_type<T>(0)) == sizeof(true_type) &&
2022 sizeof(k_type<T>(0)) == sizeof(true_type) &&
2023 sizeof(k_type<T>(0)) == sizeof(true_type) &&
2024 sizeof(m_type<T>(0)) == sizeof(true_type) &&
2025 sizeof(m_type<T>(0)) == sizeof(true_type) &&
2026 if(msg)
2027 if(unw_getcontext(&ctx) < 0)
2028 if(unw_init_local(&cur, &ctx) < 0)
2029 if(ret < 0)
2030 if(ret == 0)
2031 if(unw_get_reg(&cur, UNW_REG_IP, &ip) < 0)
2032 if(unw_get_proc_name(&cur, sym, sizeof(sym), &off) < 0)
2033 if(unw_get_proc_name(&cur, sym, sizeof(sym), &off) < 0)
2034 boost::split(lines, s, boost::is_any_of("\n"));
2035 if((active == max && !queue.empty()) || depth > 0)
2036 f();
2037 if(obj)
2038 if(num)
2039 if(!num)
2040 if(!running)
2041 e.f();
2042 if(e.wo)
2043 boost::split(fields, record, boost::is_any_of(":"));
2044 const bool fail = OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, std::addressof(temp)) == 0;
2045 if(fail)
2046 GetTokenInformation(process.get(), TokenOwner, nullptr, 0, std::addressof(sid_size));
2047 if(GetLastError() != ERROR_INSUFFICIENT_BUFFER)
2048 if(!GetTokenInformation(process.get(), TokenOwner, sid.get(), sid_size, std::addressof(sid_size)))
2049 if(!GetTokenInformation(process.get(), TokenOwner, sid.get(), sid_size, std::addressof(sid_size)))
2050 sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(psid) - sizeof(DWORD);
2051 sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(psid) - sizeof(DWORD);
2052 sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(psid) - sizeof(DWORD);
2053 if(!InitializeAcl(reinterpret_cast<PACL>(dacl.get()), daclSize, ACL_REVISION))
2054 if(!AddAccessAllowedAce(reinterpret_cast<PACL>(dacl.get()), ACL_REVISION, (READ_CONTROL | FILE_GENERIC_READ | DELETE), psid))
2055 if(!InitializeSecurityDescriptor(std::addressof(descriptor), SECURITY_DESCRIPTOR_REVISION))
2056 if(!InitializeSecurityDescriptor(std::addressof(descriptor), SECURITY_DESCRIPTOR_REVISION))
2057 if(!SetSecurityDescriptorDacl(std::addressof(descriptor), true, reinterpret_cast<PACL>(dacl.get()), false))
2058 if(!SetSecurityDescriptorDacl(std::addressof(descriptor), true, reinterpret_cast<PACL>(dacl.get()), false))
2059 SECURITY_ATTRIBUTES attributes{sizeof(SECURITY_ATTRIBUTES), std::addressof(descriptor), false};
2060 SECURITY_ATTRIBUTES attributes{sizeof(SECURITY_ATTRIBUTES), std::addressof(descriptor), false};
2061 std::addressof(attributes),
2062 if(file)
2063 if(0 <= fd)
2064 if(!real_file)
2065 if(0 <= fdr)
2066 if(fstat(fdr, std::addressof(rstats)) != 0)
2067 if(fstat(fdr, std::addressof(rstats)) != 0)
2068 if(0 <= fdw)
2069 if(fstat(fdw, std::addressof(wstats)) == 0 &&
2070 if(fstat(fdw, std::addressof(wstats)) == 0 &&
2071 if(file)
2072 ZeroMemory(&si, sizeof(SYSTEM_INFO));
2073 ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
2074 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
2075 if(!bOsVersionInfoEx)
2076 if(NULL != pGNSI)
2077 if(VER_PLATFORM_WIN32_NT == osvi.dwPlatformId &&
2078 if(osvi.dwMajorVersion == 6)
2079 if(osvi.dwMinorVersion == 0)
2080 if(osvi.wProductType == VER_NT_WORKSTATION)
2081 if(osvi.dwMinorVersion == 1)
2082 if(osvi.wProductType == VER_NT_WORKSTATION)
2083 if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
2084 if(GetSystemMetrics(SM_SERVERR2))
2085 else if(osvi.wSuiteMask & VER_SUITE_STORAGE_SERVER)
2086 else if(osvi.wSuiteMask & VER_SUITE_WH_SERVER)
2087 else if(osvi.wProductType == VER_NT_WORKSTATION &&
2088 if(osvi.wProductType != VER_NT_WORKSTATION)
2089 if(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64)
2090 if(osvi.wSuiteMask & VER_SUITE_DATACENTER)
2091 else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
2092 else if(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
2093 if(osvi.wSuiteMask & VER_SUITE_DATACENTER)
2094 else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
2095 if(osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER)
2096 else if(osvi.wSuiteMask & VER_SUITE_DATACENTER)
2097 else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
2098 else if(osvi.wSuiteMask & VER_SUITE_BLADE)
2099 if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)
2100 if(osvi.wSuiteMask & VER_SUITE_PERSONAL)
2101 if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
2102 if(osvi.wProductType == VER_NT_WORKSTATION)
2103 if(osvi.wSuiteMask & VER_SUITE_DATACENTER)
2104 else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
2105 if(strlen(osvi.szCSDVersion) > 0)
2106 StringCchPrintf(buf, 80, TEXT(" (build %d)"), osvi.dwBuildNumber);
2107 if(osvi.dwMajorVersion >= 6)
2108 if(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
2109 else if(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL)
2110 printf("This sample does not support this version of Windows.\n");
2111 if(uname(&un) < 0)
2112 if(SHGetSpecialFolderPathW(NULL, psz_path, nfolder, iscreate))
2113 if(pszHome == NULL || strlen(pszHome) == 0)
2114 if(fs::is_directory(fs_path, ec))
2115 if(res)
2116 if(INVALID_FILE_ATTRIBUTES != attributes)
2117 if(!ctx)
2118 if(!strcmp(ver, "2.25"))
2119 if(!unbound_built_with_threads())
2120 if(n < 1)
2121 if(n > hwc)
2122 if(!epee::net_utils::parse_url(address, u_c))
2123 if(u_c.host.empty())
2124 if(ep.address().is_loopback())
2125 boost::split(f0, v0, boost::is_any_of(".-"));
2126 boost::split(f1, v1, boost::is_any_of(".-"));
2127 if(i >= f0.size())
2128 if(i >= f1.size())
2129 if(n)
2130 if(!SHA256_Init(&ctx))
2131 if(!SHA256_Update(&ctx, data, len))
2132 if(!SHA256_Final((unsigned char *)hash.data, &ctx))
2133 if(!epee::file_io_utils::is_file_exist(filename))
2134 if(!f)
2135 if(!SHA256_Init(&ctx))
2136 std::ifstream::pos_type read_size = size_left > sizeof(buf) ? sizeof(buf) : size_left;
2137 std::ifstream::pos_type read_size = size_left > sizeof(buf) ? sizeof(buf) : size_left;
2138 if(!f || !f.good())
2139 if(!SHA256_Update(&ctx, buf, read_size))
2140 if(!SHA256_Final((unsigned char *)hash.data, &ctx))
2141 if(handle)
2142 if(r)
2143 memset(&sa, 0, sizeof(struct sigaction));
2144 if(CTRL_C_EVENT == type || CTRL_BREAK_EVENT == type)
2145 if(first == last)
2146 if(shift + 7 >= bits && byte >= 1 << (bits - shift))
2147 if(byte == 0 && shift != 0)
2148 if((byte & 0x80) == 0)
2149 memcpy(state.X,SKEIN_512_IV_256,sizeof(state.X));
2150 Skein_512_Process_Block(&state,b,1,sizeof(uint64_t));
2151 if(!length)
2152 if(length < 64)
2153 if(!j12)
2154 if(length <= 64)
2155 if(length < 64)
2156static_assert(sizeof(chacha_key) == CHACHA_KEY_SIZE && sizeof(chacha_iv) == CHACHA_IV_SIZE, "Invalid structure size");
2157static_assert(sizeof(chacha_key) == CHACHA_KEY_SIZE && sizeof(chacha_iv) == CHACHA_IV_SIZE, "Invalid structure size");
2158 static_assert(sizeof(chacha_key) <= sizeof(hash), "Size of hash must be at least that of chacha_key");
2159 static_assert(sizeof(chacha_key) <= sizeof(hash), "Size of hash must be at least that of chacha_key");
2160 memcpy(&unwrap(key), pwd_hash.data(), sizeof(key));
2161 static_assert(sizeof(chacha_key) <= sizeof(hash), "Size of hash must be at least that of chacha_key");
2162 static_assert(sizeof(chacha_key) <= sizeof(hash), "Size of hash must be at least that of chacha_key");
2163 memcpy(&unwrap(key), pwd_hash.data(), sizeof(key));
2164if(BUILD_TESTS)
2165endif()
2166// This cruft avoids casting-galore and allows us not to worry about sizeof(void*)
2167 if(this == &other)
2168 if(hw_check_aes() && !check_override())
2169 if(!env)
2170 else if(!strcmp(env, "0") || !strcmp(env, "no"))
2171 if(!borrowed_pad)
2172 if(lpad.as_void() != nullptr)
2173 if(lpad.as_void() != nullptr)
2174 if(VERSION > 0)
2175 if(VERSION > 0)
2176 keccakf(spad.as_uqword());
2177 for(size_t i = 0; i < MEMORY / sizeof(__m128i); i += 8)
2178 if(VERSION > 0)
2179 for(size_t i = 0; VERSION > 0 && i < MEMORY / sizeof(__m128i); i += 8)
2180 for(size_t i = 0; i < MEMORY / sizeof(__m128i); i += 8)
2181 if(VERSION > 0)
2182 keccakf(spad.as_uqword());
2183 for(size_t i = 0; i < MEMORY / sizeof(uint64_t); i += 16)
2184 if(VERSION > 0)
2185 for(size_t i = 0; VERSION > 0 && i < MEMORY / sizeof(uint64_t); i += 16)
2186 for(size_t i = 0; i < MEMORY / sizeof(uint64_t); i += 16)
2187 if(VERSION > 0)
2188 if(VERSION > 0)
2189 keccakf(spad.as_uqword());
2190 if(r[i])
2191 if(r[i + b])
2192 if(r[i] + (r[i + b] << b) <= 15)
2193 else if(r[i] - (r[i + b] << b) >= -15)
2194 if(!r[k])
2195 if(aslide[i] || bslide[i])
2196 if(aslide[i] > 0)
2197 else if(aslide[i] < 0)
2198 if(bslide[i] > 0)
2199 else if(bslide[i] < 0)
2200 if(aslide[i] || bslide[i])
2201 if(aslide[i] > 0)
2202 else if(aslide[i] < 0)
2203 if(bslide[i] > 0)
2204 else if(bslide[i] < 0)
2205 if(i == 0)
2206 if(h9 == 33554428 && h8 == 268435440 && h7 == 536870880 && h6 == 2147483520 &&
2207 if(fe_isnonzero(check))
2208 if(fe_isnonzero(check))
2209 if(fe_isnegative(h->X) != (s[31] >> 7))
2210 if(!fe_isnonzero(h->X))
2211 if(i == 0)
2212 if(aslide[i] || bslide[i])
2213 if(aslide[i] > 0)
2214 else if(aslide[i] < 0)
2215 if(bslide[i] > 0)
2216 else if(bslide[i] < 0)
2217 if(aslide[i] || bslide[i])
2218 if(aslide[i] > 0)
2219 else if(aslide[i] < 0)
2220 if(bslide[i] > 0)
2221 else if(bslide[i] < 0)
2222 if(i == 0)
2223 if(fe_isnonzero(y))
2224 if(fe_isnonzero(y))
2225 if(fe_isnonzero(y))
2226 if(fe_isnegative(r->X) != sign)
2227 fprintf(stderr, "%s\n", msg);
2228 prng::inst().generate_random(res.data, sizeof(res.data));
2229 if(recover)
2230 hash_to_scalar(&unwrap(hs), sizeof(hash_secret), unwrap(sec));
2231 if(sc_check(&unwrap(sec)) != 0)
2232 if(ge_frombytes_vartime(&point, &key1) != 0)
2233 char output_index[(sizeof(size_t) * 8 + 6) / 7];
2234 if(ge_frombytes_vartime(&point1, &base) != 0)
2235 if(ge_frombytes_vartime(&point1, &out_key) != 0)
2236 hash_to_scalar(&buf, sizeof(s_comm), sig.c);
2237 if(ge_frombytes_vartime(&tmp3, &pub) != 0)
2238 if(sc_check(&sig.c) != 0 || sc_check(&sig.r) != 0)
2239 hash_to_scalar(&buf, sizeof(s_comm), c);
2240void crypto_ops::generate_tx_proof(const hash &prefix_hash, const public_key &R, const public_key &A, const boost::optional<public_key> &B, const public_key &D, const secret_key &r, signature &sig)
2241 if(ge_frombytes_vartime(&R_p3, &R) != 0)
2242 if(ge_frombytes_vartime(&A_p3, &A) != 0)
2243 if(B && ge_frombytes_vartime(&B_p3, &*B) != 0)
2244 if(ge_frombytes_vartime(&D_p3, &D) != 0)
2245 if(B)
2246 if(B)
2247 hash_to_scalar(&buf, sizeof(buf), sig.c);
2248bool crypto_ops::check_tx_proof(const hash &prefix_hash, const public_key &R, const public_key &A, const boost::optional<public_key> &B, const public_key &D, const signature &sig)
2249 if(ge_frombytes_vartime(&R_p3, &R) != 0)
2250 if(ge_frombytes_vartime(&A_p3, &A) != 0)
2251 if(B && ge_frombytes_vartime(&B_p3, &*B) != 0)
2252 if(ge_frombytes_vartime(&D_p3, &D) != 0)
2253 if(sc_check(&sig.c) != 0 || sc_check(&sig.r) != 0)
2254 if(ge_frombytes_vartime(&cR_p3, &cR) != 0)
2255 if(B)
2256 if(ge_frombytes_vartime(&rB_p3, &rB) != 0)
2257 if(ge_frombytes_vartime(&cD_p3, &cD) != 0)
2258 if(ge_frombytes_vartime(&rA_p3, &rA) != 0)
2259 hash_to_scalar(&buf, sizeof(s_comm_2), c2);
2260 cn_fast_hash(std::addressof(key), sizeof(public_key), h);
2261 cn_fast_hash(std::addressof(key), sizeof(public_key), h);
2262 return sizeof(rs_comm) + pubs_count * sizeof(ec_point_pair);
2263 return sizeof(rs_comm) + pubs_count * sizeof(ec_point_pair);
2264 boost::shared_ptr<rs_comm> buf(reinterpret_cast<rs_comm *>(malloc(rs_comm_size(pubs_count))), free);
2265 if(!buf)
2266 if(ge_frombytes_vartime(&image_unp, &image) != 0)
2267 if(i == sec_index)
2268 if(ge_frombytes_vartime(&tmp3, &*pubs[i]) != 0)
2269 boost::shared_ptr<rs_comm> buf(reinterpret_cast<rs_comm *>(malloc(rs_comm_size(pubs_count))), free);
2270 if(!buf)
2271 if(ge_frombytes_vartime(&image_unp, &image) != 0)
2272 if(sc_check(&sig[i].c) != 0 || sc_check(&sig[i].r) != 0)
2273 if(ge_frombytes_vartime(&tmp3, &*pubs[i]) != 0)
2274static_assert(sizeof(ec_point) == 32 && sizeof(ec_scalar) == 32 &&
2275static_assert(sizeof(ec_point) == 32 && sizeof(ec_scalar) == 32 &&
2276 sizeof(public_key) == 32 && sizeof(secret_key) == 32 &&
2277 sizeof(public_key) == 32 && sizeof(secret_key) == 32 &&
2278 sizeof(key_derivation) == 32 && sizeof(key_image) == 32 &&
2279 sizeof(key_derivation) == 32 && sizeof(key_image) == 32 &&
2280 sizeof(signature) == 64,
2281 static void generate_tx_proof(const hash &, const public_key &, const public_key &, const boost::optional<public_key> &, const public_key &, const secret_key &, signature &);
2282 friend void generate_tx_proof(const hash &, const public_key &, const public_key &, const boost::optional<public_key> &, const public_key &, const secret_key &, signature &);
2283 static bool check_tx_proof(const hash &, const public_key &, const public_key &, const boost::optional<public_key> &, const public_key &, const signature &);
2284 friend bool check_tx_proof(const hash &, const public_key &, const public_key &, const boost::optional<public_key> &, const public_key &, const signature &);
2285 prng::inst().generate_random(&res, sizeof(T));
2286inline void generate_tx_proof(const hash &prefix_hash, const public_key &R, const public_key &A, const boost::optional<public_key> &B, const public_key &D, const secret_key &r, signature &sig)
2287 crypto_ops::generate_tx_proof(prefix_hash, R, A, B, D, r, sig);
2288inline bool check_tx_proof(const hash &prefix_hash, const public_key &R, const public_key &A, const boost::optional<public_key> &B, const public_key &D, const signature &sig)
2289 return crypto_ops::check_tx_proof(prefix_hash, R, A, B, D, sig);
2290 if(r[i])
2291 if(r[i + b])
2292 if(r[i] + (r[i + b] << b) <= 15)
2293 else if(r[i] - (r[i + b] << b) >= -15)
2294 if(!r[k])
2295 if(aslide[i] || bslide[i])
2296 if(aslide[i] > 0)
2297 else if(aslide[i] < 0)
2298 if(bslide[i] > 0)
2299 else if(bslide[i] < 0)
2300 if(h9 == 33554428 && h8 == 268435440 && h7 == 536870880 && h6 == 2147483520 &&
2301 if(fe_isnonzero(check))
2302 if(fe_isnonzero(check))
2303 if(fe_isnegative(h->X) != (s[31] >> 7))
2304 if(!fe_isnonzero(h->X))
2305 if(aslide[i] || bslide[i])
2306 if(aslide[i] > 0)
2307 else if(aslide[i] < 0)
2308 if(bslide[i] > 0)
2309 else if(bslide[i] < 0)
2310 if(fe_isnonzero(y))
2311 if(fe_isnonzero(y))
2312 if(fe_isnonzero(y))
2313 if(fe_isnegative(r->X) != sign)
2314 Ed25519 - an instantiation of EdDSA in a curve over GF(2^255-19). To
2315 GF(p) finite field with p elements
2316 EdDSA is defined using an elliptic curve over GF(p) of the form
2317 4. a (b-1)-bit encoding of elements of the finite field GF(p).
2318 5. a non-square element d of GF(p)
2319 6. an element B != (0,1) of the set E = { (x,y) is a member of GF(p)
2320 x GF(p) such that -x^2 + y^2 = 1 + dx^2y^2 }.
2321 of GF(q) are those x which the (b-1)-bit encoding of x is
2322 GF(2^255-19) being the little-endian encoding of {0, 1, ...,
2323 d = -121665/121666 which is a member of GF(p), and B is the unique
2324void randombytes_buf(void *const buf, const size_t size);
2325 if(ed25519_random_fd == -1)
2326 if(ed25519_random_fd != -1)
2327 if(xlen < 1048576)
2328 if(i < 1)
2329 if(r[i])
2330 if(r[i + b])
2331 if(r[i] + (r[i + b] << b) <= 15)
2332 else if(r[i] - (r[i + b] << b) >= -15)
2333 if(!r[k])
2334 if(aslide[i] || bslide[i])
2335 if(aslide[i] > 0)
2336 else if(aslide[i] < 0)
2337 if(bslide[i] > 0)
2338 else if(bslide[i] < 0)
2339 if(fe_isnonzero(check))
2340 if(fe_isnonzero(check))
2341 if(fe_isnegative(h->X) == (s[31] >> 7))
2342 if(smlen < 64)
2343 if(sm[63] & 224)
2344 if(ge_frombytes_negate_vartime(&A, pk) != 0)
2345 if(crypto_verify_32(rcheck, rcopy) == 0)
2346 if(r[i])
2347 if(r[i + b])
2348 if(r[i] + (r[i + b] << b) <= 15)
2349 else if(r[i] - (r[i + b] << b) >= -15)
2350 if(!r[k])
2351 if(aslide[i] || bslide[i])
2352 if(aslide[i] > 0)
2353 else if(aslide[i] < 0)
2354 if(bslide[i] > 0)
2355 else if(bslide[i] < 0)
2356 if(fe_isnonzero(check))
2357 if(fe_isnonzero(check))
2358 if(fe_isnegative(h->X) == (s[31] >> 7))
2359 if(smlen < 64)
2360 if(sm[63] & 224)
2361 if(ge_frombytes_negate_vartime(&A, pk) != 0)
2362 if(crypto_verify_32(rcheck, rcopy) == 0)
2363 if(aslide[i] || bslide[i])
2364 if(aslide[i] > 0)
2365 else if(aslide[i] < 0)
2366 if(bslide[i] > 0)
2367 else if(bslide[i] < 0)
2368 if(h9 == 33554428 && h8 == 268435440 && h7 == 536870880 && h6 == 2147483520 &&
2369 if(fe_isnonzero(check))
2370 if(fe_isnonzero(check))
2371 if(fe_isnegative(h->X) != (s[31] >> 7))
2372 if(!fe_isnonzero(h->X))
2373 if(aslide[i] || bslide[i])
2374 if(aslide[i] > 0)
2375 else if(aslide[i] < 0)
2376 if(bslide[i] > 0)
2377 else if(bslide[i] < 0)
2378 if(fe_isnonzero(y))
2379 if(fe_isnonzero(y))
2380 if(fe_isnonzero(y))
2381 if(fe_isnegative(r->X) != sign)
2382#define F(w, k) \
2383 F(w0, 0x428a2f98d728ae22ULL)
2384 F(w1, 0x7137449123ef65cdULL)
2385 F(w2, 0xb5c0fbcfec4d3b2fULL)
2386 F(w3, 0xe9b5dba58189dbbcULL)
2387 F(w4, 0x3956c25bf348b538ULL)
2388 F(w5, 0x59f111f1b605d019ULL)
2389 F(w6, 0x923f82a4af194f9bULL)
2390 F(w7, 0xab1c5ed5da6d8118ULL)
2391 F(w8, 0xd807aa98a3030242ULL)
2392 F(w9, 0x12835b0145706fbeULL)
2393 F(w10, 0x243185be4ee4b28cULL)
2394 F(w11, 0x550c7dc3d5ffb4e2ULL)
2395 F(w12, 0x72be5d74f27b896fULL)
2396 F(w13, 0x80deb1fe3b1696b1ULL)
2397 F(w14, 0x9bdc06a725c71235ULL)
2398 F(w15, 0xc19bf174cf692694ULL)
2399 F(w0, 0xe49b69c19ef14ad2ULL)
2400 F(w1, 0xefbe4786384f25e3ULL)
2401 F(w2, 0x0fc19dc68b8cd5b5ULL)
2402 F(w3, 0x240ca1cc77ac9c65ULL)
2403 F(w4, 0x2de92c6f592b0275ULL)
2404 F(w5, 0x4a7484aa6ea6e483ULL)
2405 F(w6, 0x5cb0a9dcbd41fbd4ULL)
2406 F(w7, 0x76f988da831153b5ULL)
2407 F(w8, 0x983e5152ee66dfabULL)
2408 F(w9, 0xa831c66d2db43210ULL)
2409 F(w10, 0xb00327c898fb213fULL)
2410 F(w11, 0xbf597fc7beef0ee4ULL)
2411 F(w12, 0xc6e00bf33da88fc2ULL)
2412 F(w13, 0xd5a79147930aa725ULL)
2413 F(w14, 0x06ca6351e003826fULL)
2414 F(w15, 0x142929670a0e6e70ULL)
2415 F(w0, 0x27b70a8546d22ffcULL)
2416 F(w1, 0x2e1b21385c26c926ULL)
2417 F(w2, 0x4d2c6dfc5ac42aedULL)
2418 F(w3, 0x53380d139d95b3dfULL)
2419 F(w4, 0x650a73548baf63deULL)
2420 F(w5, 0x766a0abb3c77b2a8ULL)
2421 F(w6, 0x81c2c92e47edaee6ULL)
2422 F(w7, 0x92722c851482353bULL)
2423 F(w8, 0xa2bfe8a14cf10364ULL)
2424 F(w9, 0xa81a664bbc423001ULL)
2425 F(w10, 0xc24b8b70d0f89791ULL)
2426 F(w11, 0xc76c51a30654be30ULL)
2427 F(w12, 0xd192e819d6ef5218ULL)
2428 F(w13, 0xd69906245565a910ULL)
2429 F(w14, 0xf40e35855771202aULL)
2430 F(w15, 0x106aa07032bbd1b8ULL)
2431 F(w0, 0x19a4c116b8d2d0c8ULL)
2432 F(w1, 0x1e376c085141ab53ULL)
2433 F(w2, 0x2748774cdf8eeb99ULL)
2434 F(w3, 0x34b0bcb5e19b48a8ULL)
2435 F(w4, 0x391c0cb3c5c95a63ULL)
2436 F(w5, 0x4ed8aa4ae3418acbULL)
2437 F(w6, 0x5b9cca4f7763e373ULL)
2438 F(w7, 0x682e6ff3d6b2b8a3ULL)
2439 F(w8, 0x748f82ee5defb2fcULL)
2440 F(w9, 0x78a5636f43172f60ULL)
2441 F(w10, 0x84c87814a1f0ab72ULL)
2442 F(w11, 0x8cc702081a6439ecULL)
2443 F(w12, 0x90befffa23631e28ULL)
2444 F(w13, 0xa4506cebde82bde9ULL)
2445 F(w14, 0xbef9a3f7b2c67915ULL)
2446 F(w15, 0xc67178f2e372532bULL)
2447 F(w0, 0xca273eceea26619cULL)
2448 F(w1, 0xd186b8c721c0c207ULL)
2449 F(w2, 0xeada7dd6cde0eb1eULL)
2450 F(w3, 0xf57d4f7fee6ed178ULL)
2451 F(w4, 0x06f067aa72176fbaULL)
2452 F(w5, 0x0a637dc5a2c898a6ULL)
2453 F(w6, 0x113f9804bef90daeULL)
2454 F(w7, 0x1b710b35131c471bULL)
2455 F(w8, 0x28db77f523047d84ULL)
2456 F(w9, 0x32caab7b40c72493ULL)
2457 F(w10, 0x3c9ebe0a15c9bebcULL)
2458 F(w11, 0x431d67c49c100d4cULL)
2459 F(w12, 0x4cc5d4becb3e42b6ULL)
2460 F(w13, 0x597f299cfc657e2aULL)
2461 F(w14, 0x5fcb6fab3ad6faecULL)
2462 F(w15, 0x6c44198c4a475817ULL)
2463 if(inlen < 112)
2464#define F(i) differentbits |= x[i] ^ y[i];
2465 F(0)
2466 F(1)
2467 F(2)
2468 F(3)
2469 F(4)
2470 F(5)
2471 F(6)
2472 F(7)
2473 F(8)
2474 F(9)
2475 F(10)
2476 F(11)
2477 F(12)
2478 F(13)
2479 F(14)
2480 F(15)
2481 F(16)
2482 F(17)
2483 F(18)
2484 F(19)
2485 F(20)
2486 F(21)
2487 F(22)
2488 F(23)
2489 F(24)
2490 F(25)
2491 F(26)
2492 F(27)
2493 F(28)
2494 F(29)
2495 F(30)
2496 F(31)
2497 return std::memcmp(&_v1, &_v2, sizeof(type)) == 0; \
2498 return std::memcmp(&_v1, &_v2, sizeof(type)) != 0; \
2499 static_assert(sizeof(std::size_t) <= sizeof(type), "Size of " #type " must be at least that of size_t"); \
2500 static_assert(sizeof(std::size_t) <= sizeof(type), "Size of " #type " must be at least that of size_t"); \
2501static_assert(sizeof(size_t) == 4 || sizeof(size_t) == 8, "size_t must be 4 or 8 bytes long");
2502static_assert(sizeof(size_t) == 4 || sizeof(size_t) == 8, "size_t must be 4 or 8 bytes long");
2503 if(sizeof(size_t) == 4)
2504 if(sizeof(size_t) == 4)
2505static_assert(sizeof(union hash_state) == 200, "Invalid structure size");
2506static_assert(sizeof(hash) == HASH_SIZE, "Invalid structure size");
2507static_assert(sizeof(hash8) == 8, "Invalid structure size");
2508 fprintf(stderr, "%s\n", msg);
2509void keccakf(uint64_t st[25])
2510 static_assert(HASH_DATA_AREA <= sizeof(temp), "Bad keccak preconditions");
2511 if(mdlen <= 0 || (mdlen > 100 && sizeof(st) != (size_t)mdlen))
2512 if(mdlen <= 0 || (mdlen > 100 && sizeof(st) != (size_t)mdlen))
2513 rsiz = sizeof(state_t) == mdlen ? HASH_DATA_AREA : 200 - 2 * mdlen;
2514 memset(st, 0, sizeof(st));
2515 keccakf(st);
2516 if(inlen + 1 >= sizeof(temp) || inlen > rsiz || rsiz - inlen + inlen + 1 >= sizeof(temp) || rsiz == 0 || rsiz - 1 >= sizeof(temp) || rsizw * 8 > sizeof(temp))
2517 if(inlen + 1 >= sizeof(temp) || inlen > rsiz || rsiz - inlen + inlen + 1 >= sizeof(temp) || rsiz == 0 || rsiz - 1 >= sizeof(temp) || rsizw * 8 > sizeof(temp))
2518 if(inlen + 1 >= sizeof(temp) || inlen > rsiz || rsiz - inlen + inlen + 1 >= sizeof(temp) || rsiz == 0 || rsiz - 1 >= sizeof(temp) || rsizw * 8 > sizeof(temp))
2519 if(inlen + 1 >= sizeof(temp) || inlen > rsiz || rsiz - inlen + inlen + 1 >= sizeof(temp) || rsiz == 0 || rsiz - 1 >= sizeof(temp) || rsizw * 8 > sizeof(temp))
2520 if(inlen + 1 >= sizeof(temp) || inlen > rsiz || rsiz - inlen + inlen + 1 >= sizeof(temp) || rsiz == 0 || rsiz - 1 >= sizeof(temp) || rsizw * 8 > sizeof(temp))
2521 keccakf(st);
2522void keccakf(uint64_t st[25]);
2523 if(hnd == nullptr)
2524 if(!CryptReleaseContext(hnd->prov, 0))
2525 if(close(hnd->fd) < 0)
2526 if(!CryptAcquireContext(&hnd->prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
2527 if((hnd->fd = open("/dev/urandom", O_RDONLY | O_NOCTTY | O_CLOEXEC)) < 0)
2528 generate_system_random_bytes(reinterpret_cast<uint8_t*>(test), sizeof(test));
2529 if(test[0] == 0 && test[1] == 0)
2530 if(hnd == nullptr)
2531 if(size_bytes <= 32)
2532 generate_system_random_bytes(reinterpret_cast<uint8_t*>(buffer+1), sizeof(buffer) - sizeof(uint64_t));
2533 generate_system_random_bytes(reinterpret_cast<uint8_t*>(buffer+1), sizeof(buffer) - sizeof(uint64_t));
2534 keccak(reinterpret_cast<uint8_t*>(buffer), sizeof(buffer), output, 200);
2535 if(size_bytes > 0)
2536 keccak(reinterpret_cast<uint8_t*>(buffer), sizeof(buffer), last, 200);
2537 memwipe(last, sizeof(last));
2538 memwipe(buffer, sizeof(buffer));
2539 keccak(reinterpret_cast<uint8_t*>(&hnd->count), sizeof(hnd->count), buf, 200);
2540 if(!CryptGenRandom(hnd->prov, (DWORD)n, result))
2541 if((size_t)res == n)
2542 if(res < 0)
2543 if(errno != EINTR)
2544 else if(res == 0)
2545 if(count == 1)
2546 else if(count == 2)
2547 if(m_acc_opt == ACC_OPT_KURZ_ADDRESS)
2548 keccak((uint8_t *)&m_keys.m_spend_secret_key, sizeof(crypto::secret_key), (uint8_t *)&second, sizeof(crypto::secret_key));
2549 keccak((uint8_t *)&m_keys.m_spend_secret_key, sizeof(crypto::secret_key), (uint8_t *)&second, sizeof(crypto::secret_key));
2550 keccak((uint8_t *)&m_keys.m_spend_secret_key, sizeof(secret_key), (uint8_t *)&second, sizeof(secret_key));
2551 keccak((uint8_t *)&m_keys.m_spend_secret_key, sizeof(secret_key), (uint8_t *)&second, sizeof(secret_key));
2552 if(m_acc_opt == ACC_OPT_UNKNOWN)
2553 if(m_acc_opt == ACC_OPT_KURZ_ADDRESS)
2554if(APPLE)
2555endif()
2556 if(version == 0 || version > MAX_TRANSACTION_VERSION)
2557 if(t.is_hash_valid())
2558 if(t.is_blob_size_valid())
2559 if(t.is_hash_valid())
2560 if(t.is_blob_size_valid())
2561 if(!typename Archive<W>::is_saving())
2562 if(version == 1)
2563 if(!signatures_not_expected && vin.size() != signatures.size())
2564 if(signatures_not_expected)
2565 if(0 == signature_size)
2566 if(signature_size != signatures[i].size())
2567 if(vin.size() - i > 1)
2568 if(!vin.empty())
2569 if(!r || !ar.stream().good())
2570 if(rct_signatures.type != rct::RCTTypeNull)
2571 if(!r || !ar.stream().good())
2572 if(version == 1)
2573 if(!vin.empty())
2574 if(!r || !ar.stream().good())
2575 if(b.is_hash_valid())
2576 if(b.is_hash_valid())
2577 if(!typename Archive<W>::is_saving())
2578 if(height < config<NETTYPE>::DEV_FUND_START)
2579 if(height / config<NETTYPE>::DEV_FUND_PERIOD >= config<NETTYPE>::DEV_FUND_LENGTH)
2580 if(height % config<NETTYPE>::DEV_FUND_PERIOD != 0)
2581 if(height > 0)
2582 if(height < (PEAK_COIN_EMISSION_HEIGHT + COIN_EMISSION_HEIGHT_INTERVAL))
2583 if(base_reward < FINAL_SUBSIDY)
2584 if(MONEY_SUPPLY > already_generated_coins)
2585 if(median_size < common_config::CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE)
2586 if(current_block_size > 2 * median_size)
2587 if(current_block_size <= (median_size < common_config::BLOCK_SIZE_GROWTH_FAVORED_ZONE ? median_size * 110 / 100 : median_size))
2588 for(size_t i = 0; i != sizeof(public_address_outer_blob) - 1; i++)
2589 for(size_t i = 0; i != sizeof(public_integrated_address_outer_blob) - 1; i++)
2590 if(adr.m_spend_public_key == adr.m_view_public_key)
2591 if(subaddress)
2592 if(subaddress)
2593 if(tx.vin.size() != 1)
2594 if(tx.vin[0].type() != typeid(txin_gen))
2595 if(!tools::base58::decode_addr(str, prefix, data))
2596 if(!silent)
2597 if(!silent)
2598 if(info.has_payment_id)
2599 if(!::serialization::parse_binary(data, iadr))
2600 if(!silent)
2601 else if(info.is_kurz)
2602 if(!::serialization::parse_binary(data, kadr))
2603 if(!silent)
2604 if(!::serialization::parse_binary(data, info.address))
2605 if(!silent)
2606 if(!crypto::check_key(info.address.m_spend_public_key) || !crypto::check_key(info.address.m_view_public_key))
2607 if(!silent)
2608 bool res = epee::string_tools::parse_hexstr_to_binbuff(str_hash, buf);
2609 if(!res || buf.size() != sizeof(crypto::hash))
2610 if(!res || buf.size() != sizeof(crypto::hash))
2611 buf.copy(reinterpret_cast<char *>(&hash), sizeof(crypto::hash));
2612 return boost::hash_range(&val.data[0], &val.data[sizeof(val.data)]);
2613 if(addresses.empty())
2614 a &reinterpret_cast<char(&)[sizeof(crypto::public_key)]>(x);
2615 a &reinterpret_cast<char(&)[sizeof(crypto::secret_key)]>(x);
2616 a &reinterpret_cast<char(&)[sizeof(crypto::key_derivation)]>(x);
2617 a &reinterpret_cast<char(&)[sizeof(crypto::key_image)]>(x);
2618 a &reinterpret_cast<char(&)[sizeof(crypto::signature)]>(x);
2619 a &reinterpret_cast<char(&)[sizeof(crypto::hash)]>(x);
2620 a &reinterpret_cast<char(&)[sizeof(crypto::hash8)]>(x);
2621 if(x.version == 1)
2622 if(x.rct_signatures.type != rct::RCTTypeNull)
2623 a &reinterpret_cast<char(&)[sizeof(rct::key)]>(x);
2624 if(x.type == rct::RCTTypeNull)
2625 if(x.type != rct::RCTTypeFull && x.type != rct::RCTTypeFullBulletproof && x.type != rct::RCTTypeSimple && x.type != rct::RCTTypeSimpleBulletproof)
2626 if(x.type == rct::RCTTypeSimple) // moved to prunable with bulletproofs
2627 if(x.rangeSigs.empty())
2628 if(x.rangeSigs.empty())
2629 if(x.type == rct::RCTTypeNull)
2630 if(x.type != rct::RCTTypeFull && x.type != rct::RCTTypeFullBulletproof && x.type != rct::RCTTypeSimple && x.type != rct::RCTTypeSimpleBulletproof)
2631 if(x.type == rct::RCTTypeSimple)
2632 if(x.p.rangeSigs.empty())
2633 if(x.type == rct::RCTTypeSimpleBulletproof)
2634 if(!(expr)) \
2635 if(tx.version >= 3)
2636 if(tx.version >= 2 && !is_coinbase(tx))
2637 if(rv.outPk.size() != tx.vout.size())
2638 if(!base_only)
2639 if(bulletproof)
2640 if(rv.p.bulletproofs.size() != tx.vout.size())
2641 if(ack.m_spend_secret_key == crypto::null_skey)
2642 if(received_index.is_zero())
2643 if(ack.m_multisig_keys.empty())
2644 if(!received_index.is_zero())
2645 if(b == 0)
2646 size_t point_index = str_amount.find_first_of('.');
2647 if(std::string::npos != point_index)
2648 if(default_decimal_point < fraction_size)
2649 if(str_amount.empty())
2650 if(fraction_size < default_decimal_point)
2651 if(!get_tx_fee(tx, r))
2652 if(tx_extra.empty())
2653 if(!find_tx_extra_field_by_type(tx_extra_fields, pub_key_field, pk_index))
2654 tx_extra.resize(tx_extra.size() + 1 + sizeof(crypto::public_key));
2655 tx_extra[tx_extra.size() - 1 - sizeof(crypto::public_key)] = TX_EXTRA_TAG_PUBKEY;
2656 *reinterpret_cast<crypto::public_key *>(&tx_extra[tx_extra.size() - sizeof(crypto::public_key)]) = tx_pub_key;
2657 if(!find_tx_extra_field_by_type(tx_extra_fields, additional_pub_keys))
2658 if(tx_extra.empty())
2659 if(field.type() != type)
2660 std::copy(payment_id_ptr, payment_id_ptr + sizeof(payment_id), std::back_inserter(extra_nonce));
2661 std::copy(payment_id_ptr, payment_id_ptr + sizeof(payment_id), std::back_inserter(extra_nonce));
2662 if(sizeof(crypto::hash) + 1 != extra_nonce.size())
2663 if(sizeof(crypto::hash) + 1 != extra_nonce.size())
2664 if(TX_EXTRA_NONCE_PAYMENT_ID != extra_nonce[0])
2665 if(sizeof(crypto::hash8) + 1 != extra_nonce.size())
2666 if(sizeof(crypto::hash8) + 1 != extra_nonce.size())
2667 if(TX_EXTRA_NONCE_ENCRYPTED_PAYMENT_ID != extra_nonce[0])
2668 if(!check_key(boost::get<txout_to_key>(out.target).key))
2669 if(money > tokey_in.amount + money)
2670 if(money > o.amount + money)
2671 if(pk == out_key.key)
2672 if(!additional_tx_pub_keys.empty())
2673 if(found != subaddresses.end())
2674 if(!additional_derivations.empty())
2675 if(found != subaddresses.end())
2676 if(null_pkey == tx_pub_key)
2677 if(is_out_to_acc(acc, boost::get<txout_to_key>(o.target), tx_pub_key, additional_tx_pub_keys, i))
2678 if(decimal_point == (unsigned int)-1)
2679 if(decimal_point == (unsigned int)-1)
2680 if(s.size() < decimal_point + 1)
2681 if(decimal_point > 0)
2682 if(t.version == 1)
2683 if(t.rct_signatures.type == rct::RCTTypeNull)
2684 res = cn_fast_hash(hashes, sizeof(hashes));
2685 if(blob_size)
2686 if(t.is_hash_valid())
2687 if(blob_size)
2688 if(!t.is_blob_size_valid())
2689 if(!ret)
2690 if(blob_size)
2691 blob.append(reinterpret_cast<const char *>(&tree_root_hash), sizeof(tree_root_hash));
2692 if(b.is_hash_valid())
2693 if(!ret)
2694 if(b_local.major_version < CRYPTONOTE_V2_POW_BLOCK_VERSION)
2695 if(!off.size())
2696 const uint64_t *end = valid_decomposed_outputs + sizeof(valid_decomposed_outputs) / sizeof(valid_decomposed_outputs[0]);
2697 const uint64_t *end = valid_decomposed_outputs + sizeof(valid_decomposed_outputs) / sizeof(valid_decomposed_outputs[0]);
2698 auto it = std::find_if(tx_extra_fields.begin(), tx_extra_fields.end(), [&index](const tx_extra_field &f) { return typeid(T) == f.type() && !index--; });
2699 if(tx_extra_fields.end() == it)
2700 if(high != 0)
2701 if(timestamps.size() > common_config::DIFFICULTY_WINDOW_V1)
2702 if(length <= 1)
2703 if(length <= common_config::DIFFICULTY_WINDOW_V1 - 2 * common_config::DIFFICULTY_CUT_V1)
2704 if(time_span == 0)
2705 if(high != 0 || low + time_span - 1 < low)
2706 if(timestamps.size() > common_config::DIFFICULTY_BLOCKS_COUNT_V2)
2707 if(length <= 1)
2708 if(length <= common_config::DIFFICULTY_BLOCKS_COUNT_V2 - 2 * common_config::DIFFICULTY_CUT_V2)
2709 if(total_timespan == 0)
2710 if(cut_begin > 0 && length >= cut_begin * 2 + 3)
2711 if(time_span == 0)
2712 if(adjusted_total_timespan > MAX_AVERAGE_TIMESPAN * timespan_length)
2713 if(adjusted_total_timespan < MIN_AVERAGE_TIMESPAN * timespan_length)
2714 if(high != 0)
2715 if(next_diff < 1)
2716 if(b.minor_version == 0)
2717 if(window_size == 0)
2718 if(default_threshold_percent > 100)
2719 if(version == 0)
2720 if(!heights.empty())
2721 if(version <= heights.back().version)
2722 if(height <= heights.back().height)
2723 if(time <= heights.back().time)
2724 if(threshold > 100)
2725 if(!heights.empty())
2726 if(voting_version > max_version)
2727 if(!do_check(block_version, voting_version))
2728 if(voted > current_fork_index)
2729 if(heights.empty())
2730 if(height > window_size)
2731 if(populate)
2732 if(populate)
2733 if(height <= original_version_till_height)
2734 if(height >= db.height())
2735 if(voted > current_fork_index)
2736 if(stop_batch)
2737 if(height == 0)
2738 if(height >= db.height())
2739 if(voted > current_fork_index)
2740 if(height == 0)
2741 if(height >= heights[n].height && accumulated_votes >= threshold)
2742 if(heights.size() <= 1)
2743 if(t >= t_last_fork + forked_time)
2744 if(t >= t_last_fork + update_time)
2745 if(height > db.height())
2746 if(height == db.height())
2747 if(height >= heights[n].height)
2748 if(fork.version == version)
2749 if(height >= heights[n].height)
2750 if(!is_mining())
2751 if(m_extra_messages.size() && m_config.current_extra_message_index < m_extra_messages.size())
2752 if(!m_phandler->get_block_template(bl, m_mine_address, di, height, expected_reward, extra_nonce))
2753 if(is_mining())
2754 if(m_last_hr_merge_time && is_mining())
2755 if(m_last_hash_rates.size() > 19)
2756 if(m_do_print_hashrate)
2757 if(command_line::has_arg(vm, arg_extra_messages))
2758 boost::split(extra_vec, buff, boost::is_any_of("\n"), boost::token_compress_on);
2759 if(!extra_vec[i].size())
2760 if(buff != "0")
2761 if(command_line::has_arg(vm, arg_start_mining))
2762 if(!cryptonote::get_account_address_from_str(nettype, info, command_line::get_arg(vm, arg_start_mining)) || info.is_subaddress)
2763 if(command_line::get_arg(vm, arg_start_mining) == common_config::DEV_FUND_ADDRESS)
2764 if(command_line::has_arg(vm, arg_mining_threads))
2765 if(command_line::has_arg(vm, arg_bg_mining_enable))
2766 if(command_line::has_arg(vm, arg_bg_mining_ignore_battery))
2767 if(command_line::has_arg(vm, arg_bg_mining_min_idle_interval_seconds))
2768 if(command_line::has_arg(vm, arg_bg_mining_idle_threshold_percentage))
2769 if(command_line::has_arg(vm, arg_bg_mining_miner_target_percentage))
2770 if(is_mining())
2771 if(!m_threads.empty())
2772 if(get_is_background_mining_enabled())
2773 if(is_mining())
2774 if(!is_mining())
2775 if(check_hash(h, diffic))
2776 if(m_do_mining)
2777 if(m_pausers_count == 1 && is_mining())
2778 if(m_pausers_count < 0)
2779 if(!m_pausers_count && is_mining())
2780 if(m_pausers_count) //anti split workaround
2781 else if(m_is_background_mining_enabled)
2782 if(m_stop)
2783 if(m_stop)
2784 if(local_template_ver != m_template_no)
2785 if(!local_template_ver) //no any set_block_template call
2786 if(check_hash(h, local_diff))
2787 if(!m_phandler->handle_block_found(b))
2788 if(!m_config_folder_path.empty())
2789 if(min_idle_seconds > BACKGROUND_MINING_MAX_MIN_IDLE_INTERVAL_IN_SECONDS)
2790 if(min_idle_seconds < BACKGROUND_MINING_MIN_MIN_IDLE_INTERVAL_IN_SECONDS)
2791 if(idle_threshold > BACKGROUND_MINING_MAX_IDLE_THRESHOLD_PERCENTAGE)
2792 if(idle_threshold < BACKGROUND_MINING_MIN_IDLE_THRESHOLD_PERCENTAGE)
2793 if(mining_target > BACKGROUND_MINING_MAX_MINING_TARGET_PERCENTAGE)
2794 if(mining_target < BACKGROUND_MINING_MIN_MINING_TARGET_PERCENTAGE)
2795 if(!get_system_times(prev_total_time, prev_idle_time))
2796 if(!m_is_background_mining_started)
2797 if(!m_ignore_battery)
2798 if(!indeterminate(battery_powered))
2799 if(m_is_background_mining_started)
2800 if(!get_system_times(current_total_time, current_idle_time))
2801 if(!get_process_time(current_process_time))
2802 if(idle_percentage + process_percentage < get_idle_threshold() || !on_ac_power)
2803 else if(on_ac_power)
2804 if(!get_system_times(current_total_time, current_idle_time))
2805 if(idle_percentage >= get_idle_threshold() && on_ac_power)
2806 if(!get_process_time(previous_process_time))
2807 if(GetSystemTimes(&idleTime, &kernelTime, &userTime) != -1)
2808 if(!epee::file_io_utils::is_file_exist(STAT_FILE_PATH))
2809 if(stat_file_stream.fail())
2810 if(!(stat_file_iss >> utime && stat_file_iss >> ntime && stat_file_iss >> stime && stat_file_iss >> itime))
2811 status = host_statistics(mach_host_self(), HOST_CPU_LOAD_INFO, (host_info_t)&stats, &count);
2812 if(status != KERN_SUCCESS)
2813 size_t n = sizeof(s.cp_time);
2814 if(sysctlbyname("kern.cp_time", s.cp_time, &n, NULL, 0) == -1)
2815 if(n != sizeof(s.cp_time))
2816 if(n != sizeof(s.cp_time))
2817 << n << " bytes instead of the expected " << sizeof(s.cp_time)
2818 if(GetProcessTimes(GetCurrentProcess(), &createTime, &exitTime, &kernelTime, &userTime) != -1)
2819#elif(defined(__linux__) && defined(_SC_CLK_TCK)) || defined(__APPLE__) || defined(__FreeBSD__)
2820 if(times(&tms) != (clock_t)-1)
2821 if(GetSystemPowerStatus(&power_status) != 0)
2822 if(boost::filesystem::is_directory(power_supply_class_path))
2823 if(boost::filesystem::is_directory(power_supply_path))
2824 if(boost::filesystem::is_regular_file(power_supply_type_path))
2825 if(power_supply_type_stream.fail())
2826 if(boost::starts_with(power_supply_type, "Mains"))
2827 if(boost::filesystem::is_regular_file(power_supply_online_path))
2828 if(power_supply_online_stream.fail())
2829 if(power_supply_online_stream.get() == '1')
2830 else if(boost::starts_with(power_supply_type, "Battery") && boost::logic::indeterminate(on_battery))
2831 if(boost::filesystem::is_regular_file(power_supply_status_path))
2832 if(power_supply_status_stream.fail())
2833 if(boost::starts_with(power_supply_status, "Charging") || boost::starts_with(power_supply_status, "Full"))
2834 if(boost::starts_with(power_supply_status, "Discharging"))
2835 if(boost::logic::indeterminate(on_battery))
2836 size_t n = sizeof(ac);
2837 if(sysctlbyname("hw.acpi.acline", &ac, &n, NULL, 0) == -1)
2838 if(errno != ENOENT)
2839 if(fd == -1)
2840 if(ioctl(fd, APMIO_GETINFO, &info) == -1)
2841 if(n != sizeof(ac))
2842 if(n != sizeof(ac))
2843 << n << " bytes instead of the expected " << sizeof(ac) << " bytes.");
2844 bool operator==(const subaddress_index &rhs) const { return !memcmp(this, &rhs, sizeof(subaddress_index)); }
2845 if(sizeof(size_t) == 8)
2846 if(sizeof(size_t) == 8)
2847 if(eof)
2848 if(!::do_serialize(ar, zero))
2849 if(0 != zero)
2850 if(TX_EXTRA_PADDING_MAX_COUNT < size)
2851 if(!::do_serialize(ar, zero))
2852 if(TX_EXTRA_NONCE_MAX_COUNT < nonce.size())
2853 if(!::do_serialize(ar, field))
2854 if(!::do_serialize(oar, helper))
2855constexpr std::size_t countof(T const (&)[N]) noexcept
2856 for(size_t i = 0; i < countof(FORK_CONFIG); i++)
2857 if(FORK_CONFIG[i].ft == ft)
2858 if(!tx_in_to_key.key_offsets.size())
2859 if(it != m_scan_table.end())
2860 if(its != it->second.end())
2861 if(!found)
2862 if(absolute_offsets.size() != outputs.size())
2863 if(outputs.size() < absolute_offsets.size() && outputs.size() > 0)
2864 if(add_offsets.size() != add_outputs.size())
2865 if(count < outputs.size())
2866 if(!vis.handle_output(output_index.unlock_time, output_index.pubkey, output_index.commitment))
2867 if(++count == absolute_offsets.size() && pmax_related_block_height)
2868 if(*pmax_related_block_height < h)
2869 if(!get_account_address_from_str<MAINNET>(dev_addr, std::string(common_config::DEV_FUND_ADDRESS)))
2870 if(!secret_key_to_public_key(m_dev_view_key, vk) || vk != dev_addr.address.m_view_public_key)
2871 if(db == nullptr)
2872 if(!db->is_open())
2873 if(m_hardfork == nullptr)
2874 if(m_nettype == FAKECHAIN || m_nettype == STAGENET)
2875 else if(m_nettype == TESTNET)
2876 if(m_nettype == FAKECHAIN)
2877 else if(m_nettype == TESTNET)
2878 for(size_t n = 0; n < sizeof(testnet_hard_forks) / sizeof(testnet_hard_forks[0]); ++n)
2879 for(size_t n = 0; n < sizeof(testnet_hard_forks) / sizeof(testnet_hard_forks[0]); ++n)
2880 else if(m_nettype == STAGENET)
2881 for(size_t n = 0; n < sizeof(stagenet_hard_forks) / sizeof(stagenet_hard_forks[0]); ++n)
2882 for(size_t n = 0; n < sizeof(stagenet_hard_forks) / sizeof(stagenet_hard_forks[0]); ++n)
2883 for(size_t n = 0; n < sizeof(mainnet_hard_forks) / sizeof(mainnet_hard_forks[0]); ++n)
2884 for(size_t n = 0; n < sizeof(mainnet_hard_forks) / sizeof(mainnet_hard_forks[0]); ++n)
2885 if(!m_db->height())
2886 if(m_nettype == TESTNET)
2887 else if(m_nettype == STAGENET)
2888 if(m_nettype != FAKECHAIN)
2889 if(!top_block_timestamp)
2890 if(m_nettype != FAKECHAIN)
2891 if(ideal_hf_version <= 1 || ideal_hf_version == top_block.major_version)
2892 if(num_popped_blocks > 0)
2893 if(num_popped_blocks == 0)
2894 if(num_popped_blocks % 100 == 0)
2895 if(num_popped_blocks > 0)
2896 if(hf != nullptr)
2897 if(hf == nullptr)
2898 if(m_show_time_stats)
2899 if(m_db == NULL)
2900 if(!is_coinbase(tx))
2901 if(!r)
2902 if(!sz)
2903 if(sz - current_back_offset == 0)
2904 if(i < 10)
2905 if(!genesis_included)
2906 if(orphan)
2907 if(m_alternative_chains.end() != it_alt)
2908 if(orphan)
2909 if(m_nettype == MAINNET && height >= MAINNET_HARDFORK_V3_HEIGHT && height <= (MAINNET_HARDFORK_V3_HEIGHT + common_config::DIFFICULTY_BLOCKS_COUNT_V2))
2910 if(check_hard_fork_feature(FORK_V3_DIFFICULTY))
2911 else if(check_hard_fork_feature(FORK_V2_DIFFICULTY))
2912 if(m_timestamps_and_difficulties_height != 0 && ((height - m_timestamps_and_difficulties_height) == 1) && timestamps.size() >= block_count && m_difficulties.size() >= block_count)
2913 if(offset == 0)
2914 if(check_hard_fork_feature(FORK_V3_DIFFICULTY))
2915 else if(check_hard_fork_feature(FORK_V2_DIFFICULTY))
2916 if(rollback_height > m_db->height())
2917 if(original_chain.size())
2918 if(!m_db->block_exists(alt_chain.front()->second.bl.prev_id))
2919 if(alt_chain.size() >= common_config::POISSON_CHECK_TRIGGER)
2920 if(high_timestamp < it->second.bl.timestamp)
2921 if(high_timestamp > get_adjusted_time() + block_ftl)
2922 if(low_block == zero_hash)
2923 if(low_timestamp >= high_timestamp)
2924 if(calc_poisson_ln(lam, alt_chain_size + i) < common_config::POISSON_LOG_P_REJECT)
2925 if(failed_checks > i / 2)
2926 if(!r || !bvc.m_added_to_main_chain)
2927 if(!discard_disconnected_chain)
2928 if(!r)
2929 if(check_hard_fork_feature(FORK_V3_DIFFICULTY))
2930 else if(check_hard_fork_feature(FORK_V2_DIFFICULTY))
2931 if(alt_chain.size() < block_count)
2932 if(!main_chain_start_offset)
2933 if(count >= block_count)
2934 if(check_hard_fork_feature(FORK_V3_DIFFICULTY))
2935 else if(check_hard_fork_feature(FORK_V2_DIFFICULTY))
2936 if(boost::get<txin_gen>(b.miner_tx.vin[0]).height != height)
2937 if(!check_outs_overflow(b.miner_tx))
2938 if(tx_pub == null_pkey || !generate_key_derivation(tx_pub, m_dev_view_key, deriv))
2939 if(boost::get<txout_to_key>(b.miner_tx.vout[i].target).key == pk)
2940 if(!get_block_reward(m_nettype, epee::misc_utils::median(last_blocks_sizes), cumulative_block_size, already_generated_coins, base_reward, m_db->height()))
2941 if(base_reward + fee < miner_money)
2942 if(dev_money_needed != dev_money)
2943 if(base_reward + fee != miner_money)
2944 if(!get_block_reward(m_nettype, epee::misc_utils::median(last_blocks_sizes), cumulative_block_size, already_generated_coins, base_reward, m_db->height()))
2945 if(base_reward + fee < money_in_use)
2946 if(base_reward + fee != money_in_use)
2947 if(h == 0)
2948 if(!check_block_timestamp(b, median_ts))
2949 if(!m_tx_pool.fill_block_template(b, median_size, already_generated_coins, txs_size, fee, expected_reward, height))
2950 if(cur_res == m_tx_pool.m_transactions.end())
2951 if(cur_tx.blob_size != get_object_blobsize(cur_tx.tx))
2952 if(cur_tx.fee != cur_tx.tx.rct_signatures.txnFee)
2953 if(txs_size != real_txs_size)
2954 if(fee != real_fee)
2955 if(coinbase_blob_size > cumulative_size - txs_size)
2956 if(coinbase_blob_size < cumulative_size - txs_size)
2957 if(cumulative_size != txs_size + get_object_blobsize(b.miner_tx))
2958 if(cumulative_size != txs_size + get_object_blobsize(b.miner_tx))
2959 if(timestamps.size() >= window_size)
2960 if(0 == block_height)
2961 if(!m_checkpoints.is_alternative_block_allowed(get_current_blockchain_height(), block_height))
2962 if(!m_hardfork->check_for_height(b, block_height))
2963 if(it_prev != m_alternative_chains.end() || parent_in_main)
2964 if(alt_chain.size())
2965 if(!m_db->block_exists(alt_chain.front()->second.bl.prev_id))
2966 if(!check_block_timestamp(timestamps, b))
2967 if(!m_checkpoints.check_block(bei.height, id, is_a_checkpoint))
2968 if(!check_hash(proof_of_work, current_diff))
2969 if(!prevalidate_miner_transaction(b, bei.height))
2970 if(alt_chain.size())
2971 if(is_a_checkpoint)
2972 if(r)
2973 else if(main_chain_cumulative_difficulty < bei.cumulative_difficulty) //check if difficulty bigger then in main chain
2974 if(r)
2975 if(start_offset >= m_db->height())
2976 if(!get_blocks(start_offset, count, blocks))
2977 if(start_offset >= m_db->height())
2978 if(!parse_and_validate_block_from_blob(blocks.back().first, blocks.back().second))
2979 if(missed_tx_ids.size() != 0)
2980 if(height + CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE <= m_db->height())
2981 if(num_outs <= count)
2982 if(is_tx_spendtime_unlocked(m_db->get_tx_unlock_time(toi.first)))
2983 if(seen_indices.size() == num_outs)
2984 if(i == num_outs)
2985 if(seen_indices.count(i))
2986 if(is_tx_spendtime_unlocked(m_db->get_tx_unlock_time(toi.first)))
2987 if(height + CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE <= m_db->height())
2988 if(num_outs <= req.outs_count)
2989 if(is_tx_spendtime_unlocked(m_db->get_tx_unlock_time(toi.first)))
2990 if(seen_indices.size() == num_outs)
2991 if(i == num_outs)
2992 if(seen_indices.count(i))
2993 if(is_tx_spendtime_unlocked(m_db->get_tx_unlock_time(toi.first)))
2994 if(res.outs.size() < req.outs_count)
2995 int list_idx = rand() % (sizeof(amounts)/sizeof(amounts[0]));
2996 int list_idx = rand() % (sizeof(amounts)/sizeof(amounts[0]));
2997 if(from_height > start_height)
2998 if(!qblock_ids.size() /*|| !req.m_total_height*/)
2999 if(qblock_ids.back() != gen_hash)
3000 if(m_db->block_exists(*bl_it, &split_height))
3001 if(bl_it == qblock_ids.end())
3002 if(!parse_and_validate_block_from_blob(blocks.back().first, blocks.back().second))
3003 if(m_db->get_tx_blob(tx_hash, tx))
3004 if(m_db->get_tx_blob(tx_hash, tx))
3005 if(!parse_and_validate_tx_from_blob(tx, txs.back()))
3006 if(!find_blockchain_supplement(qblock_ids, start_height))
3007 if(result)
3008 if(req_start_block > 0)
3009 if(req_start_block >= m_db->height())
3010 if(!find_blockchain_supplement(qblock_ids, start_height))
3011 if(m_db->block_exists(id))
3012 if(m_alternative_chains.count(id))
3013 if(m_invalid_blocks.count(id))
3014 if(!r.second || m_db->has_key_image(ki))
3015 if(!boost::apply_visitor(add_transaction_input_visitor(keys_this_block, m_db), in))
3016 if(!m_db->tx_exists(tx_id, tx_index))
3017 if(indexs.empty())
3018 if(m_db->height() < m_blocks_hash_check.size())
3019 if(m_show_time_stats)
3020 if(m_db->height() < m_blocks_hash_check.size() && kept_by_block)
3021 if(m_show_time_stats)
3022 if(!res)
3023 if(o.amount != 0)
3024 if(o.target.type() == typeid(txout_to_key))
3025 if(!crypto::check_key(out_to_key.key))
3026 if(!check_hard_fork_feature(FORK_BULLETPROOFS))
3027 if(bulletproof || !tx.rct_signatures.p.bulletproofs.empty())
3028 if(have_tx_keyimg_as_spent(in_to_key.k_image))
3029 if(rv.type == rct::RCTTypeFull || rv.type == rct::RCTTypeFullBulletproof)
3030 else if(rv.type == rct::RCTTypeSimple || rv.type == rct::RCTTypeSimpleBulletproof)
3031 if(rv.type == rct::RCTTypeFull || rv.type == rct::RCTTypeFullBulletproof)
3032 else if(rv.type == rct::RCTTypeSimple || rv.type == rct::RCTTypeSimpleBulletproof)
3033 if(pmax_used_block_height)
3034 if(txin.type() != typeid(txin_to_key))
3035 if(vin_mixin < lowest_mixin)
3036 if(vin_mixin > highest_mixin)
3037 if(vin_mixin > MAX_MIXIN)
3038 if(lowest_mixin < DEFAULT_MIXIN)
3039 if(strict_tx_semantics && highest_mixin != lowest_mixin)
3040 if(strict_tx_semantics)
3041 if(f.type() == typeid(tx_extra_pub_key))
3042 if(has_pubkey)
3043 else if(f.type() == typeid(tx_extra_additional_pub_keys))
3044 if(has_extrapubkeys)
3045 if(extrapubkeys.data.size() != tx.vout.size())
3046 if(!has_pubkey)
3047 if(txin.type() == typeid(txin_to_key))
3048 if(last_key_image != nullptr && memcmp(&in_to_key.k_image, last_key_image, sizeof(*last_key_image)) >= 0)
3049 if(last_key_image != nullptr && memcmp(&in_to_key.k_image, last_key_image, sizeof(*last_key_image)) >= 0)
3050 if(tx.version > max_tx_version)
3051 if(tx.version < min_tx_version)
3052 if(it == m_check_txin_table.end())
3053 if(have_tx_keyimg_as_spent(in_to_key.k_image))
3054 if(!check_tx_input(tx.version, in_to_key, tx_prefix_hash, std::vector<crypto::signature>(), tx.rct_signatures, pubkeys[sig_index], pmax_used_block_height))
3055 if(pmax_used_block_height) // a default value of NULL is used when called from Blockchain::handle_block_to_main_chain()
3056 if(!expand_transaction_2(tx, tx_prefix_hash, pubkeys))
3057 if(pubkeys.size() != rv.mixRing.size())
3058 if(pubkeys[i].size() != rv.mixRing[i].size())
3059 if(pubkeys[n][m].dest != rct::rct2pk(rv.mixRing[n][m].dest))
3060 if(pubkeys[n][m].mask != rct::rct2pk(rv.mixRing[n][m].mask))
3061 if(rv.p.MGs.size() != tx.vin.size())
3062 if(rv.p.MGs[n].II.empty() || memcmp(&boost::get<txin_to_key>(tx.vin[n]).k_image, &rv.p.MGs[n].II[0], 32))
3063 if(!rct::verRctSimple(rv, false))
3064 if(!size_matches)
3065 if(pubkeys[n][m].dest != rct::rct2pk(rv.mixRing[m][n].dest))
3066 if(pubkeys[n][m].mask != rct::rct2pk(rv.mixRing[m][n].mask))
3067 if(rv.p.MGs.size() != 1)
3068 if(rv.p.MGs.empty() || rv.p.MGs[0].II.size() != tx.vin.size())
3069 if(memcmp(&boost::get<txin_to_key>(tx.vin[n]).k_image, &rv.p.MGs[0].II[n], 32))
3070 if(!rct::verRct(rv, false))
3071 if(median_block_size < common_config::BLOCK_SIZE_GROWTH_FAVORED_ZONE)
3072 if(block_reward < common_config::DYNAMIC_FEE_PER_KB_BASE_BLOCK_REWARD)
3073 if(check_hard_fork_feature(FORK_FEE_V2))
3074 if(tx.vin.size() > 0 && tx.vin[0].type() == typeid(txin_to_key))
3075 else if(check_hard_fork_feature(FORK_FIXED_FEE))
3076 if(!get_block_reward(m_nettype, median, 1, cal_generated_coins, base_reward, height))
3077 if(fee < needed_fee)
3078 if(fee < needed_fee)
3079 if(!m_bch.is_tx_spendtime_unlocked(unlock_time))
3080 if(!scan_outputkeys_for_indexes(tx_version, txin, vi, tx_prefix_hash, pmax_related_block_height))
3081 if(txin.key_offsets.size() != output_keys.size())
3082 if(tx_version == 1)
3083 if(b.timestamp < median_ts)
3084 if(check_hard_fork_feature(FORK_V3_DIFFICULTY))
3085 else if(check_hard_fork_feature(FORK_V2_DIFFICULTY))
3086 if(b.timestamp > get_adjusted_time() + block_future_time_limit)
3087 if(m_db->height() < blockchain_timestamp_check_window)
3088 if(!m_tx_pool.add_tx(tx, tvc, true, true, false))
3089 if(m_tx_pool.have_tx(txid) && !m_tx_pool.take_tx(txid, tx, blob_size, fee, relayed, do_not_relay, double_spend_seen))
3090 if(bl.prev_id != get_tail_id())
3091 if(!seen_future_version && bl.major_version > m_hardfork->get_ideal_version())
3092 if(!m_hardfork->check(bl))
3093 if(!check_block_timestamp(bl))
3094 if(m_db->height() < m_blocks_hash_check.size())
3095 if(expected_hash != crypto::null_hash)
3096 if(memcmp(&hash, &expected_hash, sizeof(hash)) != 0)
3097 if(memcmp(&hash, &expected_hash, sizeof(hash)) != 0)
3098 if(it != m_blocks_longhash_table.end())
3099 if(!check_hash(proof_of_work, current_diffic))
3100 if(m_checkpoints.is_in_checkpoint_zone(get_current_blockchain_height()))
3101 if(!m_checkpoints.check_block(get_current_blockchain_height(), id))
3102 if(precomputed)
3103 if(!prevalidate_miner_transaction(bl, m_db->height()))
3104 if(m_db->tx_exists(tx_id))
3105 if(!m_tx_pool.take_tx(tx_id, tx, blob_size, fee, relayed, do_not_relay, double_spend_seen))
3106 if(!fast_check)
3107 if(!check_tx_inputs(tx, tvc))
3108 if(tx_index >= m_blocks_txs_check.size() || memcmp(&m_blocks_txs_check[tx_index++], &tx_id, sizeof(tx_id)) != 0)
3109 if(tx_index >= m_blocks_txs_check.size() || memcmp(&m_blocks_txs_check[tx_index++], &tx_id, sizeof(tx_id)) != 0)
3110 if(check_hard_fork_feature(FORK_DEV_FUND))
3111 if(!validate_miner_transaction_v2(bl, m_db->height(), cumulative_block_size, fee_summary, base_reward, already_generated_coins, bvc.m_partial_block_reward))
3112 if(!validate_miner_transaction_v1(bl, cumulative_block_size, fee_summary, base_reward, already_generated_coins, bvc.m_partial_block_reward))
3113 if(m_db->height())
3114 if(precomputed)
3115 if(!bvc.m_verifivation_failed)
3116 if(m_show_time_stats)
3117 if(median <= full_reward_zone)
3118 if(have_block(id))
3119 if(!(bl.prev_id == get_tail_id()))
3120 if(pt.first >= m_db->height())
3121 if(!points.check_block(pt.first, m_db->get_block_hash_from_height(pt.first)))
3122 if(enforce)
3123 if(stop_batch)
3124 if(!m_checkpoints.load_checkpoints_from_json(file_path))
3125 if(m_enforce_dns_checkpoints && check_dns && !m_offline)
3126 if(!m_checkpoints.load_checkpoints_from_dns())
3127 else if(check_dns && !m_offline)
3128 if(m_checkpoints.check_for_conflicts(dns_points))
3129 if(m_cancel)
3130 if(success && m_sync_counter > 0)
3131 if(force_sync)
3132 if(m_db_sync_mode != db_nosync)
3133 else if(m_db_blocks_per_sync && m_sync_counter >= m_db_blocks_per_sync)
3134 if(m_db_sync_mode == db_async)
3135 else if(m_db_sync_mode == db_sync)
3136 if(!m_blocks_hash_check.empty() && m_db->height() > m_blocks_hash_check.size() + 4096)
3137 if(height >= m_blocks_hash_of_hashes.size() * HASH_OF_HASHES_STEP)
3138 if(m_blocks_hash_check.empty())
3139 if(first_index == last_index && hashes.size() < HASH_OF_HASHES_STEP && (height + hashes.size()) % HASH_OF_HASHES_STEP)
3140 if(disconnected && height % HASH_OF_HASHES_STEP)
3141 if(pop)
3142 if(n < m_blocks_hash_of_hashes.size())
3143 if(data.size() < (n - first_index) * HASH_OF_HASHES_STEP + HASH_OF_HASHES_STEP)
3144 cn_fast_hash(data.data() + (n - first_index) * HASH_OF_HASHES_STEP, HASH_OF_HASHES_STEP * sizeof(crypto::hash), hash);
3145 if(!valid)
3146 if(usable > hashes.size())
3147 if(blocks_entry.size() == 0)
3148 if((m_db->height() + blocks_entry.size()) < m_blocks_hash_check.size())
3149 if(blocks_entry.size() > 1 && threads > 1 && m_max_prepare_blocks_threads > 1)
3150 if(threads > m_max_prepare_blocks_threads)
3151 if(!parse_and_validate_block_from_blob(it->block, block))
3152 if(i == 0 && j == 0)
3153 if(block.prev_id != tophash)
3154 if(have_block(get_block_hash(block)))
3155 if(!parse_and_validate_block_from_blob(it->block, block))
3156 if(have_block(get_block_hash(block)))
3157 if(!blocks_exist)
3158 if(m_hash_ctxes_multi.size() < threads)
3159 tpool.submit(&waiter, boost::bind(&Blockchain::block_longhash_worker, this, std::ref(m_hash_ctxes_multi[i]), std::cref(blocks[i]), std::ref(maps[i])));
3160 tpool.submit(&waiter, boost::bind(&Blockchain::block_longhash_worker, this, std::ref(m_hash_ctxes_multi[i]), std::cref(blocks[i]), std::ref(maps[i])));
3161 tpool.submit(&waiter, boost::bind(&Blockchain::block_longhash_worker, this, std::ref(m_hash_ctxes_multi[i]), std::cref(blocks[i]), std::ref(maps[i])));
3162 if(m_cancel)
3163 if(m_cancel)
3164 if(blocks_exist)
3165 if(blocks_entry.size() > 1 && threads > 1 && m_show_time_stats)
3166 if(m_cancel)
3167 if(!parse_and_validate_tx_from_blob(tx_blob, tx, tx_hash, tx_prefix_hash))
3168 if(its != m_scan_table.end())
3169 if(it != its->second.end())
3170 if(offset_map.find(amount) == offset_map.end())
3171 if(tx_map.find(amount) == tx_map.end())
3172 if(!m_db->can_thread_bulk_indices())
3173 if(threads > 1)
3174 tpool.submit(&waiter, boost::bind(&Blockchain::output_scan_worker, this, amount, std::cref(offset_map[amount]), std::ref(tx_map[amount]), std::ref(transactions[i])));
3175 tpool.submit(&waiter, boost::bind(&Blockchain::output_scan_worker, this, amount, std::cref(offset_map[amount]), std::ref(tx_map[amount]), std::ref(transactions[i])));
3176 tpool.submit(&waiter, boost::bind(&Blockchain::output_scan_worker, this, amount, std::cref(offset_map[amount]), std::ref(tx_map[amount]), std::ref(transactions[i])));
3177 if(m_cancel)
3178 if(!parse_and_validate_tx_from_blob(tx_blob, tx, tx_hash, tx_prefix_hash))
3179 if(its == m_scan_table.end())
3180 if(offset_needed == offset_found)
3181 if(found && pos < tx_map[in_to_key.amount].size())
3182 if(total_txs > 0)
3183 if(m_show_time_stats)
3184 if(sync_mode == db_defaultsync)
3185 if(m_db_default_sync)
3186 if(j.second.bl.prev_id == top)
3187 if(!found)
3188 if(m_fast_sync && get_blocks_dat_start(testnet, stagenet) != nullptr && get_blocks_dat_size(testnet, stagenet) > 0)
3189 if(m_nettype == MAINNET)
3190 if(!tools::sha256sum(get_blocks_dat_start(testnet, stagenet), get_blocks_dat_size(testnet, stagenet), hash))
3191 if(!epee::string_tools::parse_hexstr_to_binbuff(std::string(expected_block_hashes_hash), expected_hash_data) || expected_hash_data.size() != sizeof(crypto::hash))
3192 if(!epee::string_tools::parse_hexstr_to_binbuff(std::string(expected_block_hashes_hash), expected_hash_data) || expected_hash_data.size() != sizeof(crypto::hash))
3193 if(!epee::string_tools::parse_hexstr_to_binbuff(std::string(expected_block_hashes_hash), expected_hash_data) || expected_hash_data.size() != sizeof(crypto::hash))
3194 if(hash != expected_hash)
3195 if(get_blocks_dat_size(testnet, stagenet) > 4)
3196 if(nblocks > (std::numeric_limits<uint32_t>::max() - 4) / sizeof(hash))
3197 if(nblocks > (std::numeric_limits<uint32_t>::max() - 4) / sizeof(hash))
3198 const size_t size_needed = 4 + nblocks * sizeof(crypto::hash);
3199 if(nblocks > 0 && nblocks > (m_db->height() + HASH_OF_HASHES_STEP - 1) / HASH_OF_HASHES_STEP && get_blocks_dat_size(testnet, stagenet) >= size_needed)
3200 p += sizeof(uint32_t);
3201 memcpy(hash.data, p, sizeof(hash.data));
3202 p += sizeof(hash.data);
3203 if(get_fork_v(m_nettype, ft) == hardfork_conf::FORK_ID_DISABLED)
3204if(PER_BLOCK_CHECKPOINT)
3205endif()
3206 if(pprotocol)
3207 if(m_nettype != MAINNET || m_disable_dns_checkpoints)
3208 if(m_checkpoints_updating.test_and_set())
3209 if(time(NULL) - m_last_dns_checkpoints_update >= 3600)
3210 else if(time(NULL) - m_last_json_checkpoints_update >= 600)
3211 if(!res)
3212 if(handle)
3213 if(m_nettype != FAKECHAIN)
3214 if(m_nettype == MAINNET)
3215 if(!checkpoints.init_default_checkpoints(m_nettype))
3216 if(!command_line::is_arg_defaulted(vm, arg_fluffy_blocks))
3217 if(command_line::get_arg(vm, arg_test_drop_download) == true)
3218 if(!m_blockchain_storage.get_blocks(start_offset, count, bs))
3219 if(test_options != NULL)
3220 if(config_subdir)
3221 if(m_nettype == FAKECHAIN)
3222 if(db == NULL)
3223 boost::split(options, db_sync_mode, boost::is_any_of(" :"));
3224 if(options.size() == 0)
3225 if(options.size() >= 1)
3226 if(options[0] == "safe")
3227 else if(options[0] == "fast")
3228 else if(options[0] == "fastest")
3229 if(options.size() >= 2 && !safemode)
3230 if(options[1] == "sync")
3231 else if(options[1] == "async")
3232 if(options.size() >= 3 && !safemode)
3233 if(*endptr == '\0')
3234 if(db_salvage)
3235 if(!db->m_open)
3236 if(check_updates_string == "disabled")
3237 else if(check_updates_string == "notify")
3238 else if(check_updates_string == "download")
3239 else if(check_updates_string == "update")
3240 if(m_test_drop_download_height == 0)
3241 if(get_blockchain_storage().get_current_blockchain_height() <= m_test_drop_download_height)
3242 if(tx_blob.size() > get_max_tx_size())
3243 if(!parse_tx_from_blob(tx, tx_hash, tx_prefixt_hash, tx_blob))
3244 if(bad_semantics_txes[idx].find(tx_hash) != bad_semantics_txes[idx].end())
3245 if(tx.version < MIN_TRANSACTION_VERSION || tx.version > MAX_TRANSACTION_VERSION)
3246 if(tx.unlock_time >= common_config::CRYPTONOTE_MAX_BLOCK_NUMBER)
3247 if(!check_tx_syntax(tx))
3248 if(keeped_by_block && get_blockchain_storage().is_within_compiled_block_hash_area())
3249 else if(!check_tx_semantic(tx, keeped_by_block))
3250 if(bad_semantics_txes[0].size() >= BAD_SEMANTICS_TXES_MAX_SIZE)
3251 if(!results[i].res)
3252 if(m_mempool.have_tx(results[i].hash))
3253 else if(m_blockchain_storage.have_tx(results[i].hash))
3254 if(!results[i].res)
3255 if(tvc[i].m_verifivation_failed)
3256 else if(tvc[i].m_verifivation_impossible)
3257 if(tvc[i].m_added_to_pool)
3258 if(!tx.vin.size())
3259 if(!check_inputs_types_supported(tx))
3260 if(!check_outs_valid(tx))
3261 if(tx.version >= 2)
3262 if(tx.rct_signatures.outPk.size() != tx.vout.size())
3263 if(!check_money_overflow(tx))
3264 if(!keeped_by_block && get_object_blobsize(tx) >= m_blockchain_storage.get_current_cumulative_blocksize_limit() - CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE)
3265 if(!check_tx_inputs_keyimages_diff(tx))
3266 if(!check_tx_inputs_keyimages_diff(tx))
3267 if(!check_tx_inputs_ring_members_diff(tx))
3268 if(!check_tx_inputs_ring_members_diff(tx))
3269 if(!check_tx_inputs_keyimages_domain(tx))
3270 if(tx.version >= 2)
3271 if(!rct::verRctSimple(rv, true))
3272 if(!rct::verRct(rv, true))
3273 if(block_sync_size > 0)
3274 if(height >= quick_height)
3275 if(count)
3276 if(start_offset == 0)
3277bool core::check_tx_inputs_keyimages_diff(const transaction &tx) const
3278 if(!ki.insert(tokey_in.k_image).second)
3279bool core::check_tx_inputs_ring_members_diff(const transaction &tx) const
3280 if(tokey_in.key_offsets[n] == 0)
3281 if(!(rct::scalarmultKey(rct::ki2rct(tokey_in.k_image), rct::curveOrder()) == rct::identity()))
3282 if(keeped_by_block)
3283 if(m_mempool.have_tx(tx_hash))
3284 if(m_blockchain_storage.have_tx(tx_hash))
3285 if(m_mempool.get_relayable_transactions(txs) && !txs.empty())
3286 if(!parse_and_validate_tx_from_blob(tx_blob, tx, tx_hash, tx_prefix_hash))
3287 if(bvc.m_added_to_main_chain)
3288 if(missed_txs.size() && m_blockchain_storage.get_block_id_by_height(get_block_height(b)) != get_block_hash(b))
3289 if(block_blob.size() > common_config::BLOCK_SIZE_LIMIT_ABSOLUTE)
3290 if(!parse_and_validate_block_from_blob(block_blob, b))
3291 if(update_miner_blocktemplate && bvc.m_added_to_main_chain)
3292 if(block_blob.size() > common_config::BLOCK_SIZE_LIMIT_ABSOLUTE)
3293 if(!m_starter_message_showed)
3294 if(m_offline)
3295 if(free_space < 1ull * 1024 * 1024 * 1024) // 1 GB
3296 bool check_tx_inputs_keyimages_diff(const transaction &tx) const;
3297 bool check_tx_inputs_ring_members_diff(const transaction &tx) const;
3298 if(change_addr && dst_entr.addr == change_addr)
3299 if(unique_dst_addresses.count(dst_entr.addr) == 0)
3300 if(dst_entr.is_subaddress)
3301 if(!extra_nonce.empty())
3302 if(!add_extra_nonce_to_tx_extra(tx.extra, extra_nonce))
3303 if(!get_block_reward(nettype, median_size, current_block_size, already_generated_coins, block_reward, height))
3304 if(get_dev_fund_amount(nettype, height, dev_fund_amount))
3305 if(i.amount == 0)
3306 if(change_addr && i.addr == *change_addr)
3307 if(i.addr == addr)
3308 if(count > 0)
3309 if(count == 0 && change_addr)
3310 if(sources.empty())
3311 if(!rct)
3312 if(msout)
3313 if(unlock_time > common_config::CRYPTONOTE_MAX_BLOCK_NUMBER)
3314 if(parse_tx_extra(tx.extra, tx_extra_fields))
3315 if(find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
3316 if(get_encrypted_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
3317 if(view_key_pub == null_pkey)
3318 if(!hwdev.encrypt_payment_id(payment_id, view_key_pub, tx_key))
3319 if(!add_extra_nonce_to_tx_extra(tx.extra, extra_nonce))
3320 if(src_entr.real_output >= src_entr.outputs.size())
3321 if(!generate_key_image_helper(sender_account_keys, subaddresses, out_key, src_entr.real_out_tx_key, src_entr.real_out_additional_tx_keys, src_entr.real_output_in_tx_index, in_ephemeral, img, hwdev))
3322 if(!msout && !(in_ephemeral.pub == src_entr.outputs[src_entr.real_output].second.dest))
3323 if(shuffle_outs)
3324 return memcmp(&tk0.k_image, &tk1.k_image, sizeof(tk0.k_image)) > 0;
3325 if(num_stdaddresses == 0 && num_subaddresses == 1)
3326 if(need_additional_txkeys)
3327 if(need_additional_txkeys)
3328 if(dst_entr.is_subaddress)
3329 if(change_addr && dst_entr.addr == *change_addr)
3330 if(need_additional_txkeys)
3331 if(need_additional_txkeys)
3332 if(summary_outs_money > summary_inputs_money)
3333 for(size_t i = 0; i < sizeof(sender_account_keys.m_spend_secret_key); ++i)
3334 if(zero_secret_key)
3335 if(!use_simple_rct)
3336 if(src_entr.real_output != sources.begin()->real_output)
3337 if(n_total_outs != sources[i].outputs.size())
3338 if(msout)
3339 if(use_simple_rct)
3340 if(!use_simple_rct && amount_in > amount_out)
3341 if(sources[i].rct)
3342 if(use_simple_rct)
3343 if(need_additional_txkeys)
3344 bool r = string_tools::parse_hexstr_to_binbuff(genesis_tx, tx_bl);
3345 if(real_output >= outputs.size())
3346 if(ver < 1)
3347 if(ver < 1)
3348 if(d > MAX_RELAY_TIME)
3349 if(m_batch)
3350 if(tx.version == 0)
3351 if(!kept_by_block && m_timed_out_transactions.find(id) != m_timed_out_transactions.end())
3352 if(!check_inputs_types_supported(tx))
3353 if(!kept_by_block && !m_blockchain.check_fee(tx, blob_size, fee))
3354 if(!kept_by_block && blob_size > tx_size_limit)
3355 if(!kept_by_block)
3356 if(have_tx_keyimges_as_spent(tx))
3357 if(!m_blockchain.check_tx_outputs(tx, tvc))
3358 if(!ch_inp_res)
3359 if(kept_by_block)
3360 memset(meta.padding, 0, sizeof(meta.padding));
3361 if(!insert_key_images(tx, kept_by_block))
3362 memset(meta.padding, 0, sizeof(meta.padding));
3363 if(!insert_key_images(tx, kept_by_block))
3364 if(meta.fee > 0 && !do_not_relay)
3365 if(!get_transaction_hash(tx, h, blob_size) || blob_size == 0)
3366 if(bytes == 0)
3367 if(m_txpool_size <= bytes)
3368 if(!m_blockchain.get_txpool_tx_meta(txid, meta))
3369 if(meta.kept_by_block)
3370 if(!parse_and_validate_tx_from_blob(txblob, tx))
3371 if(m_txpool_size > bytes)
3372 if(!key_image_set.size())
3373 if(sorted_it == m_txs_by_fee_and_receive_time.end())
3374 if(!m_blockchain.get_txpool_tx_meta(id, meta))
3375 if(!parse_and_validate_tx_from_blob(txblob, tx))
3376 return std::find_if(m_txs_by_fee_and_receive_time.begin(), m_txs_by_fee_and_receive_time.end(), [&](const sorted_tx_container::value_type &a) {
3377 if((tx_age > CRYPTONOTE_MEMPOOL_TX_LIVETIME && !meta.kept_by_block) ||
3378 if(sorted_it == m_txs_by_fee_and_receive_time.end())
3379 if(!remove.empty())
3380 if(!parse_and_validate_tx_from_blob(bd, tx))
3381 if(meta.fee > 0 && !meta.do_not_relay && now - meta.last_relayed_time > get_relay_delay(now, meta.receive_time))
3382 if(now - meta.receive_time <= max_age / 2)
3383 if(m_blockchain.get_txpool_tx_meta(it->first, meta))
3384 if(!parse_and_validate_tx_from_blob(*bd, tx))
3385 if(!stats.bytes_min || meta.blob_size < stats.bytes_min)
3386 if(meta.blob_size > stats.bytes_max)
3387 if(!meta.relayed)
3388 if(!stats.oldest || meta.receive_time < stats.oldest)
3389 if(meta.receive_time < now - 600)
3390 if(meta.last_failed_height)
3391 if(meta.double_spend_seen)
3392 if(stats.txs_total > 1)
3393 if(end)
3394 if(!delta)
3395 if(!parse_and_validate_tx_from_blob(*bd, tx))
3396 if(!include_sensitive_data)
3397 if(!m_blockchain.get_txpool_tx_meta(tx_id_hash, meta))
3398 if(!meta.relayed)
3399 if(!ki.txs_hashes.empty())
3400 if(!parse_and_validate_tx_from_blob(*bd, tx))
3401 if(have_tx_keyimg_as_spent(tokey_in.k_image))
3402 if(txd.max_used_block_id == null_hash)
3403 if(txd.last_failed_id != null_hash && m_blockchain.get_current_blockchain_height() > txd.last_failed_height && txd.last_failed_id == m_blockchain.get_block_id_by_height(txd.last_failed_height))
3404 if(!m_blockchain.check_tx_inputs(tx, txd.max_used_block_height, txd.max_used_block_id, tvc))
3405 if(txd.max_used_block_height >= m_blockchain.get_current_blockchain_height())
3406 if(true)
3407 if(txd.last_failed_id == m_blockchain.get_block_id_by_height(txd.last_failed_height))
3408 if(!m_blockchain.check_tx_inputs(tx, txd.max_used_block_height, txd.max_used_block_id, tvc))
3409 if(m_blockchain.have_tx_keyimges_as_spent(tx))
3410 if(k_images.count(itk.k_image))
3411 if(it != m_spent_key_images.end())
3412 if(!m_blockchain.get_txpool_tx_meta(txid, meta))
3413 if(!meta.double_spend_seen)
3414 if(!short_format)
3415 if(!parse_and_validate_tx_from_blob(*txblob, tx))
3416 if(!m_blockchain.get_txpool_tx_meta(tx_hash.second, meta))
3417 if(max_total_size < total_size + meta.blob_size)
3418 if(!get_block_reward(m_blockchain.get_nettype(), median_size, total_size + meta.blob_size + CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE, already_generated_coins, block_reward, height))
3419 if(coinbase < template_accept_threshold(best_coinbase))
3420 if(!parse_and_validate_tx_from_blob(txblob, tx))
3421 if(memcmp(&original_meta, &meta, sizeof(meta)))
3422 if(memcmp(&original_meta, &meta, sizeof(meta)))
3423 if(!ready)
3424 if(have_key_images(k_images, tx))
3425 if(meta.blob_size > tx_size_limit)
3426 else if(m_blockchain.have_tx(txid))
3427 if(!remove.empty())
3428 if(!parse_and_validate_tx_from_blob(txblob, tx))
3429 if(sorted_it == m_txs_by_fee_and_receive_time.end())
3430 if(!!kept != !!meta.kept_by_block)
3431 if(!parse_and_validate_tx_from_blob(*bd, tx))
3432 if(!insert_key_images(tx, meta.kept_by_block))
3433 if(!r)
3434 if(!remove.empty())
3435 if(a.first.first > b.first.first)
3436 else if(a.first.first < b.first.first)
3437 else if(a.first.second < b.first.second)
3438 else if(a.first.second > b.first.second)
3439 else if(a.second != b.second)
3440 if(version < 11)
3441 if(version < 12)
3442static_assert(sizeof(size_t) <= sizeof(boost::uuids::uuid), "boost::uuids::uuid too small");
3443static_assert(sizeof(size_t) <= sizeof(boost::uuids::uuid), "boost::uuids::uuid too small");
3444 if(has_hashes)
3445 if(j->connection_id == connection_id && (all || j->blocks.size() == 0))
3446 if(i != blocks.end() && is_blockchain_placeholder(*i))
3447 if(live_connections.find(j->connection_id) == live_connections.end() && j->blocks.size() == 0)
3448 if(i->start_block_height == start_block_height)
3449 if(hashes)
3450 if(j->connection_id == connection_id && j->start_block_height <= start_block_height)
3451 if(h > height)
3452 if(blocks.empty())
3453 if(h == hash)
3454 if(last_block_height < first_block_height || max_blocks == 0)
3455 if(span_length == 0)
3456 if(blocks.empty())
3457 if(!is_blockchain_placeholder(*i))
3458 if(i == blocks.end())
3459 if(first_span_height <= current_height + 1)
3460 if(blocks.empty())
3461 if(is_blockchain_placeholder(*i))
3462 if(i == blocks.end())
3463 if(!i->blocks.empty())
3464 if(i->start_block_height == start_height && i->connection_id == connection_id)
3465 if(blocks.empty())
3466 if(is_blockchain_placeholder(*i))
3467 if(!filled || !i->blocks.empty())
3468 if(blocks.empty())
3469 if(is_blockchain_placeholder(*i))
3470 if(i == blocks.end())
3471 if(i->connection_id != connection_id)
3472 if(blocks.empty())
3473 if(is_blockchain_placeholder(*i))
3474 if(!span.blocks.empty())
3475 if(span.connection_id != connection_id)
3476 if(h > highest_height && span.hashes.size() == span.nblocks)
3477 if(span.connection_id == connection_id)
3478 if(span.blocks.empty())
3479 if(i == speeds.end())
3480 if(i.first == connection_id)
3481 if(i.second > best_rate)
3482 if(conn_rate <= 0)
3483 if(best_rate == 0)
3484 if(!include_blockchain_placeholder && i != blocks.end() && is_blockchain_placeholder(*i))
3485 if(!f(*i++))
3486 if(!f(*i++))
3487 if(delay > 0)
3488 if(!m_p2p)
3489 if(p2p)
3490 if(context.m_state == cryptonote_connection_context::state_synchronizing)
3491 else if(context.m_state == cryptonote_connection_context::state_standby)
3492 if(connection_time > 1)
3493 if(cntxt.m_remote_address.get_type_id() == epee::net_utils::ipv4_network_address::ID)
3494 if(connection_time == 0)
3495 if(context.m_state == cryptonote_connection_context::state_before_handshake && !is_inital)
3496 if(context.m_state == cryptonote_connection_context::state_synchronizing)
3497 if(hshd.current_height > 0)
3498 if(version >= 6 && version != hshd.top_version)
3499 if(version < hshd.top_version && version == m_core.get_ideal_hard_fork_version())
3500 if(target == 0)
3501 if(m_core.have_block(hshd.top_id))
3502 if(is_inital && target == m_core.get_current_blockchain_height())
3503 if(hshd.current_height > target)
3504 if(hshd.current_height >= m_core.get_current_blockchain_height() + 5) // don't switch to unsafe mode just for a few blocks
3505 if(context.m_state != cryptonote_connection_context::state_normal)
3506 if(!is_synchronized()) // can happen if a peer connection goes to normal but another thread still hasn't finished adding queued blocks
3507 if(tvc.m_verifivation_failed)
3508 if(!m_core.cleanup_handle_incoming_blocks(true))
3509 if(bvc.m_verifivation_failed)
3510 if(bvc.m_added_to_main_chain)
3511 else if(bvc.m_marked_as_orphaned)
3512 if(context.m_state != cryptonote_connection_context::state_normal)
3513 if(!is_synchronized()) // can happen if a peer connection goes to normal but another thread still hasn't finished adding queued blocks
3514 if(parse_and_validate_block_from_blob(arg.b.block, new_block))
3515 if(!context.m_requested_objects.empty())
3516 if(context.m_requested_objects.size() != arg.b.txs.size())
3517 if(parse_and_validate_tx_from_blob(tx_blob, tx))
3518 if(!get_transaction_hash(tx, tx_hash))
3519 if(!context.m_requested_objects.empty())
3520 if(req_tx_it == context.m_requested_objects.end())
3521 if(!m_core.pool_has_tx(tx_hash))
3522 if(!m_core.handle_incoming_tx(tx_blob, tvc, true, true, false) || tvc.m_verifivation_failed)
3523 if(context.m_requested_objects.size())
3524 if(m_core.get_pool_transaction(tx_hash, txblob))
3525 if(m_core.get_transactions(tx_ids, txes, missing) && missing.empty())
3526 if(txes.size() == 1)
3527 if(!need_tx_indices.empty()) // drats, we don't have everything..
3528 if(!m_core.cleanup_handle_incoming_blocks(true))
3529 if(bvc.m_verifivation_failed)
3530 if(bvc.m_added_to_main_chain)
3531 else if(bvc.m_marked_as_orphaned)
3532 if(!m_core.get_block_by_hash(arg.block_hash, b))
3533 if(tx_idx < b.tx_hashes.size())
3534 if(!m_core.get_transactions(txids, txs, missed))
3535 if(!missed.empty() || txs.size() != txids.size())
3536 if(context.m_state != cryptonote_connection_context::state_normal)
3537 if(!is_synchronized())
3538 if(tvc.m_verifivation_failed)
3539 if(tvc.m_should_be_relayed)
3540 if(arg.txs.size())
3541 if(!m_core.handle_get_objects(arg, rsp, context))
3542 //handler_response_blocks_now(sizeof(rsp)); // XXX
3543 if(m_avg_buffer.empty())
3544 size += sizeof(element.data);
3545 size += sizeof(arg.current_blockchain_height);
3546 if(context.m_last_response_height > arg.current_blockchain_height)
3547 if(context.m_remote_blockchain_height > m_core.get_target_blockchain_height())
3548 if(m_stopping)
3549 if(!parse_and_validate_block_from_blob(block_entry.block, b))
3550 if(b.miner_tx.vin.size() != 1 || b.miner_tx.vin.front().type() != typeid(txin_gen))
3551 if(start_height == std::numeric_limits<uint64_t>::max())
3552 if(req_it == context.m_requested_objects.end())
3553 if(b.tx_hashes.size() != block_entry.txs.size())
3554 if(context.m_requested_objects.size())
3555 if(m_core.have_block(last_block_hash))
3556 if(!m_core.get_test_drop_download() || !m_core.get_test_drop_download_height())
3557 if(!sync.owns_lock())
3558 if(!m_block_queue.get_next_span(start_height, blocks, span_connection_id))
3559 if(blocks.empty())
3560 if(!parse_and_validate_block_from_blob(blocks.front().block, new_block))
3561 if(!parent_known)
3562 if(!parent_requested)
3563 if(m_stopping)
3564 if(tvc.size() != block_entry.txs.size())
3565 if(tvc[i].m_verifivation_failed)
3566 if(!m_p2p->for_connection(span_connection_id, [&](cryptonote_connection_context &context, nodetool::peerid_type peer_id, uint32_t f) -> bool {
3567 if(!m_core.cleanup_handle_incoming_blocks())
3568 if(bvc.m_verifivation_failed)
3569 if(!m_p2p->for_connection(span_connection_id, [&](cryptonote_connection_context &context, nodetool::peerid_type peer_id, uint32_t f) -> bool {
3570 if(!m_core.cleanup_handle_incoming_blocks())
3571 if(bvc.m_marked_as_orphaned)
3572 if(!m_p2p->for_connection(span_connection_id, [&](cryptonote_connection_context &context, nodetool::peerid_type peer_id, uint32_t f) -> bool {
3573 if(!m_core.cleanup_handle_incoming_blocks())
3574 if(!m_core.cleanup_handle_incoming_blocks())
3575 if(m_core.get_current_blockchain_height() > previous_height)
3576 if(ELPP->vRegistry()->allowed(el::Level::Info, "sync-info"))
3577 if(ELPP->vRegistry()->allowed(el::Level::Debug, "sync-info"))
3578 if(should_download_next_span(context))
3579 if(!request_missing_objects(context, true, force_next_span))
3580 if(context.m_state == cryptonote_connection_context::state_synchronizing || context.m_state == cryptonote_connection_context::state_before_handshake)
3581 if(dt.total_microseconds() > threshold)
3582 if(!m_core.find_blockchain_supplement(arg.block_ids, r))
3583 if(span.second > 0)
3584 if(span.second == 0)
3585 if(!m_block_queue.get_next_span(height, bcel, span_connection_id, true))
3586 if(height > m_core.get_current_blockchain_height())
3587 if(span_connection_id == context.m_connection_id)
3588 if(span_speed < .25 && speed > .75f)
3589 if(speed == 1.0f && span_speed != 1.0f)
3590 if((now - request_time).total_microseconds() > REQUEST_NEXT_SCHEDULED_SPAN_THRESHOLD)
3591 if(!force_next_span)
3592 if(nblocks < BLOCK_QUEUE_NBLOCKS_THRESHOLD || size < BLOCK_QUEUE_SIZE_THRESHOLD)
3593 if(!first)
3594 if(sync.owns_lock())
3595 if(should_download_next_span(context))
3596 if(first)
3597 if(m_block_queue.has_next_span(context.m_connection_id, filled) && !filled)
3598 if(m_stopping)
3599 if(context.m_needed_objects.size() || force_next_span)
3600 if(span.second > 0)
3601 if(first_block_height_needed < first_block_height_known || last_block_height_needed > last_block_height_known)
3602 if(force_next_span)
3603 if(span.second == 0)
3604 if(span.second > 0)
3605 if(span.second == 0)
3606 if(context.m_last_response_height + 1 < context.m_needed_objects.size())
3607 if(context.m_needed_objects.size() == 1)
3608 if(span.second == 0 && !force_next_span)
3609 if(span.second > 0)
3610 if(i != context.m_needed_objects.end())
3611 if(span.second > 0)
3612 if(!is_next)
3613 if(skip > context.m_needed_objects.size())
3614 if(context.m_needed_objects.size() < span.second)
3615 if(context.m_last_response_height < context.m_remote_blockchain_height - 1)
3616 if(!start_from_current_chain)
3617 if(context.m_last_known_hash != crypto::null_hash && r.block_ids.front() != context.m_last_known_hash)
3618 if(context.m_remote_blockchain_height >= m_core.get_target_blockchain_height())
3619 if(m_core.get_current_blockchain_height() >= m_core.get_target_blockchain_height())
3620 if(m_synchronized.compare_exchange_strong(val_expected, true))
3621 if(context.m_state == cryptonote_connection_context::state_synchronizing)
3622 if(!arg.m_block_ids.size())
3623 if(arg.total_height < arg.m_block_ids.size() || arg.start_height > arg.total_height - arg.m_block_ids.size())
3624 if(context.m_last_response_height > context.m_remote_blockchain_height)
3625 if(n_use_blocks + HASH_OF_HASHES_STEP <= arg.m_block_ids.size())
3626 if(++added == n_use_blocks)
3627 if(!request_missing_objects(context, false))
3628 if(arg.total_height > m_core.get_target_blockchain_height())
3629 if(peer_id && exclude_context.m_connection_id != context.m_connection_id)
3630 if(m_core.fluffy_blocks_enabled() && (support_flags & P2P_SUPPORT_FLAG_FLUFFY_BLOCKS))
3631 if(add_fail)
3632 if(cntxt.m_state >= cryptonote_connection_context::state_synchronizing && cntxt.m_connection_id != context.m_connection_id)
3633 if(target < previous_target)
3634if(PER_BLOCK_CHECKPOINT)
3635 if(APPLE)
3636 endif()
3637endif()
3638 if(!args.empty())
3639 if(!args.empty())
3640 if(!args.empty())
3641 if(!args.empty())
3642 if(!args.empty())
3643 if(!args.empty())
3644 if(!args.empty())
3645 if(!args.empty())
3646 if(!args.size())
3647 if(!epee::string_tools::get_xtype_from_string(start_index, args[0]))
3648 if(args.size() > 1 && !epee::string_tools::get_xtype_from_string(end_index, args[1]))
3649 if(args.size() > 1)
3650 if(args.empty())
3651 if(epee::string_tools::get_xtype_from_string(l, args[0]))
3652 if(4 < l)
3653 if(!args.empty())
3654 if(args.empty())
3655 if(parse_hash256(arg, block_hash))
3656 if(args[i] == "+hex")
3657 else if(args[i] == "+json")
3658 if(args.empty())
3659 if(parse_hash256(str_hash, tx_hash))
3660 if(args.empty())
3661 if(parse_hash256(str, hash))
3662 memcpy(&ki, &hash, sizeof(ki));
3663 if(!args.empty())
3664 if(!args.empty())
3665 if(!args.empty())
3666 if(!args.size())
3667 if(!cryptonote::get_account_address_from_str(cryptonote::MAINNET, info, args.front()))
3668 if(!cryptonote::get_account_address_from_str(cryptonote::TESTNET, info, args.front()))
3669 if(!cryptonote::get_account_address_from_str(cryptonote::STAGENET, info, args.front()))
3670 if(info.is_subaddress)
3671 if(args.front() == cryptonote::common_config::DEV_FUND_ADDRESS)
3672 if(nettype != cryptonote::MAINNET)
3673 if(args.size() > 4)
3674 if(args.size() == 4)
3675 if(args.size() >= 3)
3676 if(args.size() >= 2)
3677 if(!args.empty())
3678 if(!args.empty())
3679 if(!args.empty())
3680 if(args.size() > 1)
3681 if(args.size() == 0)
3682 if(args.size() > 1)
3683 if(args.size() == 0)
3684 if(args.size() > 1)
3685 if(args.size() == 0)
3686 if(args.empty())
3687 if(args.empty())
3688 if(args.size() == 0)
3689 else if(args.size() == 1)
3690 if(version <= 0 || version > 255)
3691 if(!args.empty())
3692 if(args.size() != 1 && args.size() != 2)
3693 if(args.size() > 1)
3694 if(seconds == 0)
3695 if(args.size() != 1)
3696 if(args.size() > 1)
3697 if(args.size() == 1)
3698 if(!parse_hash256(args[0], hash))
3699 if(args[n][0] == '@')
3700 else if(n_raw == 0)
3701 else if(n_raw == 1)
3702 if(!args.size())
3703 if(!epee::string_tools::get_xtype_from_string(height, args[0]))
3704 if(args.size() > 1 && !epee::string_tools::get_xtype_from_string(count, args[1]))
3705 if(args.size())
3706 if(args.size() != 1)
3707 if(!epee::string_tools::get_xtype_from_string(nblocks, args[0]) || nblocks == 0)
3708 if(args.size() != 1)
3709 if(args.size() != 1)
3710 if(!parse_hash256(args[0], hash))
3711 if(args.size() != 0)
3712 if(!result)
3713 if(m_is_rpc)
3714 if(m_is_rpc)
3715 if(args.empty())
3716 if(documentation.first.empty())
3717 if((mainnet && port != std::to_string(cryptonote::config<cryptonote::MAINNET>::P2P_DEFAULT_PORT)) || (testnet && port != std::to_string(cryptonote::config<cryptonote::TESTNET>::P2P_DEFAULT_PORT)) || (stagenet && port != std::to_string(cryptonote::config<cryptonote::STAGENET>::P2P_DEFAULT_PORT)))
3718 if(!m_core.init(m_vm_HACK, config_subdir.empty() ? NULL : config_subdir.c_str()))
3719 if(!command_line::is_arg_defaulted(vm, restricted_rpc_port_arg))
3720 if(this != &other)
3721 if(this != &other)
3722 if(nullptr == mp_internals)
3723 if(!mp_internals->core.run())
3724 if(interactive && mp_internals->rpcs.size())
3725 if(!zmq_server.addTCPSocket(zmq_rpc_bind_address, zmq_rpc_bind_port))
3726 if(rpc_commands)
3727 if(rpc_commands)
3728 if(nullptr == mp_internals)
3729 if(nullptr == mp_internals)
3730 if(command_line::get_windows_args(argptrs))
3731 if(!ok)
3732 if(command_line::get_arg(vm, command_line::arg_help))
3733 if(command_line::get_arg(vm, command_line::arg_version))
3734 if(command_line::get_arg(vm, daemon_args::arg_os_version))
3735 if(bf::exists(config_path, ec))
3736 else if(!command_line::is_arg_defaulted(vm, daemon_args::arg_config_file))
3737 if(testnet && stagenet)
3738 if(!cryptonote::blockchain_valid_db_type(db_type))
3739 if(!command_line::is_arg_defaulted(vm, daemon_args::arg_log_file))
3740 if(!command_line::is_arg_defaulted(vm, daemon_args::arg_log_level))
3741 if(command.size())
3742 if(!epee::string_tools::get_ip_int32_from_string(rpc_ip, rpc_ip_str))
3743 if(!epee::string_tools::get_xtype_from_string(rpc_port, rpc_port_str))
3744 if(command_line::has_arg(vm, arg.rpc_login))
3745 if(!login)
3746 if(rpc_commands.process_command_vec(command))
3747 if(!command_line::is_arg_defaulted(vm, daemon_args::arg_max_concurrency))
3748 if(!m_server.init(vm))
3749 if(!m_protocol.init(vm))
3750 if(!m_server.init(vm, restricted, nettype, port))
3751 if(!m_server.run(2, false))
3752 if(t == now)
3753 if(dt < 90)
3754 else if(dt < 90 * 60)
3755 else if(dt < 36 * 3600)
3756 snprintf(buffer, sizeof(buffer), "%02u:%02u:%02u", hours, minutes, seconds);
3757 snprintf(buffer, sizeof(buffer), "%02u:%02u:%02u", hours, minutes, seconds);
3758 if(status == CORE_RPC_STATUS_OK)
3759 if(is_rpc)
3760 if(login)
3761 if(rpc_server == NULL)
3762 if(m_rpc_client != NULL)
3763 if(m_is_rpc)
3764 if(!m_rpc_client->rpc_request(req, res, "/get_peer_list", failure_message.c_str()))
3765 if(!m_rpc_server->on_get_peer_list(req, res) || res.status != CORE_RPC_STATUS_OK)
3766 if(m_is_rpc)
3767 if(!m_rpc_client->rpc_request(req, res, "/get_peer_list", failure_message.c_str()))
3768 if(!m_rpc_server->on_get_peer_list(req, res) || res.status != CORE_RPC_STATUS_OK)
3769 if(m_is_rpc)
3770 if(!m_rpc_client->rpc_request(req, res, "/save_bc", fail_message.c_str()))
3771 if(!m_rpc_server->on_save_bc(req, res) || res.status != CORE_RPC_STATUS_OK)
3772 if(m_is_rpc)
3773 if(!m_rpc_client->rpc_request(req, res, "/set_log_hash_rate", fail_message.c_str()))
3774 if(!m_rpc_server->on_set_log_hash_rate(req, res) || res.status != CORE_RPC_STATUS_OK)
3775 if(m_is_rpc)
3776 if(!m_rpc_client->rpc_request(req, res, "/set_log_hash_rate", fail_message.c_str()))
3777 if(!m_rpc_server->on_set_log_hash_rate(req, res) || res.status != CORE_RPC_STATUS_OK)
3778 if(m_is_rpc)
3779 if(!m_rpc_client->rpc_request(req, res, "/getinfo", fail_message.c_str()))
3780 if(!m_rpc_server->on_get_info(req, res) || res.status != CORE_RPC_STATUS_OK)
3781 if(hr > 1e9)
3782 if(hr > 1e6)
3783 if(hr > 1e3)
3784 if(t == now)
3785 if(t > now)
3786 if(dblocks <= 30)
3787 if(dblocks <= blocks_per_day / 2)
3788 if(dblocks <= blocks_per_day * 30)
3789 if(height < target_height && pc > 99.9f)
3790 if(m_is_rpc)
3791 if(!m_rpc_client->rpc_request(ireq, ires, "/getinfo", fail_message.c_str()))
3792 if(!m_rpc_client->json_rpc_request(hfreq, hfres, "hard_fork_info", fail_message.c_str()))
3793 if(!m_rpc_server->on_get_info(ireq, ires) || ires.status != CORE_RPC_STATUS_OK)
3794 if(!m_rpc_server->on_hard_fork_info(hfreq, hfres, error_resp) || hfres.status != CORE_RPC_STATUS_OK)
3795 if(!m_rpc_server->on_mining_status(mreq, mres))
3796 if(mres.status == CORE_RPC_STATUS_BUSY)
3797 else if(mres.status != CORE_RPC_STATUS_OK)
3798 if(ires.was_bootstrap_ever_used)
3799 if(ires.untrusted)
3800 if(m_is_rpc)
3801 if(!m_rpc_client->json_rpc_request(req, res, "get_connections", fail_message.c_str()))
3802 if(!m_rpc_server->on_get_connections(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
3803 if(m_is_rpc)
3804 if(!m_rpc_client->json_rpc_request(req, res, "getblockheadersrange", fail_message.c_str()))
3805 if(!m_rpc_server->on_get_block_headers_range(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
3806 if(!first)
3807 if(m_is_rpc)
3808 if(!m_rpc_client->rpc_request(req, res, "/set_log_level", fail_message.c_str()))
3809 if(!m_rpc_server->on_set_log_level(req, res) || res.status != CORE_RPC_STATUS_OK)
3810 if(m_is_rpc)
3811 if(!m_rpc_client->rpc_request(req, res, "/set_log_categories", fail_message.c_str()))
3812 if(!m_rpc_server->on_set_log_categories(req, res) || res.status != CORE_RPC_STATUS_OK)
3813 if(m_is_rpc)
3814 if(!m_rpc_client->rpc_request(req, res, "/getheight", fail_message.c_str()))
3815 if(!m_rpc_server->on_get_height(req, res) || res.status != CORE_RPC_STATUS_OK)
3816 if(m_is_rpc)
3817 if(!m_rpc_client->json_rpc_request(req, res, "getblock", fail_message.c_str()))
3818 if(!m_rpc_server->on_get_block(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
3819 if(m_is_rpc)
3820 if(!m_rpc_client->json_rpc_request(req, res, "getblock", fail_message.c_str()))
3821 if(!m_rpc_server->on_get_block(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
3822 if(m_is_rpc)
3823 if(!m_rpc_client->rpc_request(req, res, "/gettransactions", fail_message.c_str()))
3824 if(!m_rpc_server->on_get_transactions(req, res) || res.status != CORE_RPC_STATUS_OK)
3825 if(1 == res.txs.size() || 1 == res.txs_as_hex.size())
3826 if(1 == res.txs.size())
3827 if(res.txs.front().in_pool)
3828 if(include_hex)
3829 if(include_json)
3830 if(!string_tools::parse_hexstr_to_binbuff(as_hex, blob))
3831 if(!string_tools::parse_hexstr_to_binbuff(as_hex, blob))
3832 else if(!cryptonote::parse_and_validate_tx_from_blob(blob, tx, tx_hash, tx_prefix_hash))
3833 if(m_is_rpc)
3834 if(!m_rpc_client->rpc_request(req, res, "/is_key_image_spent", fail_message.c_str()))
3835 if(!m_rpc_server->on_is_key_image_spent(req, res) || res.status != CORE_RPC_STATUS_OK)
3836 if(1 == res.spent_status.size())
3837 if(m_is_rpc)
3838 if(!m_rpc_client->rpc_request(req, res, "/get_transaction_pool", fail_message.c_str()))
3839 if(!m_rpc_server->on_get_transaction_pool(req, res, false) || res.status != CORE_RPC_STATUS_OK)
3840 if(res.transactions.empty() && res.spent_key_images.empty())
3841 if(!res.transactions.empty())
3842 if(res.spent_key_images.empty())
3843 if(!res.spent_key_images.empty())
3844 if(kinfo.txs_hashes.size() == 1)
3845 else if(kinfo.txs_hashes.size() == 0)
3846 if(res.transactions.empty())
3847 if(m_is_rpc)
3848 if(!m_rpc_client->rpc_request(req, res, "/get_transaction_pool", fail_message.c_str()))
3849 if(!m_rpc_server->on_get_transaction_pool(req, res, false) || res.status != CORE_RPC_STATUS_OK)
3850 if(res.transactions.empty())
3851 if(m_is_rpc)
3852 if(!m_rpc_client->rpc_request(req, res, "/get_transaction_pool_stats", fail_message.c_str()))
3853 if(!m_rpc_client->rpc_request(ireq, ires, "/getinfo", fail_message.c_str()))
3854 if(!m_rpc_server->on_get_transaction_pool_stats(req, res, false) || res.status != CORE_RPC_STATUS_OK)
3855 if(!m_rpc_server->on_get_info(ireq, ires) || ires.status != CORE_RPC_STATUS_OK)
3856 if(res.pool_stats.bytes_total <= full_reward_zone)
3857 if(n_transactions > 1 && res.pool_stats.histo.size())
3858 if(res.pool_stats.histo_98pc)
3859 if(m_is_rpc)
3860 if(m_rpc_client->rpc_request(req, res, "/start_mining", fail_message.c_str()))
3861 if(!m_rpc_server->on_start_mining(req, res) || res.status != CORE_RPC_STATUS_OK)
3862 if(m_is_rpc)
3863 if(!m_rpc_client->rpc_request(req, res, "/stop_mining", fail_message.c_str()))
3864 if(!m_rpc_server->on_stop_mining(req, res) || res.status != CORE_RPC_STATUS_OK)
3865 if(m_is_rpc)
3866 if(!m_rpc_client->rpc_request(req, res, "/stop_daemon", fail_message.c_str()))
3867 if(!m_rpc_server->on_stop_daemon(req, res) || res.status != CORE_RPC_STATUS_OK)
3868 if(!m_is_rpc)
3869 if(daemon_is_alive)
3870 if(m_is_rpc)
3871 if(!m_rpc_client->rpc_request(req, res, "/get_limit", failure_message.c_str()))
3872 if(!m_rpc_server->on_get_limit(req, res) || res.status != CORE_RPC_STATUS_OK)
3873 if(m_is_rpc)
3874 if(!m_rpc_client->rpc_request(req, res, "/set_limit", failure_message.c_str()))
3875 if(!m_rpc_server->on_set_limit(req, res) || res.status != CORE_RPC_STATUS_OK)
3876 if(m_is_rpc)
3877 if(!m_rpc_client->rpc_request(req, res, "/get_limit", failure_message.c_str()))
3878 if(!m_rpc_server->on_get_limit(req, res) || res.status != CORE_RPC_STATUS_OK)
3879 if(m_is_rpc)
3880 if(!m_rpc_client->rpc_request(req, res, "/get_limit", failure_message.c_str()))
3881 if(!m_rpc_server->on_get_limit(req, res) || res.status != CORE_RPC_STATUS_OK)
3882 if(m_is_rpc)
3883 if(!m_rpc_client->rpc_request(req, res, "/out_peers", fail_message.c_str()))
3884 if(!m_rpc_server->on_out_peers(req, res) || res.status != CORE_RPC_STATUS_OK)
3885 if(m_is_rpc)
3886 if(!m_rpc_client->rpc_request(req, res, "/in_peers", fail_message.c_str()))
3887 if(!m_rpc_server->on_in_peers(req, res) || res.status != CORE_RPC_STATUS_OK)
3888 if(m_is_rpc)
3889 if(!m_rpc_client->json_rpc_request(req, res, "hard_fork_info", fail_message.c_str()))
3890 if(!m_rpc_server->on_hard_fork_info(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
3891 if(m_is_rpc)
3892 if(!m_rpc_client->json_rpc_request(req, res, "get_bans", fail_message.c_str()))
3893 if(!m_rpc_server->on_get_bans(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
3894 if(!epee::string_tools::get_ip_int32_from_string(ban.ip, ip))
3895 if(m_is_rpc)
3896 if(!m_rpc_client->json_rpc_request(req, res, "set_bans", fail_message.c_str()))
3897 if(!m_rpc_server->on_set_bans(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
3898 if(!epee::string_tools::get_ip_int32_from_string(ban.ip, ip))
3899 if(m_is_rpc)
3900 if(!m_rpc_client->json_rpc_request(req, res, "set_bans", fail_message.c_str()))
3901 if(!m_rpc_server->on_set_bans(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
3902 if(!txid.empty())
3903 if(m_is_rpc)
3904 if(!m_rpc_client->json_rpc_request(req, res, "flush_txpool", fail_message.c_str()))
3905 if(!m_rpc_server->on_flush_txpool(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
3906 if(m_is_rpc)
3907 if(!m_rpc_client->json_rpc_request(req, res, "get_output_histogram", fail_message.c_str()))
3908 if(!m_rpc_server->on_get_output_histogram(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
3909 if(m_is_rpc)
3910 if(!m_rpc_client->json_rpc_request(req, res, "get_coinbase_tx_sum", fail_message.c_str()))
3911 if(!m_rpc_server->on_get_coinbase_tx_sum(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
3912 if(m_is_rpc)
3913 if(!m_rpc_client->rpc_request(ireq, ires, "/getinfo", fail_message.c_str()))
3914 if(!m_rpc_client->json_rpc_request(req, res, "get_alternate_chains", fail_message.c_str()))
3915 if(!m_rpc_server->on_get_info(ireq, ires) || ires.status != CORE_RPC_STATUS_OK)
3916 if(!m_rpc_server->on_get_alternate_chains(req, res, error_resp))
3917 if(m_is_rpc)
3918 if(!m_rpc_client->rpc_request(ireq, ires, "/getinfo", fail_message.c_str()))
3919 if(!m_rpc_server->on_get_info(ireq, ires) || ires.status != CORE_RPC_STATUS_OK)
3920 if(nblocks > 0)
3921 if(nblocks > ires.height)
3922 if(m_is_rpc)
3923 if(!m_rpc_client->json_rpc_request(bhreq, bhres, "getblockheadersrange", fail_message.c_str()))
3924 if(!m_rpc_server->on_get_block_headers_range(bhreq, bhres, error_resp) || bhres.status != CORE_RPC_STATUS_OK)
3925 static_assert(sizeof(bhr.major_version) == 1, "major_version expected to be uint8_t");
3926 static_assert(sizeof(bhr.minor_version) == 1, "major_version expected to be uint8_t");
3927 if(major_versions[n])
3928 if(minor_versions[n])
3929 if(m_is_rpc)
3930 if(!m_rpc_client->rpc_request(req, res, "/update", fail_message.c_str()))
3931 if(!m_rpc_server->on_update(req, res) || res.status != CORE_RPC_STATUS_OK)
3932 if(!res.update)
3933 if(command == "check")
3934 if(!res.path.empty())
3935 if(command == "download")
3936 if(m_is_rpc)
3937 if(!m_rpc_client->json_rpc_request(req, res, "relay_tx", fail_message.c_str()))
3938 if(!m_rpc_server->on_relay_tx(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
3939 if(m_is_rpc)
3940 if(!m_rpc_client->json_rpc_request(req, res, "sync_info", fail_message.c_str()))
3941 if(!m_rpc_server->on_sync_info(req, res, error_resp) || res.status != CORE_RPC_STATUS_OK)
3942 if(s.rate > 0.0f && s.connection_id == p.info.connection_id)
3943 if(s.size == 0)
3944if(MSVC OR MINGW)
3945endif()
3946if(MSVC OR MINGW)
3947endif()
3948if(CMAKE_BUILD_TYPE STREQUAL "Debug")
3949endif()
3950 if(command_line::has_arg(vm, arg_detach))
3951 if(command_line::has_arg(vm, arg_pidfile))
3952 else if(command_line::has_arg(vm, arg_non_interactive))
3953 if(!pidfile.empty())
3954 if(!pidrifs.fail())
3955 if(pidrifs >> oldpid && oldpid > 1 && kill(oldpid, 0) == 0)
3956 if(pidofs.fail())
3957 if(pid_t pid = ::fork())
3958 if(pid > 0)
3959 if(pid_t pid = ::fork())
3960 if(pid > 0)
3961 if(!pidofs.fail())
3962 if(open("/dev/null", O_RDONLY) < 0)
3963 if(!tmpdir)
3964 if(open(output.c_str(), flags, mode) < 0)
3965 if(dup(1) < 0)
3966 if(!windows::check_admin(admin))
3967 if(admin)
3968 if(command_line::has_arg(vm, arg_is_service))
3969 if(command_line::has_arg(vm, cryptonote::arg_data_dir))
3970 if(command_line::has_arg(vm, arg_is_service))
3971 else if(command_line::has_arg(vm, arg_install_service))
3972 if(windows::ensure_admin(arguments))
3973 else if(command_line::has_arg(vm, arg_uninstall_service))
3974 if(windows::ensure_admin(arguments))
3975 else if(command_line::has_arg(vm, arg_start_service))
3976 if(windows::ensure_admin(arguments))
3977 else if(command_line::has_arg(vm, arg_stop_service))
3978 if(windows::ensure_admin(arguments))
3979 if(nullptr == p_error_text)
3980 info.cbSize = sizeof(info);
3981 if(!ShellExecuteEx(&info))
3982 if(!AllocateAndInitializeSid(
3983 if(!CheckTokenMembership(
3984 if(!check_admin(admin))
3985 if(admin)
3986 if(p_manager == nullptr)
3987 if(p_service == nullptr)
3988 if(p_manager == nullptr)
3989 if(p_service == nullptr)
3990 if(!StartService(
3991 if(p_manager == nullptr)
3992 if(p_service == nullptr)
3993 if(!ControlService(p_service.get(), SERVICE_CONTROL_STOP, &status))
3994 if(p_manager == nullptr)
3995 if(p_service == nullptr)
3996 if(!DeleteService(p_service.get()))
3997 if(this != &other)
3998 if(status == SERVICE_RUNNING)
3999 else if(status == SERVICE_STOP_PENDING)
4000 if(m_status_handle == nullptr)
4001 if(typeid(cryptonote::tx_extra_padding) == fields[n].type())
4002 else if(typeid(cryptonote::tx_extra_pub_key) == fields[n].type())
4003 else if(typeid(cryptonote::tx_extra_nonce) == fields[n].type())
4004 else if(typeid(cryptonote::tx_extra_merge_mining_tag) == fields[n].type())
4005 else if(typeid(cryptonote::tx_extra_mysterious_minergate) == fields[n].type())
4006 if(!r)
4007 if(command_line::get_arg(vm, command_line::arg_help))
4008 if(input.empty())
4009 if(command_line::has_arg(vm, arg_output_file))
4010 if(!dir_path.empty())
4011 if(boost::filesystem::exists(dir_path))
4012 if(!boost::filesystem::is_directory(dir_path))
4013 if(!boost::filesystem::create_directory(dir_path))
4014 if(raw_data_file->fail())
4015 if(!epee::string_tools::parse_hexstr_to_binbuff(input, blob))
4016 if(!epee::string_tools::parse_hexstr_to_binbuff(input, blob))
4017 if(cryptonote::parse_and_validate_block_from_blob(blob, block))
4018 else if(cryptonote::parse_and_validate_tx_from_blob(blob, tx))
4019 if(!parsed)
4020 if(!fields.empty())
4021 else if(cryptonote::parse_tx_extra(std::vector<uint8_t>(blob.begin(), blob.end()), fields) && !fields.empty())
4022 if(output->fail())
4023 if(raw_data_file)
4024#define SL(type) sl.add(#type, sizeof(type))
4025if(PCSC_FOUND)
4026endif()
4027if(PCSC_FOUND)
4028endif()
4029if(PER_BLOCK_CHECKPOINT)
4030endif()
4031 if(device == devices.registry.end())
4032 reset_mode(hw::device &dev) : hwref(dev) {}
4033 tools::scrubbed_arr<char, sizeof(view_key) + sizeof(spend_key) + 1> data;
4034 tools::scrubbed_arr<char, sizeof(view_key) + sizeof(spend_key) + 1> data;
4035 memcpy(data.data(), &view_key, sizeof(view_key));
4036 memcpy(data.data() + sizeof(view_key), &spend_key, sizeof(spend_key));
4037 memcpy(data.data() + sizeof(view_key), &spend_key, sizeof(spend_key));
4038 data[sizeof(data) - 1] = CHACHA8_KEY_TAIL;
4039 crypto::generate_chacha_key(data.data(), sizeof(data), key);
4040 if(index.is_zero())
4041 if(index.is_zero())
4042 if(index.is_zero())
4043 char data[sizeof(prefix) + sizeof(crypto::secret_key) + 2 * sizeof(uint32_t)];
4044 char data[sizeof(prefix) + sizeof(crypto::secret_key) + 2 * sizeof(uint32_t)];
4045 char data[sizeof(prefix) + sizeof(crypto::secret_key) + 2 * sizeof(uint32_t)];
4046 memcpy(data, prefix, sizeof(prefix));
4047 memcpy(data + sizeof(prefix), &a, sizeof(crypto::secret_key));
4048 memcpy(data + sizeof(prefix), &a, sizeof(crypto::secret_key));
4049 memcpy(data + sizeof(prefix) + sizeof(crypto::secret_key), &idx, sizeof(uint32_t));
4050 memcpy(data + sizeof(prefix) + sizeof(crypto::secret_key), &idx, sizeof(uint32_t));
4051 memcpy(data + sizeof(prefix) + sizeof(crypto::secret_key), &idx, sizeof(uint32_t));
4052 memcpy(data + sizeof(prefix) + sizeof(crypto::secret_key) + sizeof(uint32_t), &idx, sizeof(uint32_t));
4053 memcpy(data + sizeof(prefix) + sizeof(crypto::secret_key) + sizeof(uint32_t), &idx, sizeof(uint32_t));
4054 memcpy(data + sizeof(prefix) + sizeof(crypto::secret_key) + sizeof(uint32_t), &idx, sizeof(uint32_t));
4055 memcpy(data + sizeof(prefix) + sizeof(crypto::secret_key) + sizeof(uint32_t), &idx, sizeof(uint32_t));
4056 crypto::hash_to_scalar(data, sizeof(data), m);
4057 if(!generate_key_derivation(public_key, secret_key, derivation))
4058 if(!default_core_device)
4059 sprintf_s(out, sizeof(out), "0x%08lX", rv);
4060 if(ABP[i].Pout == P)
4061 return !memcmp(&d0, &d1, sizeof(d0));
4062 if(apdu_verbose)
4063 sprintf(strbuffer, "%.02x %.02x %.02x %.02x %.02x ",
4064 buffer_to_str(strbuffer + strlen(strbuffer), sizeof(strbuffer), (char *)(this->buffer_send + 5), this->length_send - 5);
4065 if(apdu_verbose)
4066 sprintf(strbuffer, "%.02x%.02x ",
4067 buffer_to_str(strbuffer + strlen(strbuffer), sizeof(strbuffer), (char *)(this->buffer_recv), this->length_recv - 2);
4068 if(r)
4069 if(this->full_name.empty() || (this->hCard == 0))
4070 if(this->hContext)
4071 if(rv != SCARD_S_SUCCESS)
4072 mszReaders = (LPSTR)calloc(dwReaders, sizeof(char));
4073 if(rv == SCARD_S_SUCCESS)
4074 if((strncmp(prefix, p, strlen(prefix)) == 0))
4075 if((rv = SCardConnect(this->hContext,
4076 dwAtrLen = sizeof(pbAtr);
4077 if((rv = SCardStatus(this->hCard, NULL, &dwReaderLen, &dwState, &dwProtocol, pbAtr, &dwAtrLen)) != SCARD_S_SUCCESS)
4078 if(mszReaders)
4079 if(rv != SCARD_S_SUCCESS)
4080 if(hCard)
4081 if(this->hCard)
4082 if(is_fake_view_key(this->viewkey))
4083 crypto::generate_chacha_key_prehashed(&prekey[0], sizeof(prekey), key);
4084 if((this->mode == TRANSACTION_PARSE) && has_view_key)
4085 if((this->mode == TRANSACTION_PARSE) && has_view_key)
4086 if(index.is_zero())
4087 static_assert(sizeof(cryptonote::subaddress_index) == 8, "cryptonote::subaddress_index shall be 8 bytes length");
4088 memmove(this->buffer_send + offset, &index, sizeof(cryptonote::subaddress_index));
4089 if(index.is_zero())
4090 static_assert(sizeof(cryptonote::subaddress_index) == 8, "cryptonote::subaddress_index shall be 8 bytes length");
4091 memmove(this->buffer_send + offset, &index, sizeof(cryptonote::subaddress_index));
4092 static_assert(sizeof(cryptonote::subaddress_index) == 8, "cryptonote::subaddress_index shall be 8 bytes length");
4093 memmove(this->buffer_send + offset, &index, sizeof(cryptonote::subaddress_index));
4094 if(recover)
4095 if((this->mode == TRANSACTION_PARSE) && has_view_key)
4096 if((this->mode == TRANSACTION_PARSE) && has_view_key)
4097 if(derivation == main_derivation)
4098 if(derivation == additional_derivations[n])
4099 if(!rc)
4100 if(inputs_size)
4101 if((type == rct::RCTTypeSimple) || (type == rct::RCTTypeSimpleBulletproof))
4102 if(!found)
4103 if(found)
4104 if(j == (dsRows - 1))
4105 if(!legder_device)
4106 sprintf(to_buff + 2 * i, "%.02x", (unsigned char)buff[i]);
4107 buffer_to_str(logstr, sizeof(logstr), buff, len);
4108 if(len == 32)
4109 if(buf[i] != 0)
4110 if(i == 32)
4111 if(buf[i] != (char)0xff)
4112 if(i == 32)
4113 if(crypted)
4114 if(memcmp(h, dd, len))
4115#define TRACK printf("file %s:%d\n", __FILE__, __LINE__)
4116 if(!tools::wallet2::verify_multisig_info(wallets[n]->get_multisig_info(), sk[n], pk[n]))
4117 if(k != n)
4118 if(!extra_info[0].empty())
4119 if(!tools::wallet2::verify_extra_multisig_info(extra_info[n], pkeys, signers[n]))
4120 if(!wallets[n]->finalize_multisig(pwd_container->password(), pkeys, signers))
4121 if(command_line::get_windows_args(argptrs))
4122 if(!vm)
4123 if(testnet && stagenet)
4124 if(command_line::has_arg(*vm, arg_scheme))
4125 if(sscanf(command_line::get_arg(*vm, arg_scheme).c_str(), "%u/%u", &threshold, &total) != 2)
4126 if(sscanf(command_line::get_arg(*vm, arg_scheme).c_str(), "%u/%u", &threshold, &total) != 2)
4127 if(!(*vm)["threshold"].defaulted())
4128 if(threshold)
4129 if(!(*vm)["participants"].defaulted())
4130 if(total)
4131 if(threshold <= 1 || threshold > total)
4132 if(!(*vm)["filename-base"].defaulted() && !command_line::get_arg(*vm, arg_filename_base).empty())
4133 if(threshold != total - 1 && threshold != total)
4134 if(!generate_multisig(threshold, total, basename, testnet ? TESTNET : stagenet ? STAGENET : MAINNET, create_address_file))
4135 if(word_map.count(word) > 0)
4136 if(language_instances.back().score > 0)
4137 if(trimmed_word_map.count(trimmed_word) > 0)
4138 if((*it)->get_language_name() == name)
4139 if(lng->get_language_name() == input)
4140 if(lng->get_english_language_name() == input)
4141 boost::split(seed, words, boost::is_any_of(" "), boost::token_compress_on);
4142 if(seed.size() != 14 && seed.size() != 12)
4143 if(!find_seed_language(seed, &language))
4144 if(!match_words(*language, seed, matched_indices))
4145 if(!(val % word_list_length == w1))
4146 if(seed.size() == 14)
4147 if(calc_crc12(dst, extra) != val)
4148 if(b->get_language_name() == language_name || b->get_english_language_name() == language_name)
4149 if(language == nullptr)
4150 if(it->length() > unique_prefix_length)
4151 if(seed.empty())
4152 boost::split(seed, words, boost::is_any_of(" "), boost::token_compress_on);
4153 if(len % 4)
4154 if(seed.size() == 26) //Last word is a funky sumo attempt at a second checksum, ignore it
4155 if(len)
4156 if(seed.size() != expected / 2 && seed.size() != expected && seed.size() != expected + 1)
4157 if(!find_seed_language(seed, &language))
4158 if(!match_words(*language, seed, matched_indices))
4159 if(has_checksum)
4160 if(!checksum_test(seed, language->get_unique_prefix_length()))
4161 if(!(val % word_list_length == w1))
4162 if(!words_to_bytes(words, s, sizeof(dst), language_name))
4163 if(!words_to_bytes(words, s, sizeof(dst), language_name))
4164 if(s.size() != sizeof(dst))
4165 if(s.size() != sizeof(dst))
4166 if(len % 4 != 0 || len == 0)
4167 if(b->get_language_name() == language_name || b->get_english_language_name() == language_name)
4168 if(language == nullptr)
4169 return bytes_to_words(src.data, sizeof(src), words, language_name);
4170 if(word_list.size() != 1626)
4171 if((*it).size() < unique_prefix_length)
4172 if(flags & ALLOW_SHORT_WORDS)
4173 if(it->length() > unique_prefix_length)
4174 if(trimmed_word_map.find(trimmed) != trimmed_word_map.end())
4175 if(flags & ALLOW_DUPLICATE_PREFIXES)
4176 if(multisig_key_index >= keys.m_multisig_keys.size())
4177 if(!cryptonote::generate_key_image_helper(keys, subaddresses, out_key, tx_public_key, additional_tx_public_keys, real_output_index, in_ephemeral, ki, keys.get_device()))
4178 if(!r)
4179 if(used.find(pki) == used.end())
4180 if(ver == 0)
4181 if(mPeersLoggerThread != nullptr)
4182 if(!p2p_data.fail())
4183 if(!p2p_data.fail())
4184 return f(cntx, cntx.peer_id, cntx.support_flags);
4185 return f(cntx, cntx.peer_id, cntx.support_flags);
4186 if(it == m_blocked_hosts.end())
4187 if(time(nullptr) >= it->second)
4188 if(cntxt.m_remote_address.is_same_host(addr))
4189 if(i == m_blocked_hosts.end())
4190 if(fails > P2P_IP_FAILS_BEFORE_BLOCK)
4191 if(command_line::has_arg(vm, arg_p2p_add_peer))
4192 if(command_line::has_arg(vm, arg_p2p_add_exclusive_node))
4193 if(!parse_peers_and_add_to_container(vm, arg_p2p_add_exclusive_node, m_exclusive_peers))
4194 if(command_line::has_arg(vm, arg_p2p_add_priority_node))
4195 if(!parse_peers_and_add_to_container(vm, arg_p2p_add_priority_node, m_priority_peers))
4196 if(command_line::has_arg(vm, arg_p2p_seed_node))
4197 if(!parse_peers_and_add_to_container(vm, arg_p2p_seed_node, m_seed_nodes))
4198 if(command_line::has_arg(vm, arg_p2p_hide_my_port))
4199 if(!set_max_out_peers(vm, command_line::get_arg(vm, arg_out_peers)))
4200 if(!set_max_in_peers(vm, command_line::get_arg(vm, arg_in_peers)))
4201 if(!set_tos_flag(vm, command_line::get_arg(vm, arg_tos_flag)))
4202 if(!set_rate_up_limit(vm, command_line::get_arg(vm, arg_limit_rate_up)))
4203 if(!set_rate_down_limit(vm, command_line::get_arg(vm, arg_limit_rate_down)))
4204 if(!set_rate_limit(vm, command_line::get_arg(vm, arg_limit_rate)))
4205 size_t pos = addr.find_last_of(':');
4206 if(endpoint.address().is_v4())
4207 if(nettype == cryptonote::TESTNET)
4208 else if(nettype == cryptonote::STAGENET)
4209 if(m_nettype == cryptonote::TESTNET)
4210 else if(m_nettype == cryptonote::STAGENET)
4211 if(m_exclusive_peers.empty())
4212 if(!th.try_join_until(deadline))
4213 if(result.size())
4214 if(full_addrs.size() < MIN_WANTED_SEED_NODES)
4215 if(full_addrs.empty())
4216 if((m_nettype == cryptonote::MAINNET && m_port != std::to_string(cryptonote::config<cryptonote::MAINNET>::P2P_DEFAULT_PORT)) || (m_nettype == cryptonote::TESTNET && m_port != std::to_string(cryptonote::config<cryptonote::TESTNET>::P2P_DEFAULT_PORT)) || (m_nettype == cryptonote::STAGENET && m_port != std::to_string(cryptonote::config<cryptonote::STAGENET>::P2P_DEFAULT_PORT)))
4217 if(m_offline)
4218 if(m_external_port)
4219 if(!m_no_igd)
4220 if(cntxt.m_is_income)
4221 if(!m_net_server.run_server(thrds_count, true, attrs))
4222 if(!m_no_igd)
4223 if(!tools::create_directories_if_necessary(m_config_folder))
4224 if(p2p_data.fail())
4225 if(code < 0)
4226 if(rsp.node_data.network_id != m_network_id)
4227 if(!handle_remote_peerlist(rsp.local_peerlist_new, rsp.node_data.local_time, context))
4228 if(!just_take_peerlist)
4229 if(!m_payload_handler.process_payload_sync_data(rsp.payload_data, context, true))
4230 if(rsp.node_data.peer_id == m_config.m_peer_id)
4231 if(r)
4232 if(!hsh_result)
4233 if(code < 0)
4234 if(!handle_remote_peerlist(rsp.local_peerlist_new, rsp.local_time, context))
4235 if(!context.m_is_income)
4236 if(!r)
4237 if(!max_index)
4238 if(m_config.m_peer_id == peer.id)
4239 if(cntxt.peer_id == peer.id || (!cntxt.m_is_income && peer.adr == cntxt.m_remote_address))
4240 if(m_config.m_peer_id == peer.id)
4241 if(cntxt.peer_id == peer.id || (!cntxt.m_is_income && peer.adr == cntxt.m_remote_address))
4242 if(!cntxt.m_is_income && peer == cntxt.m_remote_address)
4243 if(priority) \
4244 if(m_current_number_of_out_peers == m_config.m_net_config.max_out_connection_count) // out peers limit
4245 else if(m_current_number_of_out_peers > m_config.m_net_config.max_out_connection_count)
4246 if(!res)
4247 if(!res)
4248 if(just_take_peerlist)
4249 if(!res)
4250 if(!res)
4251 if(it == m_conn_fails_cache.end())
4252 if(time(NULL) - it->second > P2P_FAILED_ADDR_FORGET_SECONDS)
4253 if(is_peer_used(pe))
4254 if(!is_remote_host_allowed(pe.adr))
4255 if(is_addr_recently_failed(pe.adr))
4256 if(!try_to_connect_and_handshake_with_new_peer(pe.adr, false, 0, anchor, pe.first_seen))
4257 if(!local_peers_count)
4258 if(use_white_list)
4259 if(!local_peers_count)
4260 if(!local_peers_count)
4261 if(tried_peers.count(random_index))
4262 if(is_peer_used(pe))
4263 if(!is_remote_host_allowed(pe.adr))
4264 if(is_addr_recently_failed(pe.adr))
4265 if(!try_to_connect_and_handshake_with_new_peer(pe.adr, false, pe.last_seen, use_white_list ? white : gray))
4266 if(m_seed_nodes.empty() || m_offline || !m_exclusive_peers.empty())
4267 if(m_net_server.is_stop_signal_sent())
4268 if(try_to_connect_and_handshake_with_new_peer(m_seed_nodes[current_index], true))
4269 if(++try_count > m_seed_nodes.size())
4270 if(!fallback_nodes_added)
4271 if(++current_index >= m_seed_nodes.size())
4272 if(m_offline)
4273 if(!connect_to_peerlist(m_exclusive_peers))
4274 if(!m_exclusive_peers.empty())
4275 if(!m_peerlist.get_white_peers_count() && m_seed_nodes.size())
4276 if(!connect_to_seed())
4277 if(!connect_to_peerlist(m_priority_peers))
4278 if(conn_count < m_config.m_net_config.max_out_connection_count)
4279 if(conn_count < expected_white_connections)
4280 if(!make_expected_connections_count(anchor, P2P_DEFAULT_ANCHOR_CONNECTIONS_COUNT))
4281 if(!make_expected_connections_count(white, expected_white_connections))
4282 if(!make_expected_connections_count(gray, m_config.m_net_config.max_out_connection_count))
4283 if(!make_expected_connections_count(gray, m_config.m_net_config.max_out_connection_count))
4284 if(!make_expected_connections_count(white, m_config.m_net_config.max_out_connection_count))
4285 if(start_conn_count == get_outgoing_connections_count() && start_conn_count < m_config.m_net_config.max_out_connection_count)
4286 if(!connect_to_seed())
4287 if(m_offline)
4288 if(peer_type == anchor)
4289 if(m_net_server.is_stop_signal_sent())
4290 if(peer_type == anchor && !make_new_connection_from_anchor_peerlist(apl))
4291 if(peer_type == white && !make_new_connection_from_peerlist(true))
4292 if(peer_type == gray && !make_new_connection_from_peerlist(false))
4293 if(!cntxt.m_is_income)
4294 if(cntxt.m_is_income)
4295 if(cntxt.peer_id && !cntxt.m_in_timedsync)
4296 if(be.last_seen > local_time)
4297 if(!fix_time_delta(peerlist_, local_time, delta))
4298 if(!m_hide_my_port)
4299 if(time_delata > 24 * 60 * 60)
4300 if(m_last_stat_request_time >= tr.time)
4301 if(m_config.m_peer_id != tr.peer_id)
4302 if(!crypto::check_signature(h, pk, tr.sign))
4303 if(!check_trust(arg.tr))
4304 if(!check_trust(arg.tr))
4305 if(cntxt.peer_id && context.m_connection_id != cntxt.m_connection_id)
4306 if(!node_data.my_port)
4307 if(!m_peerlist.is_host_allowed(context.m_remote_address))
4308 if(ec)
4309 if(code <= 0)
4310 if(rsp.status != PING_OK_RESPONSE_STATUS_TEXT || pr != rsp.peer_id)
4311 if(!inv_call_res)
4312 if(!r)
4313 if(code < 0)
4314 f(context_, rsp.support_flags);
4315 if(!m_payload_handler.process_payload_sync_data(arg.payload_data, context, false))
4316 if(arg.node_data.network_id != m_network_id)
4317 if(!context.m_is_income)
4318 if(context.peer_id)
4319 if(m_current_number_of_in_peers >= m_config.m_net_config.max_in_connection_count) // in peers limit
4320 if(!m_payload_handler.process_payload_sync_data(arg.payload_data, context, true))
4321 if(has_too_many_connections(context.m_remote_address))
4322 if(arg.node_data.peer_id != m_config.m_peer_id && arg.node_data.my_port)
4323 if(!m_net_server.is_stop_signal_sent() && !context.m_is_income)
4324 if(m_net_server.is_stop_signal_sent())
4325 if(is_addr_connected(na))
4326 if(max == -1)
4327 if(max == -1)
4328 if(flag == -1)
4329 if(limit == -1)
4330 if(limit == -1)
4331 if(limit == -1)
4332 if(!this->islimitup)
4333 if(!this->islimitdown)
4334 if(cntxt.m_is_income && cntxt.m_remote_address.is_same_host(address))
4335 if(count > max_connections)
4336 if(m_offline)
4337 if(!m_exclusive_peers.empty())
4338 if(m_net_server.is_stop_signal_sent())
4339 if(!m_peerlist.get_random_gray_peer(pe))
4340 if(!success)
4341 if(result != 0)
4342 if(result == 1)
4343 if(portMappingResult != 0)
4344 else if(result == 2)
4345 else if(result == 3)
4346 if(result != 0)
4347 if(result == 1)
4348 if(portMappingResult != 0)
4349 else if(result == 2)
4350 else if(result == 3)
4351 if(typename Archive::is_saving())
4352 if(ver < 6)
4353 if(by_addr_it == pi.get<by_addr>().end())
4354 if(i >= m_peers_white.size())
4355 if(i >= m_peers_gray.size())
4356 if(address.is_loopback())
4357 if(!m_allow_local_ip && address.is_local())
4358 if(!vl.last_seen)
4359 if(cnt++ >= depth)
4360 if(!is_host_allowed(ple.adr))
4361 if(by_addr_it_wt == m_peers_white.get<by_addr>().end())
4362 if(by_addr_it_gr != m_peers_gray.get<by_addr>().end())
4363 if(!is_host_allowed(ple.adr))
4364 if(by_addr_it_wt != m_peers_white.get<by_addr>().end())
4365 if(by_addr_it_gr == m_peers_gray.get<by_addr>().end())
4366 if(by_addr_it_anchor == m_peers_anchor.get<by_addr>().end())
4367 if(m_peers_gray.empty())
4368 if(iterator != m_peers_gray.get<by_addr>().end())
4369 if(iterator != m_peers_anchor.get<by_addr>().end())
4370 if(typename Archive::is_saving())
4371 if(!typename Archive::is_saving())
4372 if(typename Archive::is_saving())
4373 if(!typename Archive::is_saving())
4374 if(is_store)
4375 if(p.adr.get_type_id() == epee::net_utils::ipv4_network_address::ID)
4376 if(!epee::serialization::selector<is_store>::serialize(this_ref.local_peerlist_new, stg, hparent_section, "local_peerlist_new"))
4377 if(is_store)
4378 if(p.adr.get_type_id() == epee::net_utils::ipv4_network_address::ID)
4379 if(!epee::serialization::selector<is_store>::serialize(this_ref.local_peerlist_new, stg, hparent_section, "local_peerlist_new"))
4380 s.append(reinterpret_cast<const char *>(&pot.peer_id), sizeof(pot.peer_id));
4381 s.append(reinterpret_cast<const char *>(&pot.time), sizeof(pot.time));
4382 std::string hashed = std::string((const char *)base.bytes, sizeof(base)) + salt + tools::get_varint_data(idx);
4383 if(init_done)
4384 if(n == 0)
4385 if(n == 1)
4386 std::reverse(k.bytes, k.bytes + sizeof(k));
4387 BN_bin2bn(switch_endianness(x).bytes, sizeof(rct::key), X);
4388 BN_bin2bn(switch_endianness(rct::curveOrder()).bytes, sizeof(rct::key), L);
4389 CHECK_AND_ASSERT_THROW_MES((size_t)len <= sizeof(rct::key), "Invalid number length");
4390 if(sv[i / 8] & (((uint64_t)1) << (i % 8)))
4391 if(aL[i] == rct::identity())
4392 if(aR[i] == rct::zero())
4393 return Bulletproof(V, A, S, T1, T2, taux, mu, L, R, aprime[0], bprime[0], t);
4394 if(!(L61Right == L61Left))
4395 if((i & (((size_t)1) << j)) == 0)
4396 if(i != N - 1)
4397 if(!(pprime == tmp))
4398 if(!(expr)) \
4399 crypto::rand(rows * sizeof(key), (uint8_t *)&rv[0]);
4400 if(a.bytes[i] != b.bytes[i])
4401 if(PC.empty())
4402 if(keys.empty())
4403 cn_fast_hash(rv, &keys[0], keys.size() * sizeof(keys[0]));
4404 cn_fast_hash(rv, &keys[0], 64 * sizeof(keys[0]));
4405 if(!(expr)) \
4406bool is_bulletproof(int type)
4407Bulletproof proveRangeBulletproof(key &C, key &mask, uint64_t amount)
4408bool verBulletproof(const Bulletproof &proof)
4409 if(naught == 0)
4410 if(!indices[jj])
4411 if(kLRki)
4412 if(i == 0)
4413 if(i == 0)
4414 if(mscout)
4415 if(b[i] == 0)
4416 if(b[i] == 1)
4417 if(!equalKeys(C, Ctmp))
4418 if(!verifyBorromean(as.asig, asCi, CiH))
4419 if(rv.type == RCTTypeSimpleBulletproof || rv.type == RCTTypeFullBulletproof)
4420 if(i != index)
4421 if(i != index)
4422 if(bulletproof)
4423 if(bulletproof)
4424 rv.p.bulletproofs[i] = proveRangeBulletproof(rv.outPk[i].mask, outSk[i].mask, amounts[i]);
4425 if(bulletproof)
4426 CHECK_AND_ASSERT_THROW_MES(verBulletproof(rv.p.bulletproofs[i]), "verBulletproof failed on newly created proof");
4427 if(amounts.size() > destinations.size())
4428 if(msout)
4429 if(kLRki && msout)
4430 if(bulletproof)
4431 if(bulletproof)
4432 rv.p.bulletproofs[i] = proveRangeBulletproof(rv.outPk[i].mask, outSk[i].mask, outamounts[i]);
4433 if(bulletproof)
4434 CHECK_AND_ASSERT_THROW_MES(verBulletproof(rv.p.bulletproofs[i]), "verBulletproof failed on newly created proof");
4435 if(msout)
4436 if(semantics)
4437 if(rv.type == RCTTypeFullBulletproof)
4438 if(semantics)
4439 if(rv.p.rangeSigs.empty())
4440 results[i] = verBulletproof(rv.p.bulletproofs[i]);
4441 if(!results[i])
4442 if(!semantics)
4443 if(!mgVerd)
4444 if(semantics)
4445 if(rv.type == RCTTypeSimpleBulletproof)
4446 if(rv.type == RCTTypeSimpleBulletproof)
4447 const keyV &pseudoOuts = is_bulletproof(rv.type) ? rv.p.pseudoOuts : rv.pseudoOuts;
4448 if(semantics)
4449 if(!equalKeys(sumPseudoOuts, sumOutpks))
4450 if(rv.p.rangeSigs.empty())
4451 results[i] = verBulletproof(rv.p.bulletproofs[i]);
4452 if(!results[i])
4453 if(!results[i])
4454 if(equalKeys(C, Ctmp) == false)
4455 if(equalKeys(C, Ctmp) == false)
4456 if(rv.type == RCTTypeFull || rv.type == RCTTypeFullBulletproof)
4457 printf("\"");
4458 printf("%02x", (unsigned char)a.bytes[j]);
4459 printf("\"");
4460 printf("\n");
4461 printf(" ... %s ... ", a ? "true" : "false");
4462 printf("\n");
4463 printf("\"");
4464 printf("%02x", (unsigned char)a[j]);
4465 printf("\"");
4466 printf("\n");
4467 printf("[");
4468 if(j < a.size() - 1)
4469 printf(",");
4470 printf("]");
4471 printf("\n");
4472 printf("[");
4473 if(j < a.size() - 1)
4474 printf(",");
4475 printf("]");
4476 printf("\n");
4477 printf("x: ");
4478 printf("\n\n");
4479 printf("x: %d\n", vali);
4480 printf("\n");
4481 printf("%d", amountb[i]);
4482 printf("\n");
4483 printf("%s\n", st);
4484 bool operator==(const key &k) const { return !memcmp(bytes, k.bytes, sizeof(bytes)); }
4485 Bulletproof() {}
4486 Bulletproof(const rct::key &V, const rct::key &A, const rct::key &S, const rct::key &T1, const rct::key &T2, const rct::key &taux, const rct::key &mu, const rct::keyV &L, const rct::keyV &R, const rct::key &a, const rct::key &b, const rct::key &t) : V({V}), A(A), S(S), T1(T1), T2(T2), taux(taux), mu(mu), L(L), R(R), a(a), b(b), t(t) {}
4487 if(L.empty() || L.size() != R.size())
4488 if(type == RCTTypeNull)
4489 if(type != RCTTypeFull && type != RCTTypeFullBulletproof && type != RCTTypeSimple && type != RCTTypeSimpleBulletproof)
4490 if(type == RCTTypeSimple) // moved to prunable with bulletproofs
4491 if(pseudoOuts.size() != inputs)
4492 if(inputs - i > 1)
4493 if(ecdhInfo.size() != outputs)
4494 if(outputs - i > 1)
4495 if(outPk.size() != outputs)
4496 if(outputs - i > 1)
4497 if(type == RCTTypeNull)
4498 if(type != RCTTypeFull && type != RCTTypeFullBulletproof && type != RCTTypeSimple && type != RCTTypeSimpleBulletproof)
4499 if(type == RCTTypeSimpleBulletproof || type == RCTTypeFullBulletproof)
4500 if(bulletproofs.size() != outputs)
4501 if(outputs - i > 1)
4502 if(rangeSigs.size() != outputs)
4503 if(outputs - i > 1)
4504 if(MGs.size() != mg_elements)
4505 if(MGs[i].ss.size() != mixin + 1)
4506 if(MGs[i].ss[j].size() != mg_ss2_elements)
4507 if(mg_ss2_elements - k > 1)
4508 if(mixin + 1 - j > 1)
4509 if(mg_elements - i > 1)
4510 if(type == RCTTypeSimpleBulletproof)
4511 if(pseudoOuts.size() != inputs)
4512 if(inputs - i > 1)
4513 if(!reasons.empty())
4514 if(!rpc_config)
4515 if(!m_bootstrap_daemon_address.empty())
4516 if(!bootstrap_daemon_login.empty() && loc != std::string::npos)
4517 if(rpc_config->login)
4518 if(!m_p2p.get_payload_object().is_synchronized())
4519 if(!check_core_ready()) \
4520 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_HEIGHT>(invoke_http_mode::JON, "/getheight", req, res, r))
4521 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_INFO>(invoke_http_mode::JON, "/getinfo", req, res, r))
4522 if(!cryptonote::parse_and_validate_tx_from_blob(blobdata, tx))
4523 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_BLOCKS_FAST>(invoke_http_mode::BIN, "/getblocks.bin", req, res, r))
4524 if(!m_core.find_blockchain_supplement(req.start_height, req.block_ids, bs, res.current_height, res.start_height, COMMAND_RPC_GET_BLOCKS_FAST_MAX_COUNT))
4525 if(!parse_and_validate_block_from_blob(bd.first, b))
4526 if(!r)
4527 if(req.prune)
4528 if(!r)
4529 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_ALT_BLOCKS_HASHES>(invoke_http_mode::JON, "/get_alt_blocks_hashes", req, res, r))
4530 if(!m_core.get_alternative_blocks(blks))
4531 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_BLOCKS_BY_HEIGHT>(invoke_http_mode::BIN, "/getblocks_by_height.bin", req, res, r))
4532 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_HASHES_FAST>(invoke_http_mode::BIN, "/gethashes.bin", req, res, r))
4533 if(!m_core.find_blockchain_supplement(req.block_ids, resp))
4534 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS>(invoke_http_mode::BIN, "/getrandom_outs.bin", req, res, r))
4535 if(m_restricted)
4536 if(req.amounts.size() > 100 || req.outs_count > MAX_RESTRICTED_FAKE_OUTS_COUNT)
4537 if(!m_core.get_random_outs_for_amounts(req, res))
4538 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_OUTPUTS_BIN>(invoke_http_mode::BIN, "/get_outs.bin", req, res, r))
4539 if(m_restricted)
4540 if(req.outputs.size() > MAX_RESTRICTED_GLOBAL_FAKE_OUTS_COUNT)
4541 if(!m_core.get_outs(req, res))
4542 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_OUTPUTS>(invoke_http_mode::JON, "/get_outs", req, res, r))
4543 if(m_restricted)
4544 if(req.outputs.size() > MAX_RESTRICTED_GLOBAL_FAKE_OUTS_COUNT)
4545 if(!m_core.get_outs(req_bin, res_bin))
4546 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_RANDOM_RCT_OUTPUTS>(invoke_http_mode::BIN, "/getrandom_rctouts.bin", req, res, r))
4547 if(!m_core.get_random_rct_outs(req, res))
4548 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_TX_GLOBAL_OUTPUTS_INDEXES>(invoke_http_mode::BIN, "/get_o_indexes.bin", req, res, ok))
4549 if(!r)
4550 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_TRANSACTIONS>(invoke_http_mode::JON, "/gettransactions", req, res, ok))
4551 if(!string_tools::parse_hexstr_to_binbuff(tx_hex_str, b))
4552 if(!string_tools::parse_hexstr_to_binbuff(tx_hex_str, b))
4553 if(b.size() != sizeof(crypto::hash))
4554 if(b.size() != sizeof(crypto::hash))
4555 if(!r)
4556 if(!missed_txs.empty())
4557 if(r)
4558 if(std::find(missed_txs.begin(), missed_txs.end(), h) == missed_txs.end())
4559 if(txs.empty())
4560 if(get_transaction_hash(txs.front()) != h)
4561 else if((i = std::find_if(pool_tx_info.begin(), pool_tx_info.end(), [h](const tx_info &txi) { return epee::string_tools::pod_to_hex(h) == txi.id_hash; })) != pool_tx_info.end())
4562 else if((i = std::find_if(pool_tx_info.begin(), pool_tx_info.end(), [h](const tx_info &txi) { return epee::string_tools::pod_to_hex(h) == txi.id_hash; })) != pool_tx_info.end())
4563 if(!cryptonote::parse_and_validate_tx_from_blob(i->tx_blob, tx))
4564 if(ti.id_hash == hash_string)
4565 if(req.decode_as_json)
4566 if(e.in_pool)
4567 if(double_spend_seen.find(tx_hash) != double_spend_seen.end())
4568 if(req.decode_as_json)
4569 if(pool_tx_hashes.find(tx_hash) == pool_tx_hashes.end())
4570 if(!r)
4571 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_IS_KEY_IMAGE_SPENT>(invoke_http_mode::JON, "/is_key_image_spent", req, res, ok))
4572 if(!string_tools::parse_hexstr_to_binbuff(ki_hex_str, b))
4573 if(!string_tools::parse_hexstr_to_binbuff(ki_hex_str, b))
4574 if(b.size() != sizeof(crypto::key_image))
4575 if(b.size() != sizeof(crypto::key_image))
4576 if(!r)
4577 if(!r)
4578 if(parse_hash256(i->id_hash, hash))
4579 memcpy(&spent_key_image, &hash, sizeof(hash)); // a bit dodgy, should be other parse functions somewhere
4580 if(res.spent_status[n] == COMMAND_RPC_IS_KEY_IMAGE_SPENT::UNSPENT)
4581 if(key_images[n] == spent_key_image)
4582 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_SEND_RAW_TX>(invoke_http_mode::JON, "/sendrawtransaction", req, res, ok))
4583 if(!string_tools::parse_hexstr_to_binbuff(req.tx_as_hex, tx_blob))
4584 if(!string_tools::parse_hexstr_to_binbuff(req.tx_as_hex, tx_blob))
4585 if(!m_core.handle_incoming_tx(tx_blob, tvc, false, false, req.do_not_relay) || tvc.m_verifivation_failed)
4586 if((res.low_mixin = tvc.m_low_mixin))
4587 if((res.double_spend = tvc.m_double_spend))
4588 if((res.invalid_input = tvc.m_invalid_input))
4589 if((res.invalid_output = tvc.m_invalid_output))
4590 if((res.too_big = tvc.m_too_big))
4591 if((res.overspend = tvc.m_overspend))
4592 if((res.fee_too_low = tvc.m_fee_too_low))
4593 if((res.not_rct = tvc.m_not_rct))
4594 if(tvc.m_verifivation_failed)
4595 if(!tvc.m_should_be_relayed)
4596 if(!get_account_address_from_str(m_nettype, info, req.miner_address))
4597 if(req.miner_address == common_config::DEV_FUND_ADDRESS)
4598 if(info.is_subaddress)
4599 if(concurrency_count == 0)
4600 if(req.threads_count > concurrency_count)
4601 if(!m_core.get_miner().start(info.address, static_cast<size_t>(req.threads_count), attrs, req.do_background_mining, req.ignore_battery))
4602 if(!m_core.get_miner().stop())
4603 if(lMiner.is_mining())
4604 if(!m_core.get_blockchain_storage().store_blockchain())
4605 if(entry.adr.get_type_id() == epee::net_utils::ipv4_network_address::ID)
4606 if(entry.adr.get_type_id() == epee::net_utils::ipv4_network_address::ID)
4607 if(m_core.get_miner().is_mining())
4608 if(req.level < 0 || req.level > 4)
4609 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_TRANSACTION_POOL>(invoke_http_mode::JON, "/get_transaction_pool", req, res, r))
4610 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_TRANSACTION_POOL_HASHES>(invoke_http_mode::JON, "/get_transaction_pool_hashes.bin", req, res, r))
4611 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_TRANSACTION_POOL_STATS>(invoke_http_mode::JON, "/get_transaction_pool_stats", req, res, r))
4612 if(m_should_use_bootstrap_daemon)
4613 if(m_should_use_bootstrap_daemon)
4614 if(req.size() != 1)
4615 if(m_core.get_current_blockchain_height() <= h)
4616 if(patlen > buflen || patlen == 0)
4617 if(memcmp(buf, pat, patlen) == 0)
4618 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GETBLOCKTEMPLATE>(invoke_http_mode::JON_RPC, "getblocktemplate", req, res, r))
4619 if(!check_core_ready())
4620 if(req.reserve_size > 255)
4621 if(req.wallet_address == common_config::DEV_FUND_ADDRESS)
4622 if(!req.wallet_address.size() || !cryptonote::get_account_address_from_str(m_nettype, info, req.wallet_address))
4623 if(info.is_subaddress)
4624 if(!m_core.get_block_template(b, info.address, res.difficulty, res.height, res.expected_reward, blob_reserve))
4625 if(tx_pub_key == crypto::null_pkey)
4626 res.reserved_offset = slow_memmem((void *)block_blob.data(), block_blob.size(), &tx_pub_key, sizeof(tx_pub_key));
4627 if(!res.reserved_offset)
4628 res.reserved_offset += sizeof(tx_pub_key) + 2; //2 bytes: tag for TX_EXTRA_NONCE(1 byte), counter in TX_EXTRA_NONCE(1 byte)
4629 if(res.reserved_offset + req.reserve_size > block_blob.size())
4630 if(m_should_use_bootstrap_daemon)
4631 if(req.size() != 1)
4632 if(!string_tools::parse_hexstr_to_binbuff(req[0], blockblob))
4633 if(!string_tools::parse_hexstr_to_binbuff(req[0], blockblob))
4634 if(!parse_and_validate_block_from_blob(blockblob, b))
4635 if(!m_core.check_incoming_block_size(blockblob))
4636 if(!m_core.handle_block_found(b))
4637 if(m_bootstrap_daemon_address.empty())
4638 if(!m_should_use_bootstrap_daemon)
4639 if(current_time - m_bootstrap_height_check_time > std::chrono::seconds(30)) // update every 30s
4640 if(!m_should_use_bootstrap_daemon)
4641 if(mode == invoke_http_mode::JON)
4642 else if(mode == invoke_http_mode::BIN)
4643 else if(mode == invoke_http_mode::JON_RPC)
4644 if(r)
4645 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_LAST_BLOCK_HEADER>(invoke_http_mode::JON_RPC, "getlastblockheader", req, res, r))
4646 if(!have_last_block)
4647 if(!response_filled)
4648 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_BLOCK_HEADER_BY_HASH>(invoke_http_mode::JON_RPC, "getblockheaderbyhash", req, res, r))
4649 if(!hash_parsed)
4650 if(!have_block)
4651 if(blk.miner_tx.vin.size() != 1 || blk.miner_tx.vin.front().type() != typeid(txin_gen))
4652 if(!response_filled)
4653 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_BLOCK_HEADERS_RANGE>(invoke_http_mode::JON_RPC, "getblockheadersrange", req, res, r))
4654 if(req.start_height >= bc_height || req.end_height >= bc_height || req.start_height > req.end_height)
4655 if(!have_block)
4656 if(blk.miner_tx.vin.size() != 1 || blk.miner_tx.vin.front().type() != typeid(txin_gen))
4657 if(block_height != h)
4658 if(!response_filled)
4659 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_BLOCK_HEADER_BY_HEIGHT>(invoke_http_mode::JON_RPC, "getblockheaderbyheight", req, res, r))
4660 if(m_core.get_current_blockchain_height() <= req.height)
4661 if(!have_block)
4662 if(!response_filled)
4663 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_BLOCK>(invoke_http_mode::JON_RPC, "getblock", req, res, r))
4664 if(!req.hash.empty())
4665 if(!hash_parsed)
4666 if(m_core.get_current_blockchain_height() <= req.height)
4667 if(!have_block)
4668 if(blk.miner_tx.vin.size() != 1 || blk.miner_tx.vin.front().type() != typeid(txin_gen))
4669 if(!response_filled)
4670 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_INFO>(invoke_http_mode::JON_RPC, "get_info", req, res, r))
4671 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_HARD_FORK_INFO>(invoke_http_mode::JON_RPC, "hard_fork_info", req, res, r))
4672 if(i->second > now)
4673 if(epee::string_tools::get_ip_int32_from_string(ip, i->first))
4674 if(!i->host.empty())
4675 if(!epee::net_utils::create_network_address(na, i->host))
4676 if(i->ban)
4677 if(req.txids.empty())
4678 if(!r)
4679 if(!epee::string_tools::parse_hexstr_to_binbuff(str, txid_data))
4680 if(!epee::string_tools::parse_hexstr_to_binbuff(str, txid_data))
4681 if(!m_core.get_blockchain_storage().flush_txes_from_pool(txids))
4682 if(failed)
4683 if(txids.empty())
4684 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_OUTPUT_HISTOGRAM>(invoke_http_mode::JON_RPC, "get_output_histogram", req, res, r))
4685 if(std::get<0>(i.second) >= req.min_count && (std::get<0>(i.second) <= req.max_count || req.max_count == 0))
4686 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_VERSION>(invoke_http_mode::JON_RPC, "get_version", req, res, r))
4687 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_LIMIT>(invoke_http_mode::JON, "/get_limit", req, res, r))
4688 if(req.limit_down > 0)
4689 else if(req.limit_down < 0)
4690 if(req.limit_down != -1)
4691 if(req.limit_up > 0)
4692 else if(req.limit_up < 0)
4693 if(req.limit_up != -1)
4694 if(n_delete)
4695 if(n_delete)
4696 if(!epee::string_tools::parse_hexstr_to_binbuff(str, txid_data))
4697 if(!epee::string_tools::parse_hexstr_to_binbuff(str, txid_data))
4698 if(!res.status.empty())
4699 if(r)
4700 if(!res.status.empty())
4701 if(failed)
4702 if(c.connection_id == span_connection_id)
4703 if(use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_TRANSACTION_POOL_BACKLOG>(invoke_http_mode::JON_RPC, "get_txpool_backlog", req, res, r))
4704 if(!m_core.get_txpool_backlog(res.backlog))
4705 if(d.cached && amount == 0 && d.cached_from == req.from_height && d.cached_to == req.to_height)
4706 if(req.cumulative)
4707 if(slot.amount == amount && slot.from_height == req.from_height && slot.to_height == req.to_height)
4708 if(req.cumulative)
4709 if(found)
4710 if(!m_core.get_output_distribution(amount, req.from_height, req.to_height, start_height, distribution, base))
4711 if(req.to_height > 0 && req.to_height >= req.from_height)
4712 if(offset <= req.to_height && req.to_height - offset + 1 < distribution.size())
4713 if(amount == 0)
4714 if(req.cumulative)
4715 MAP_URI_AUTO_JON2_IF("/start_mining", on_start_mining, COMMAND_RPC_START_MINING, !m_restricted)
4716 MAP_URI_AUTO_JON2_IF("/stop_mining", on_stop_mining, COMMAND_RPC_STOP_MINING, !m_restricted)
4717 MAP_URI_AUTO_JON2_IF("/mining_status", on_mining_status, COMMAND_RPC_MINING_STATUS, !m_restricted)
4718 MAP_URI_AUTO_JON2_IF("/save_bc", on_save_bc, COMMAND_RPC_SAVE_BC, !m_restricted)
4719 MAP_URI_AUTO_JON2_IF("/get_peer_list", on_get_peer_list, COMMAND_RPC_GET_PEER_LIST, !m_restricted)
4720 MAP_URI_AUTO_JON2_IF("/set_log_hash_rate", on_set_log_hash_rate, COMMAND_RPC_SET_LOG_HASH_RATE, !m_restricted)
4721 MAP_URI_AUTO_JON2_IF("/set_log_level", on_set_log_level, COMMAND_RPC_SET_LOG_LEVEL, !m_restricted)
4722 MAP_URI_AUTO_JON2_IF("/set_log_categories", on_set_log_categories, COMMAND_RPC_SET_LOG_CATEGORIES, !m_restricted)
4723 MAP_URI_AUTO_JON2_IF("/stop_daemon", on_stop_daemon, COMMAND_RPC_STOP_DAEMON, !m_restricted)
4724 MAP_URI_AUTO_JON2_IF("/set_limit", on_set_limit, COMMAND_RPC_SET_LIMIT, !m_restricted)
4725 MAP_URI_AUTO_JON2_IF("/out_peers", on_out_peers, COMMAND_RPC_OUT_PEERS, !m_restricted)
4726 MAP_URI_AUTO_JON2_IF("/in_peers", on_in_peers, COMMAND_RPC_IN_PEERS, !m_restricted)
4727 MAP_URI_AUTO_JON2_IF("/update", on_update, COMMAND_RPC_UPDATE, !m_restricted)
4728 MAP_JON_RPC_WE_IF("get_connections", on_get_connections, COMMAND_RPC_GET_CONNECTIONS, !m_restricted)
4729 MAP_JON_RPC_WE_IF("set_bans", on_set_bans, COMMAND_RPC_SETBANS, !m_restricted)
4730 MAP_JON_RPC_WE_IF("get_bans", on_get_bans, COMMAND_RPC_GETBANS, !m_restricted)
4731 MAP_JON_RPC_WE_IF("flush_txpool", on_flush_txpool, COMMAND_RPC_FLUSH_TRANSACTION_POOL, !m_restricted)
4732 MAP_JON_RPC_WE_IF("get_coinbase_tx_sum", on_get_coinbase_tx_sum, COMMAND_RPC_GET_COINBASE_TX_SUM, !m_restricted)
4733 MAP_JON_RPC_WE_IF("get_alternate_chains", on_get_alternate_chains, COMMAND_RPC_GET_ALTERNATE_CHAINS, !m_restricted)
4734 MAP_JON_RPC_WE_IF("relay_tx", on_relay_tx, COMMAND_RPC_RELAY_TX, !m_restricted)
4735 MAP_JON_RPC_WE_IF("sync_info", on_sync_info, COMMAND_RPC_SYNC_INFO, !m_restricted)
4736 if(!m_core.find_blockchain_supplement(req.start_height, req.block_ids, blocks, res.current_height, res.start_height, COMMAND_RPC_GET_BLOCKS_FAST_MAX_COUNT))
4737 if(!parse_and_validate_block_from_blob(it->first, bwt.block))
4738 if(it->second.size() != bwt.block.tx_hashes.size())
4739 if(!parse_and_validate_tx_from_blob(blob, txs.back()))
4740 if(!r)
4741 if(!r)
4742 if(!chain.find_blockchain_supplement(req.known_hashes, res.hashes, res.start_height, res.current_height))
4743 if(!r)
4744 if(!missed_vec.empty())
4745 if(itr != missed_vec.end())
4746 if((chain_spent_status.size() != req.key_images.size()) || (pool_spent_status.size() != req.key_images.size()))
4747 if(chain_spent_status[i])
4748 else if(pool_spent_status[i])
4749 if(!m_core.get_tx_outputs_gindexs(req.tx_hash, res.output_indices))
4750 if(!m_core.handle_incoming_tx(tx_blob, tvc, false, false, !req.relay) || tvc.m_verifivation_failed)
4751 if(tvc.m_verifivation_failed)
4752 if(tvc.m_low_mixin)
4753 if(tvc.m_double_spend)
4754 if(!res.error_details.empty())
4755 if(tvc.m_invalid_input)
4756 if(!res.error_details.empty())
4757 if(tvc.m_invalid_output)
4758 if(!res.error_details.empty())
4759 if(tvc.m_too_big)
4760 if(!res.error_details.empty())
4761 if(tvc.m_overspend)
4762 if(!res.error_details.empty())
4763 if(tvc.m_fee_too_low)
4764 if(!res.error_details.empty())
4765 if(tvc.m_not_rct)
4766 if(!res.error_details.empty())
4767 if(res.error_details.empty())
4768 if(!tvc.m_should_be_relayed || !req.relay)
4769 if(!get_account_address_from_str(m_core.get_nettype(), info, req.miner_address))
4770 if(info.is_subaddress)
4771 if(concurrency_count == 0)
4772 if(req.threads_count > concurrency_count)
4773 if(!m_core.get_miner().start(info.address, static_cast<size_t>(req.threads_count), attrs, req.do_background_mining, req.ignore_battery))
4774 if(res.info.height > res.info.target_height)
4775 if(!m_core.get_miner().stop())
4776 if(lMiner.is_mining())
4777 if(!m_core.get_blockchain_storage().store_blockchain())
4778 if(m_core.get_current_blockchain_height() <= req.height)
4779 if(!getBlockHeaderByHash(block_hash, res.header))
4780 if(!getBlockHeaderByHash(req.hash, res.header))
4781 if(!getBlockHeaderByHash(block_hash, res.header))
4782 if(!getBlockHeaderByHash(block_hash, res.headers[i]))
4783 if(req.level < 0 || req.level > 4)
4784 if(!r)
4785 if(std::get<0>(i.second) >= req.min_count && (std::get<0>(i.second) <= req.max_count || req.max_count == 0))
4786 if(!m_core.get_block_by_hash(hash_in, b))
4787 if(b.miner_tx.vin.size() != 1 || b.miner_tx.vin.front().type() != typeid(txin_gen))
4788 if(resp_message == NULL)
4789 if(resp_message)
4790 val.AddMember("status", rapidjson::StringRef(status.c_str()), al);
4791 val.AddMember("error_details", rapidjson::StringRef(error_details.c_str()), al);
4792 doc.AddMember(method_field, rapidjson::StringRef(request.c_str()), doc.GetAllocator());
4793 if(message->status == Message::STATUS_OK)
4794 if(doc.HasParseError() || !doc.IsObject())
4795 if(request)
4796 if(!doc.HasMember(result_field) && !doc.HasMember(error_field))
4797 if(!doc.HasMember(id_field))
4798 if(doc.HasMember(params_field))
4799 else if(doc.HasMember(result_field))
4800 if(itr != doc.MemberEnd())
4801 if(doc.HasMember(error_field))
4802 if(runtime_str == type::name) \
4803 if(!config.bind_ip.empty())
4804 if(ec)
4805 if(!parsed_ip.is_loopback() && !command_line::get_arg(vm, arg.confirm_external_bind))
4806 if(command_line::has_arg(vm, arg.rpc_login))
4807 if(!config.login)
4808 if(config.login->username.empty())
4809 if(!access_control_origins_input.empty())
4810 if(!config.login)
4811 boost::split(access_control_origins, access_control_origins_input, boost::is_any_of(","));
4812 if(!rep_socket)
4813 rep_socket->setsockopt(ZMQ_RCVTIMEO, &DEFAULT_RPC_RECV_TIMEOUT_MS, sizeof(DEFAULT_RPC_RECV_TIMEOUT_MS));
4814 if(!running)
4815 void serialize_uint(T &v, size_t width = sizeof(T))
4816 if(!stream_.good())
4817 for(size_t i = 0; i < sizeof(T); i++)
4818 if(1 < sizeof(T))
4819 if(1 < sizeof(T))
4820 if(!ar.stream().good())
4821 if(ar.remaining_bytes() < cnt)
4822 if(i > 0)
4823 if(!::serialization::detail::serialize_container_element(ar, e))
4824 if(!ar.stream().good())
4825 if(!ar.stream().good())
4826 if(i != v.begin())
4827 if(!::serialization::detail::serialize_container_element(ar, const_cast<typename C::value_type &>(*i)))
4828 if(!ar.stream().good())
4829 if(ar.remaining_bytes() < cnt * sizeof(crypto::signature))
4830 if(ar.remaining_bytes() < cnt * sizeof(crypto::signature))
4831 ar.serialize_blob(&(v[i]), sizeof(crypto::signature), "");
4832 if(!ar.stream().good())
4833 if(0 == v.size())
4834 ar.serialize_blob(&(v[i]), sizeof(crypto::signature), "");
4835 if(!ar.stream().good())
4836 if(!object_begin)
4837 if(indent_)
4838 if(0 < inner_array_size_)
4839 if(source < std::numeric_limits<Type>::min())
4840 if(std::numeric_limits<Type>::max() < source)
4841 if(!val.IsInt())
4842 if(!val.IsInt64())
4843 if(!val.IsUint())
4844 if(!val.IsUint64())
4845 if(!val.IsString())
4846 if(!val.IsBool())
4847 if(!val.IsObject())
4848 if(!val.IsObject())
4849 if(txin.type() == typeid(cryptonote::txin_gen))
4850 else if(txin.type() == typeid(cryptonote::txin_to_script))
4851 else if(txin.type() == typeid(cryptonote::txin_to_scripthash))
4852 else if(txin.type() == typeid(cryptonote::txin_to_key))
4853 if(!val.IsObject())
4854 if(val["type"] == "txin_gen")
4855 else if(val["type"] == "txin_to_script")
4856 else if(val["type"] == "txin_to_scripthash")
4857 else if(val["type"] == "txin_to_key")
4858 if(!val.IsObject())
4859 if(!val.IsObject())
4860 if(!val.IsObject())
4861 if(!val.IsObject())
4862 if(txout.type() == typeid(cryptonote::txout_to_script))
4863 else if(txout.type() == typeid(cryptonote::txout_to_scripthash))
4864 else if(txout.type() == typeid(cryptonote::txout_to_key))
4865 if(!val.IsObject())
4866 if(val["type"] == "txout_to_script")
4867 else if(val["type"] == "txout_to_scripthash")
4868 else if(val["type"] == "txout_to_key")
4869 if(!val.IsObject())
4870 if(!val.IsObject())
4871 if(!val.IsObject())
4872 if(!val.IsObject())
4873 if(!val.IsObject())
4874 if(!val.IsObject())
4875 if(!val.IsObject())
4876 if(!val.IsObject())
4877 if(!val.IsObject())
4878 if(!val.IsObject())
4879 if(!val.IsObject())
4880 if(!val.IsObject())
4881 if(!val.IsObject())
4882 if(!val.IsObject())
4883 if(!val.IsObject())
4884 if(!val.IsObject())
4885 if(!val.IsObject())
4886 if(!val.IsObject())
4887 if(!val.IsObject())
4888 if(!val.IsObject())
4889 if(!val.IsObject())
4890 if(!val.IsObject())
4891 if(!val.IsObject())
4892 if(!(keyVector.size() == 64))
4893 if(!val.IsObject())
4894 if(!val.IsObject())
4895 if(!(keyVector.size() == 64))
4896 if(!(keyVector.size() == 64))
4897 if(!val.IsObject())
4898 if(!val.IsObject())
4899 if(!val.HasMember(key)) \
4900 if(!val.IsString())
4901 if(!success)
4902 if(!val.IsObject())
4903 if(!val.IsArray())
4904 if(!ar.stream().good())
4905 if(cnt != 2)
4906 if(!::serialization::detail::serialize_pair_element(ar, p.first))
4907 if(!ar.stream().good())
4908 if(!::serialization::detail::serialize_pair_element(ar, p.second))
4909 if(!ar.stream().good())
4910 if(!ar.stream().good())
4911 if(!::serialization::detail::serialize_pair_element(ar, p.first))
4912 if(!ar.stream().good())
4913 if(!::serialization::detail::serialize_pair_element(ar, p.second))
4914 if(!ar.stream().good())
4915 ar.serialize_blob(&v, sizeof(v));
4916 ar.serialize_blob(&v, sizeof(v));
4917 if(!r || !ar.stream().good()) \
4918 if(!r || !ar.stream().good()) \
4919 if(!r || !ar.stream().good()) \
4920 if(!r || !ar.stream().good()) \
4921 if(!ar.stream().good()) \
4922 if(!ar.stream().good()) \
4923 if(s.good())
4924 if(ar.remaining_bytes() < size)
4925 std::unique_ptr<std::string::value_type[]> buf(new std::string::value_type[size]);
4926 if(variant_serialization_traits<Archive, current_type>::get_tag() == t)
4927 if(!::do_serialize(ar, x))
4928 if(!variant_reader<Archive<false>, variant_type,
4929 if(!::do_serialize(ar, rv))
4930 ReadConsoleW(hConIn, buffer, sizeof(buffer)/sizeof(wchar_t)-1, &read, nullptr);
4931 ReadConsoleW(hConIn, buffer, sizeof(buffer)/sizeof(wchar_t)-1, &read, nullptr);
4932 std::string buf(size_needed, '\0');
4933 if(!pwd_container)
4934 if(ok)
4935 if(status == CORE_RPC_STATUS_BUSY)
4936 else if(status != CORE_RPC_STATUS_OK)
4937 if(s == "1" || command_line::is_yes(s))
4938 if(s == "0" || command_line::is_no(s))
4939 if(boost::algorithm::equals("true", s, ignore_case) || boost::algorithm::equals(simple_wallet::tr("true"), s, ignore_case))
4940 if(boost::algorithm::equals("false", s, ignore_case) || boost::algorithm::equals(simple_wallet::tr("false"), s, ignore_case))
4941 if(parse_bool(s, r))
4942 for(size_t n = 0; n < sizeof(refresh_type_names) / sizeof(refresh_type_names[0]); ++n)
4943 for(size_t n = 0; n < sizeof(refresh_type_names) / sizeof(refresh_type_names[0]); ++n)
4944 if(s == refresh_type_names[n].name)
4945 for(size_t n = 0; n < sizeof(refresh_type_names) / sizeof(refresh_type_names[0]); ++n)
4946 for(size_t n = 0; n < sizeof(refresh_type_names) / sizeof(refresh_type_names[0]); ++n)
4947 if(type == refresh_type_names[n].refresh_type)
4948 if(arg.substr(0, 6) != "index=")
4949 boost::split(subaddr_indices_str, subaddr_indices_str_unsplit, boost::is_any_of(","));
4950 if(!epee::string_tools::get_xtype_from_string(subaddr_index, subaddr_index_str))
4951 if(r)
4952 if(!reason.empty())
4953 if(warn_of_possible_attack)
4954 if(boost::filesystem::exists(filename, errcode))
4955 if(boost::ends_with(filename, ".keys"))
4956 if(priority_pos != allowed_priority_strings.end())
4957 if(documentation.first.empty())
4958 if(m_wallet->ask_password() && !get_and_verify_password())
4959 if(m_wallet->get_account().is_kurz())
4960 if(m_wallet->key_on_device())
4961 if(m_wallet->watch_only())
4962 if(m_wallet->ask_password() && !get_and_verify_password())
4963 if(m_wallet->key_on_device())
4964 if(m_wallet->key_on_device())
4965 if(m_wallet->watch_only())
4966 if(m_wallet->ask_password() && !get_and_verify_password())
4967 if(multisig)
4968 if(!ready)
4969 else if(!has_seed)
4970 if(multisig)
4971 else if(has_seed)
4972 if(success)
4973 if(m_wallet->key_on_device())
4974 if(m_wallet->multisig())
4975 if(m_wallet->watch_only())
4976 if(!m_wallet->has_25word_seed() && !m_wallet->has_14word_seed())
4977 if(pwd_container)
4978 if(mnemonic_language.empty())
4979 if(orig_pwd_container == boost::none)
4980 if(!pwd_container)
4981 if(args.size() > 0)
4982 if(!try_connect_to_daemon())
4983 if(blocks.size() != 4)
4984 if(nblocks_low > 0)
4985 if(priority == m_wallet->get_default_priority() || (m_wallet->get_default_priority() == 0 && priority == 2))
4986 if(nblocks_high == nblocks_low)
4987 if(m_wallet->key_on_device())
4988 if(m_wallet->is_kurz())
4989 if(m_wallet->multisig())
4990 if(m_wallet->watch_only())
4991 if(m_wallet->get_num_transfer_details())
4992 if(orig_pwd_container == boost::none)
4993 if(m_wallet->key_on_device())
4994 if(m_wallet->is_kurz())
4995 if(m_wallet->multisig())
4996 if(m_wallet->watch_only())
4997 if(m_wallet->get_num_transfer_details())
4998 if(orig_pwd_container == boost::none)
4999 if(args.size() < 2)
5000 if(!string_tools::get_xtype_from_string(threshold, args[0]))
5001 if(!multisig_extra_info.empty())
5002 if(!m_wallet->multisig(NULL, &threshold, &total))
5003 if(m_wallet->key_on_device())
5004 if(!m_wallet->multisig(&ready))
5005 if(ready)
5006 if(orig_pwd_container == boost::none)
5007 if(args.size() < 2)
5008 if(!m_wallet->finalize_multisig(orig_pwd_container->password(), args))
5009 if(m_wallet->key_on_device())
5010 if(!m_wallet->multisig(&ready))
5011 if(!ready)
5012 if(args.size() != 1)
5013 if(m_wallet->ask_password() && !get_and_verify_password())
5014 if(m_wallet->confirm_export_overwrite() && !check_file_overwrite(filename))
5015 if(!r)
5016 if(m_wallet->key_on_device())
5017 if(!m_wallet->multisig(&ready, &threshold, &total))
5018 if(!ready)
5019 if(args.size() < threshold - 1)
5020 if(m_wallet->ask_password() && !get_and_verify_password())
5021 if(!r)
5022 if(m_trusted_daemon)
5023 if(m_wallet->key_on_device())
5024 if(!m_wallet->multisig(&ready))
5025 if(!ready)
5026 if(args.size() != 1)
5027 if(m_wallet->ask_password() && !get_and_verify_password())
5028 if(!r)
5029 if(txids.empty())
5030 if(!txids_as_text.empty())
5031 if(m_wallet->key_on_device())
5032 if(!m_wallet->multisig(&ready, &threshold))
5033 if(!ready)
5034 if(args.size() != 1)
5035 if(m_wallet->ask_password() && !get_and_verify_password())
5036 if(!try_connect_to_daemon())
5037 if(!r)
5038 if(txs.m_signers.size() < threshold)
5039 if(m_wallet->key_on_device())
5040 if(!m_wallet->multisig(&ready, &threshold))
5041 if(!ready)
5042 if(args.size() != 1)
5043 if(m_wallet->ask_password() && !get_and_verify_password())
5044 if(m_wallet->confirm_export_overwrite() && !check_file_overwrite(filename))
5045 if(!r)
5046 if(txs.m_signers.size() < threshold)
5047 if(!filenames.empty())
5048 if(!epee::file_io_utils::save_string_to_file(filename, cryptonote::tx_to_blob(ptx.tx)))
5049 if(args.size() != 1)
5050 if(!epee::string_tools::hex_to_pod(args[0], key_image))
5051 if(!epee::string_tools::hex_to_pod(args[0], txid))
5052 if(m_wallet->get_ring(key_image, ring))
5053 else if(!m_wallet->get_rings(txid, rings))
5054 if(args.size() < 3)
5055 if(!epee::string_tools::hex_to_pod(args[0], key_image))
5056 if(args[1] == "absolute")
5057 else if(args[1] == "relative")
5058 if(!string_tools::get_xtype_from_string(ring.back(), args[n]))
5059 if(relative)
5060 if(ring.size() > 1 && !ring.back())
5061 if(out > std::numeric_limits<uint64_t>::max() - sum)
5062 if(ring.size() > 1 && ring[ring.size() - 2] >= ring[ring.size() - 1])
5063 if(!m_wallet->set_ring(key_image, ring, relative))
5064 if(args.size() == 0)
5065 if(epee::string_tools::hex_to_pod(args[0], output))
5066 else if(epee::file_io_utils::is_file_exist(args[0]))
5067 std::unique_ptr<FILE, tools::close_file> f(fopen(args[0].c_str(), "r"));
5068 if(f)
5069 while(!feof(f.get()))
5070 if(!fgets(str, sizeof(str), f.get()))
5071 if(!fgets(str, sizeof(str), f.get()))
5072 if(len > 0 && str[len - 1] == '\n')
5073 if(!str[0])
5074 if(!epee::string_tools::hex_to_pod(str, outputs.back()))
5075 if(args.size() > 1)
5076 if(args[1] != "add")
5077 if(args.size() != 1)
5078 if(!epee::string_tools::hex_to_pod(args[0], output))
5079 if(args.size() != 1)
5080 if(!epee::string_tools::hex_to_pod(args[0], output))
5081 if(m_wallet->is_output_blackballed(output))
5082 if(pwd_container)
5083 if(pwd_container)
5084 if(m_wallet->watch_only())
5085 if(pwd_container)
5086 if(m_wallet->watch_only())
5087 if(strchr(args[1].c_str(), '-'))
5088 if(ring_size < MIN_RING_SIZE && ring_size != 0)
5089 if(ring_size != 0 && ring_size != DEFAULT_MIX + 1)
5090 if(pwd_container)
5091 if(strchr(args[1].c_str(), '-'))
5092 if(args[1] == "0")
5093 if(priority < 1u || priority > 4u)
5094 if(pwd_container)
5095 if(pwd_container)
5096 if(!parse_refresh_type(args[1], refresh_type))
5097 if(pwd_container)
5098 if(pwd_container)
5099 if(pwd_container)
5100 if(unit == "ryo")
5101 else if(unit == "milliryo")
5102 else if(unit == "microryo")
5103 else if(unit == "nanoryo")
5104 if(pwd_container)
5105 if(!string_tools::get_xtype_from_string(count, args[1]))
5106 if(pwd_container)
5107 if(!cryptonote::parse_amount(value, args[1]))
5108 if(pwd_container)
5109 if(pwd_container)
5110 if(pwd_container)
5111 if(!string_tools::get_xtype_from_string(threshold, args[1]))
5112 if(pwd_container)
5113 if(pwd_container)
5114 if(pwd_container)
5115 if(!epee::string_tools::get_xtype_from_string(height, args[1]))
5116 if(pwd_container)
5117 if(pwd_container)
5118 if(pwd_container)
5119 if(pwd_container)
5120 if(lookahead)
5121 if(pwd_container)
5122 if(!epee::string_tools::get_xtype_from_string(height, args[1]))
5123 if(args.empty())
5124 if(args.empty())
5125 if(m_use_english_language_names)
5126 if(args[0] == name) \
5127 if(args.size() <= 1) \
5128 f(args); \
5129 if(args[0] == "seed")
5130 if(args.size() == 1)
5131 else if(args[1] == "language")
5132 if(args.size() > 1)
5133 if(!args.empty())
5134 if(std::cin.eof())
5135 if(std::cin.eof())
5136 LOG_ERROR("Unexpected std::cin.eof() - Exited simple_wallet::ask_wallet_create_if_needed()");
5137 if(!tools::wallet2::wallet_valid_path_format(wallet_path))
5138 if((keys_file_exists || wallet_file_exists) && (!m_generate_new.empty() || m_restoring))
5139 if(wallet_file_exists && keys_file_exists) //Yes wallet, yes keys
5140 else if(!wallet_file_exists && keys_file_exists) //No wallet, yes keys
5141 else if(wallet_file_exists && !keys_file_exists) //Yes wallet, no keys
5142 else if(!wallet_file_exists && !keys_file_exists) //No wallet, no keys
5143 if(!m_restoring)
5144 if(std::cin.eof())
5145 if(std::cin.eof())
5146 LOG_ERROR("Unexpected std::cin.eof() - Exited simple_wallet::ask_wallet_create_if_needed()");
5147 if(ok)
5148 if(short_seed)
5149 boost::split(seed, words, boost::is_any_of(" "), boost::token_compress_on);
5150 if(testnet && stagenet)
5151 if(!handle_command_line(vm))
5152 if((!m_generate_new.empty()) + (!m_wallet_file.empty()) + (!m_generate_from_device.empty()) + (!m_generate_from_view_key.empty()) + (!m_generate_from_spend_key.empty()) + (!m_generate_from_keys.empty()) + (!m_generate_from_multisig_keys.empty()) + (!m_generate_from_json.empty()) > 1)
5153 else if(m_generate_new.empty() && m_wallet_file.empty() && m_generate_from_device.empty() && m_generate_from_view_key.empty() && m_generate_from_spend_key.empty() && m_generate_from_keys.empty() && m_generate_from_multisig_keys.empty() && m_generate_from_json.empty())
5154 if(!ask_wallet_create_if_needed())
5155 if(!m_generate_new.empty() || m_restoring)
5156 if(!m_subaddress_lookahead.empty() && !parse_subaddress_lookahead(m_subaddress_lookahead))
5157 if(m_restore_deterministic_wallet || m_restore_multisig_wallet)
5158 if(!m_wallet_file.empty())
5159 if(m_restore_multisig_wallet)
5160 if(m_electrum_seed.empty())
5161 if(m_restore_multisig_wallet)
5162 if(std::cin.eof())
5163 if(std::cin.eof())
5164 if(m_electrum_seed.empty())
5165 if(!epee::string_tools::parse_hexstr_to_binbuff(m_electrum_seed, multisig_keys))
5166 if(!epee::string_tools::parse_hexstr_to_binbuff(m_electrum_seed, multisig_keys))
5167 if(std::cin.eof() || !pwd_container)
5168 if(std::cin.eof() || !pwd_container)
5169 if(std::cin.eof())
5170 if(std::cin.eof())
5171 if(line.empty())
5172 if(!m_generate_from_view_key.empty())
5173 if(std::cin.eof())
5174 if(std::cin.eof())
5175 if(address_string.empty())
5176 if(!get_account_address_from_str(nettype, info, address_string))
5177 if(info.is_subaddress)
5178 if(std::cin.eof())
5179 if(std::cin.eof())
5180 if(viewkey_string.empty())
5181 if(!epee::string_tools::parse_hexstr_to_binbuff(viewkey_string, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
5182 if(!epee::string_tools::parse_hexstr_to_binbuff(viewkey_string, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
5183 if(!epee::string_tools::parse_hexstr_to_binbuff(viewkey_string, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
5184 if(!crypto::secret_key_to_public_key(viewkey, pkey))
5185 if(info.address.m_view_public_key != pkey)
5186 else if(!m_generate_from_spend_key.empty())
5187 if(std::cin.eof())
5188 if(std::cin.eof())
5189 if(spendkey_string.empty())
5190 if(!epee::string_tools::hex_to_pod(spendkey_string, recovery_key))
5191 else if(!m_generate_from_keys.empty())
5192 if(std::cin.eof())
5193 if(std::cin.eof())
5194 if(address_string.empty())
5195 if(!get_account_address_from_str(nettype, info, address_string))
5196 if(info.is_subaddress)
5197 if(std::cin.eof())
5198 if(std::cin.eof())
5199 if(spendkey_string.empty())
5200 if(!epee::string_tools::parse_hexstr_to_binbuff(spendkey_string, spendkey_data) || spendkey_data.size() != sizeof(crypto::secret_key))
5201 if(!epee::string_tools::parse_hexstr_to_binbuff(spendkey_string, spendkey_data) || spendkey_data.size() != sizeof(crypto::secret_key))
5202 if(!epee::string_tools::parse_hexstr_to_binbuff(spendkey_string, spendkey_data) || spendkey_data.size() != sizeof(crypto::secret_key))
5203 if(std::cin.eof())
5204 if(std::cin.eof())
5205 if(viewkey_string.empty())
5206 if(!epee::string_tools::parse_hexstr_to_binbuff(viewkey_string, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
5207 if(!epee::string_tools::parse_hexstr_to_binbuff(viewkey_string, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
5208 if(!epee::string_tools::parse_hexstr_to_binbuff(viewkey_string, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
5209 if(!crypto::secret_key_to_public_key(spendkey, pkey))
5210 if(info.address.m_spend_public_key != pkey)
5211 if(!crypto::secret_key_to_public_key(viewkey, pkey))
5212 if(info.address.m_view_public_key != pkey)
5213 else if(!m_generate_from_multisig_keys.empty())
5214 if(std::cin.eof())
5215 if(std::cin.eof())
5216 if(multisig_type_string.empty())
5217 if(sscanf(multisig_type_string.c_str(), "%u/%u", &multisig_m, &multisig_n) != 2)
5218 if(sscanf(multisig_type_string.c_str(), "%u/%u", &multisig_m, &multisig_n) != 2)
5219 if(multisig_m <= 1 || multisig_m > multisig_n)
5220 if(multisig_m != multisig_n)
5221 if(std::cin.eof())
5222 if(std::cin.eof())
5223 if(address_string.empty())
5224 if(!get_account_address_from_str(nettype, info, address_string))
5225 if(std::cin.eof())
5226 if(std::cin.eof())
5227 if(viewkey_string.empty())
5228 if(!epee::string_tools::parse_hexstr_to_binbuff(viewkey_string, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
5229 if(!epee::string_tools::parse_hexstr_to_binbuff(viewkey_string, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
5230 if(!epee::string_tools::parse_hexstr_to_binbuff(viewkey_string, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
5231 if(!crypto::secret_key_to_public_key(viewkey, pkey))
5232 if(info.address.m_view_public_key != pkey)
5233 if(multisig_m == multisig_n)
5234 if(std::cin.eof())
5235 if(std::cin.eof())
5236 if(spendkey_string.empty())
5237 if(!epee::string_tools::parse_hexstr_to_binbuff(spendkey_string, spendkey_data) || spendkey_data.size() != sizeof(crypto::secret_key))
5238 if(!epee::string_tools::parse_hexstr_to_binbuff(spendkey_string, spendkey_data) || spendkey_data.size() != sizeof(crypto::secret_key))
5239 if(!epee::string_tools::parse_hexstr_to_binbuff(spendkey_string, spendkey_data) || spendkey_data.size() != sizeof(crypto::secret_key))
5240 if(!crypto::secret_key_to_public_key(spendkey, pkey))
5241 if(info.address.m_spend_public_key != pkey)
5242 else if(!m_generate_from_json.empty())
5243 if(!m_wallet)
5244 else if(!m_generate_from_device.empty())
5245 if(m_wallet->get_refresh_from_block_height() == 0)
5246 if(std::cin.eof() || !command_line::is_yes(confirm))
5247 if(std::cin.eof() || !command_line::is_yes(confirm))
5248 if(m_generate_new.empty())
5249 if(m_electrum_seed.empty())
5250 if(m_restore_multisig_wallet)
5251 if(m_restoring && m_generate_from_json.empty() && m_generate_from_device.empty())
5252 if(!m_wallet->explicit_refresh_from_block_height() && m_restoring)
5253 if(!connected || version < MAKE_CORE_RPC_VERSION(1, 6))
5254 if(std::cin.eof())
5255 if(std::cin.eof())
5256 if(heightstr.empty())
5257 if(!connected || version < MAKE_CORE_RPC_VERSION(1, 6))
5258 if(heightstr.size() != 10 || heightstr[4] != '-' || heightstr[7] != '-')
5259 if(std::cin.eof())
5260 if(std::cin.eof())
5261 if(command_line::is_yes(confirm))
5262 if(m_restoring)
5263 if(m_restore_height >= estimate_height)
5264 if(std::cin.eof() || command_line::is_no(confirm))
5265 if(std::cin.eof() || command_line::is_no(confirm))
5266 if(!m_subaddress_lookahead.empty())
5267 if(!m_wallet)
5268 if(tools::is_local_address(m_wallet->get_daemon_address()))
5269 if(!m_trusted_daemon)
5270 if(m_wallet->get_ring_database().empty())
5271 if(!m_wallet.get())
5272 if(!version)
5273 if(!m_wallet->check_connection(version))
5274 if(!silent)
5275 if(!m_allow_mismatched_daemon_version && ((*version >> 16) != CORE_RPC_VERSION_MAJOR))
5276 if(!silent)
5277 if(!ignore_cmd_arg && !m_mnemonic_language.empty())
5278 if(!ret.empty())
5279 if(std::cin.eof())
5280 if(std::cin.eof())
5281 if(!((language_number >= 0) && (static_cast<unsigned int>(language_number) < language_list.size())))
5282 if(!pwd_container)
5283 if(!m_wallet->verify_password(pwd_container->password()))
5284 boost::split(wseed, seed, boost::is_any_of(" "), boost::token_compress_on);
5285 if(wseed.size() == 12 || wseed.size() == 14)
5286 if(wseed.size() == 12)
5287 if(command_line::is_yes(kurz_addr))
5288 else if(wseed.size() >= 24 && wseed.size() <= 26)
5289 if(!decode_14 && !decode_25)
5290 if(decode_14)
5291 if(!m_wallet)
5292 if(!m_subaddress_lookahead.empty())
5293 if(!m_wallet->get_account().is_kurz())
5294 if(seed == nullptr)
5295 if(!m_wallet)
5296 if(!m_subaddress_lookahead.empty())
5297 if(!m_wallet)
5298 if(!m_subaddress_lookahead.empty())
5299 if(m_restore_height)
5300 if(spendkey)
5301 if(!m_wallet)
5302 if(!m_subaddress_lookahead.empty())
5303 if(m_restore_height)
5304 if(!pass.empty())
5305 if(!m_wallet)
5306 if(!m_subaddress_lookahead.empty())
5307 if(!m_wallet->multisig(&ready, &threshold, &total) || !ready)
5308 if(!tools::wallet2::wallet_valid_path_format(m_wallet_file))
5309 if(!m_wallet)
5310 if(m_wallet->watch_only())
5311 else if(m_wallet->multisig(&ready, &threshold, &total))
5312 if(m_wallet->get_account().get_device())
5313 if(m_wallet)
5314 if(password_is_correct)
5315 if(m_idle_run.load(std::memory_order_relaxed))
5316 if(!r)
5317 if(m_wallet->multisig())
5318 if(!pwd_container)
5319 if(!m_trusted_daemon)
5320 if(!try_connect_to_daemon())
5321 if(!m_wallet)
5322 if(arg_size >= 3)
5323 if(!parse_bool_and_use(args[2], [&](bool r) { req.ignore_battery = r; }))
5324 if(arg_size >= 2)
5325 if(!parse_bool_and_use(args[1], [&](bool r) { req.do_background_mining = r; }))
5326 if(arg_size >= 1)
5327 if(!ok)
5328 if(err.empty())
5329 if(!try_connect_to_daemon())
5330 if(!m_wallet)
5331 if(err.empty())
5332 if(args.size() < 1)
5333 if(boost::regex_match(args[0].c_str(), match, rgx))
5334 if(match.length() < 4)
5335 if(!match[3].length())
5336 if(!try_connect_to_daemon())
5337 if(!m_wallet)
5338 if(err.empty())
5339 if(!m_auto_refresh_refreshing)
5340 if(m_wallet->get_refresh_from_block_height() > height)
5341 if(m_auto_refresh_refreshing)
5342 if(m_auto_refresh_refreshing)
5343 if(!try_connect_to_daemon())
5344 if(reset)
5345 if(is_init)
5346 if(!ok)
5347 if(!args.empty())
5348 if(m_wallet->has_multisig_partial_key_images())
5349 if(!detailed || balance_per_subaddress.empty())
5350 uint64_t num_unspent_outputs = std::count_if(transfers.begin(), transfers.end(), [&subaddr_index](const tools::wallet2::transfer_details &td) { return !td.m_spent && td.m_subaddr_index == subaddr_index; });
5351 if(args.size() > 1 || (args.size() == 1 && args[0] != "detail"))
5352 if(args.size() > 3)
5353 if(local_args.size() > 0)
5354 if(local_args[0] == "available")
5355 else if(local_args[0] == "unavailable")
5356 if(local_args.size() > 0 && local_args[0] == "verbose")
5357 if(local_args.size() > 0 && local_args[0].substr(0, 6) == "index=")
5358 if(!parse_subaddress_indices(local_args[0], subaddr_indices))
5359 if(local_args.size() > 0)
5360 if(!filter || available != td.m_spent)
5361 if(m_current_subaddress_account != td.m_subaddr_index.major || (!subaddr_indices.empty() && subaddr_indices.count(td.m_subaddr_index.minor) == 0))
5362 if(!transfers_found)
5363 if(verbose)
5364 if(verbose)
5365 if(!transfers_found)
5366 if(!filter)
5367 else if(available)
5368 if(args.empty())
5369 if(tools::wallet2::parse_payment_id(arg, payment_id))
5370 if(payments.empty())
5371 if(!payments_found)
5372 if(!m_wallet)
5373 if(!try_connect_to_daemon())
5374 if(err.empty())
5375 if(!m_trusted_daemon)
5376 if(!try_connect_to_daemon())
5377 if(!try_connect_to_daemon(false, &version))
5378 if(version < MAKE_CORE_RPC_VERSION(1, 4))
5379 if(!err.empty())
5380 if(tx.vin[i].type() != typeid(cryptonote::txin_to_key))
5381 if(src.outputs[src.real_output].second.dest == td.get_public_key())
5382 if(!sptr)
5383 if(!err.empty())
5384 if(res_out.height >= blockchain_height)
5385 if(spent_key_txid[i] == spent_key_txid[j])
5386 if(std::abs((int64_t)(spent_key_height[i] - spent_key_height[j])) < (int64_t)5)
5387 if(are_keys_from_same_tx || are_keys_from_close_height)
5388 if(m_wallet->ask_password() && !get_and_verify_password())
5389 if(!try_connect_to_daemon())
5390 if(local_args.size() > 0 && local_args[0].substr(0, 6) == "index=")
5391 if(!parse_subaddress_indices(local_args[0], subaddr_indices))
5392 if(local_args.size() > 0 && parse_priority(local_args[0], priority))
5393 if(local_args.size() > 0)
5394 if(!epee::string_tools::get_xtype_from_string(ring_size, local_args[0]))
5395 if(fake_outs_count == 0)
5396 else if(ring_size == 0)
5397 if(adjusted_fake_outs_count > fake_outs_count)
5398 if(local_args.size() < min_args)
5399 if((expect_even ? 0 : 1) == local_args.size() % 2)
5400 if(r)
5401 if(r)
5402 if(!r)
5403 if(transfer_type == TransferLocked)
5404 if(locked_blocks > 1000000)
5405 if(!cryptonote::get_account_address_from_str(m_wallet->nettype(), info, local_args[i]))
5406 if(info.has_payment_id)
5407 if(payment_id_seen)
5408 if(!r)
5409 if(!ok || 0 == de.amount)
5410 if(!payment_id_seen && m_wallet->confirm_missing_payment_id())
5411 if(std::cin.eof())
5412 if(std::cin.eof())
5413 if(!command_line::is_yes(accepted))
5414 if(!err.empty())
5415 if(ptx_vector.empty())
5416 if(m_wallet->confirm_backlog())
5417 if(fee_per_byte < worst_fee_per_byte)
5418 if(nblocks.size() != 1)
5419 if(nblocks[0].first > m_wallet->get_confirm_backlog_threshold())
5420 if(!prompt_str.empty())
5421 if(std::cin.eof())
5422 if(std::cin.eof())
5423 if(!command_line::is_yes(accepted))
5424 if(m_wallet->always_confirm_transfers() || ptx_vector.size() > 1)
5425 if(ptx_vector[n].dust_added_to_fee)
5426 if(subaddr_indices.size() > 1)
5427 if(ptx_vector.size() > 1)
5428 if(dust_in_fee != 0)
5429 if(dust_not_in_fee != 0)
5430 if(transfer_type == TransferLocked)
5431 if(m_wallet->print_ring_members())
5432 if(!print_ring_members(ptx_vector, prompt))
5433 if(vin.type() == typeid(txin_to_key))
5434 if(in_to_key.key_offsets.size() != DEFAULT_MIX + 1)
5435 if(m_wallet->confirm_non_default_ring_size() && !default_ring_size)
5436 if(std::cin.eof())
5437 if(std::cin.eof())
5438 if(!command_line::is_yes(accepted))
5439 if(m_wallet->multisig())
5440 if(!r)
5441 else if(m_wallet->watch_only())
5442 if(!r)
5443 if(args_.size() == 0)
5444 if(m_wallet->ask_password() && !get_and_verify_password())
5445 if(!try_connect_to_daemon())
5446 if(local_args.size() > 0 && local_args[0].substr(0, 6) == "index=")
5447 if(!parse_subaddress_indices(local_args[0], subaddr_indices))
5448 if(local_args.size() > 0 && parse_priority(local_args[0], priority))
5449 if(local_args.size() > 0)
5450 if(!epee::string_tools::get_xtype_from_string(ring_size, local_args[0]))
5451 if(fake_outs_count == 0)
5452 else if(ring_size == 0)
5453 if(adjusted_fake_outs_count > fake_outs_count)
5454 if(2 >= local_args.size())
5455 if(r)
5456 if(r)
5457 if(!r && local_args.size() == 3)
5458 if(payment_id_seen)
5459 if(!cryptonote::get_account_address_from_str(m_wallet->nettype(), info, local_args[0]))
5460 if(info.has_payment_id)
5461 if(payment_id_seen)
5462 if(!r)
5463 if(!payment_id_seen && m_wallet->confirm_missing_payment_id())
5464 if(std::cin.eof())
5465 if(std::cin.eof())
5466 if(!command_line::is_yes(accepted))
5467 if(ptx_vector.empty())
5468 if(subaddr_indices.size() > 1)
5469 if(m_wallet->print_ring_members() && !print_ring_members(ptx_vector, prompt))
5470 if(ptx_vector.size() > 1)
5471 if(std::cin.eof())
5472 if(std::cin.eof())
5473 if(!command_line::is_yes(accepted))
5474 if(m_wallet->multisig())
5475 if(!r)
5476 else if(m_wallet->watch_only())
5477 if(!r)
5478 if(m_wallet->ask_password() && !get_and_verify_password())
5479 if(!try_connect_to_daemon())
5480 if(local_args.size() > 0 && parse_priority(local_args[0], priority))
5481 if(local_args.size() > 0)
5482 if(!epee::string_tools::get_xtype_from_string(ring_size, local_args[0]))
5483 if(fake_outs_count == 0)
5484 if(local_args.size() == 3)
5485 if(tools::wallet2::parse_long_payment_id(local_args.back(), payment_id))
5486 else if(tools::wallet2::parse_short_payment_id(local_args.back(), payment_id8))
5487 if(!add_extra_nonce_to_tx_extra(extra, extra_nonce))
5488 if(local_args.size() != 2)
5489 if(!epee::string_tools::hex_to_pod(local_args[0], ki))
5490 if(!cryptonote::get_account_address_from_str(m_wallet->nettype(), info, local_args[1]))
5491 if(info.has_payment_id)
5492 if(payment_id_seen)
5493 if(!add_extra_nonce_to_tx_extra(extra, extra_nonce))
5494 if(!payment_id_seen && m_wallet->confirm_missing_payment_id())
5495 if(std::cin.eof())
5496 if(std::cin.eof())
5497 if(!command_line::is_yes(accepted))
5498 if(ptx_vector.empty())
5499 if(ptx_vector.size() > 1)
5500 if(ptx_vector[0].selected_transfers.size() != 1)
5501 if(!print_ring_members(ptx_vector, prompt))
5502 if(std::cin.eof())
5503 if(std::cin.eof())
5504 if(!command_line::is_yes(accepted))
5505 if(m_wallet->multisig())
5506 if(!r)
5507 else if(m_wallet->watch_only())
5508 if(!r)
5509 if(args_.size() < 1)
5510 if(!cryptonote::parse_amount(below, args_[0]))
5511 if(m_wallet->nettype() != cryptonote::MAINNET)
5512 if(local_args.empty() || local_args.size() > 5)
5513 if(tools::wallet2::parse_long_payment_id(local_args.back(), payment_id) ||
5514 if(!payment_id_str.empty())
5515 if(cryptonote::parse_tx_extra(cd.extra, tx_extra_fields))
5516 if(find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
5517 if(get_encrypted_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id8))
5518 if(!payment_id_string.empty())
5519 else if(get_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
5520 if(!payment_id_string.empty())
5521 if(ring_size < min_ring_size)
5522 if(has_encrypted_payment_id && !entry.is_subaddress)
5523 if(i == dests.end())
5524 if(cd.change_dts.amount > 0)
5525 if(it == dests.end())
5526 if(it->second.second < cd.change_dts.amount)
5527 if(cd.change_dts.amount > 0)
5528 if(first_known_non_zero_change_index == -1)
5529 if(memcmp(&cd.change_dts.addr, &get_tx(first_known_non_zero_change_index).change_dts.addr, sizeof(cd.change_dts.addr)))
5530 if(memcmp(&cd.change_dts.addr, &get_tx(first_known_non_zero_change_index).change_dts.addr, sizeof(cd.change_dts.addr)))
5531 if(it->second.second == 0)
5532 if(payment_id_string.empty())
5533 if(i->second.second > 0)
5534 if(!dest_string.empty())
5535 if(n_dummy_outputs > 0)
5536 if(!dest_string.empty())
5537 if(dest_string.empty())
5538 if(change > 0)
5539 if(!txs.transfers.empty())
5540 if(!txs.key_images.empty())
5541 if(m_wallet->key_on_device())
5542 if(m_wallet->multisig())
5543 if(m_wallet->watch_only())
5544 if(args_.size() > 1 || (args_.size() == 1 && args_[0] != "export"))
5545 if(m_wallet->ask_password() && !get_and_verify_password())
5546 if(!r)
5547 if(!txids_as_text.empty())
5548 if(export_raw)
5549 if(i > 0)
5550 if(m_wallet->key_on_device())
5551 if(!try_connect_to_daemon())
5552 if(!r)
5553 if(m_wallet->key_on_device())
5554 if(local_args.size() != 1)
5555 if(m_wallet->ask_password() && !get_and_verify_password())
5556 if(!epee::string_tools::hex_to_pod(local_args[0], txid))
5557 if(m_wallet->get_tx_key(txid, tx_key, additional_tx_keys))
5558bool simple_wallet::get_tx_proof(const std::vector<std::string> &args)
5559 if(m_wallet->key_on_device())
5560 if(args.size() != 2 && args.size() != 3)
5561 if(!epee::string_tools::hex_to_pod(args[0], txid))
5562 if(!cryptonote::get_account_address_from_str(m_wallet->nettype(), info, args[1]))
5563 if(m_wallet->ask_password() && !get_and_verify_password())
5564 std::string sig_str = m_wallet->get_tx_proof(txid, info.address, info.is_subaddress, args.size() == 3 ? args[2] : "");
5565 if(epee::file_io_utils::save_string_to_file(filename, sig_str))
5566 if(local_args.size() != 3)
5567 if(!try_connect_to_daemon())
5568 if(!m_wallet)
5569 if(!epee::string_tools::hex_to_pod(local_args[0], txid))
5570 if(!epee::string_tools::hex_to_pod(local_args[1].substr(0, 64), tx_key))
5571 if(!epee::string_tools::hex_to_pod(local_args[1].substr(0, 64), additional_tx_keys.back()))
5572 if(!cryptonote::get_account_address_from_str(m_wallet->nettype(), info, local_args[2]))
5573 if(received > 0)
5574 if(in_pool)
5575 if(confirmations != (uint64_t)-1)
5576bool simple_wallet::check_tx_proof(const std::vector<std::string> &args)
5577 if(args.size() != 3 && args.size() != 4)
5578 if(!try_connect_to_daemon())
5579 if(!epee::string_tools::hex_to_pod(args[0], txid))
5580 if(!cryptonote::get_account_address_from_str(m_wallet->nettype(), info, args[1]))
5581 if(!epee::file_io_utils::load_file_to_string(args[2], sig_str))
5582 if(m_wallet->check_tx_proof(txid, info.address, info.is_subaddress, args.size() == 4 ? args[3] : "", sig_str, received, in_pool, confirmations))
5583 if(m_wallet->check_tx_proof(txid, info.address, info.is_subaddress, args.size() == 4 ? args[3] : "", sig_str, received, in_pool, confirmations))
5584 if(received > 0)
5585 if(in_pool)
5586 if(confirmations != (uint64_t)-1)
5587bool simple_wallet::get_spend_proof(const std::vector<std::string> &args)
5588 if(m_wallet->key_on_device())
5589 if(args.size() != 1 && args.size() != 2)
5590 if(m_wallet->watch_only())
5591 if(!epee::string_tools::hex_to_pod(args[0], txid))
5592 if(!try_connect_to_daemon())
5593 if(m_wallet->ask_password() && !get_and_verify_password())
5594 const std::string sig_str = m_wallet->get_spend_proof(txid, args.size() == 2 ? args[1] : "");
5595 if(epee::file_io_utils::save_string_to_file(filename, sig_str))
5596bool simple_wallet::check_spend_proof(const std::vector<std::string> &args)
5597 if(args.size() != 2 && args.size() != 3)
5598 if(!epee::string_tools::hex_to_pod(args[0], txid))
5599 if(!try_connect_to_daemon())
5600 if(!epee::file_io_utils::load_file_to_string(args[1], sig_str))
5601 if(m_wallet->check_spend_proof(txid, args.size() == 3 ? args[2] : "", sig_str))
5602 if(m_wallet->check_spend_proof(txid, args.size() == 3 ? args[2] : "", sig_str))
5603bool simple_wallet::get_reserve_proof(const std::vector<std::string> &args)
5604 if(m_wallet->key_on_device())
5605 if(args.size() != 1 && args.size() != 2)
5606 if(m_wallet->watch_only() || m_wallet->multisig())
5607 if(args[0] != "all")
5608 if(!cryptonote::parse_amount(account_minreserve->second, args[0]))
5609 if(!try_connect_to_daemon())
5610 if(m_wallet->ask_password() && !get_and_verify_password())
5611 const std::string sig_str = m_wallet->get_reserve_proof(account_minreserve, args.size() == 2 ? args[1] : "");
5612 if(epee::file_io_utils::save_string_to_file(filename, sig_str))
5613bool simple_wallet::check_reserve_proof(const std::vector<std::string> &args)
5614 if(args.size() != 2 && args.size() != 3)
5615 if(!try_connect_to_daemon())
5616 if(!cryptonote::get_account_address_from_str(m_wallet->nettype(), info, args[0]))
5617 if(info.is_subaddress)
5618 if(!epee::file_io_utils::load_file_to_string(args[1], sig_str))
5619 if(m_wallet->check_reserve_proof(info.address, args.size() == 3 ? args[2] : "", sig_str, total, spent))
5620 if(m_wallet->check_reserve_proof(info.address, args.size() == 3 ? args[2] : "", sig_str, total, spent))
5621 if(ts < 1234567890)
5622 if(diff > 24 * 3600)
5623 strftime(buffer, sizeof(buffer), "%Y-%m-%d", &tm);
5624 strftime(buffer, sizeof(buffer), "%I:%M:%S %p", &tm);
5625 if(ts < 60)
5626 if(ts < 3600)
5627 if(ts < 3600 * 24)
5628 if(ts < 3600 * 24 * 30.5)
5629 if(ts < 3600 * 24 * 365.25)
5630 if(local_args.size() > 4)
5631 if(local_args.size() > 0)
5632 if(local_args[0] == "in" || local_args[0] == "incoming")
5633 else if(local_args[0] == "out" || local_args[0] == "outgoing")
5634 else if(local_args[0] == "pending")
5635 else if(local_args[0] == "failed")
5636 else if(local_args[0] == "pool")
5637 else if(local_args[0] == "all" || local_args[0] == "both")
5638 if(local_args.size() > 0 && local_args[0].substr(0, 6) == "index=")
5639 if(!parse_subaddress_indices(local_args[0], subaddr_indices))
5640 if(local_args.size() > 0)
5641 if(local_args.size() > 0)
5642 if(in)
5643 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5644 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5645 if(out)
5646 if(!dests.empty())
5647 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5648 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5649 if(pool)
5650 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5651 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5652 if(i->second.m_double_spend_seen)
5653 if(pending || failed)
5654 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5655 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5656 if((failed && is_failed) || (!is_failed && pending))
5657 if(args_.size() > 3)
5658 if(local_args.size() > 0 && local_args[0].substr(0, 6) == "index=")
5659 if(!parse_subaddress_indices(local_args[0], subaddr_indices))
5660 if(local_args.size() > 0)
5661 if(!cryptonote::parse_amount(min_amount, local_args[0]))
5662 if(local_args.size() > 0)
5663 if(!cryptonote::parse_amount(max_amount, local_args[0]))
5664 if(min_amount > max_amount)
5665 if(td.m_spent || amount < min_amount || amount > max_amount || td.m_subaddr_index.major != m_current_subaddress_account || (subaddr_indices.count(td.m_subaddr_index.minor) == 0 && !subaddr_indices.empty()))
5666 if(min_height > td.m_block_height)
5667 if(max_height < td.m_block_height)
5668 if(found_min_amount > amount)
5669 if(found_max_amount < amount)
5670 if(amount_to_tds.empty())
5671 if(bin_index >= histogram_width)
5672 if(max_bin_count < histogram[bin_index])
5673 if(max_bin_count > histogram_height)
5674 if(histogram[x] > 0 && bin_count < 1.0)
5675 if(y < histogram[x])
5676 if(count_per_star < 1)
5677 if(args_.size() >= 2u)
5678 if(args_.size() == 1u)
5679 if(!args_.empty() && start_height > m_wallet->get_refresh_from_block_height())
5680 if(!m_idle_run.load(std::memory_order_relaxed))
5681 if(m_auto_refresh_enabled)
5682 if(try_connect_to_daemon(true))
5683 if(!m_idle_run.load(std::memory_order_relaxed))
5684 if(!m_wallet->check_connection(NULL))
5685 else if(!m_wallet->is_synced())
5686 if(args.empty())
5687 if(command == "new")
5688 if(label.empty())
5689 else if(command == "switch" && local_args.size() == 1)
5690 if(!epee::string_tools::get_xtype_from_string(index_major, local_args[0]))
5691 if(index_major >= m_wallet->get_num_subaddress_accounts())
5692 else if(command == "label" && local_args.size() >= 1)
5693 if(!epee::string_tools::get_xtype_from_string(index_major, local_args[0]))
5694 else if(command == "tag" && local_args.size() >= 2)
5695 if(!epee::string_tools::get_xtype_from_string(account_index, local_args[i]))
5696 else if(command == "untag" && local_args.size() >= 1)
5697 if(!epee::string_tools::get_xtype_from_string(account_index, local_args[i]))
5698 else if(command == "tag_description" && local_args.size() >= 1)
5699 if(local_args.size() > 1)
5700 if(num_untagged_accounts > 0)
5701 if(num_untagged_accounts < m_wallet->get_num_subaddress_accounts())
5702 if(tag.empty())
5703 if(account_tags.first.count(tag) == 0)
5704 if(account_tags.second[account_index] != tag)
5705 bool used = std::find_if(
5706 if(local_args.empty())
5707 else if(local_args.size() == 1 && local_args[0] == "all")
5708 else if(local_args[0] == "new")
5709 if(m_wallet->is_kurz())
5710 if(local_args.size() > 0)
5711 if(label.empty())
5712 else if(local_args.size() >= 2 && local_args[0] == "label")
5713 if(!epee::string_tools::get_xtype_from_string(index, local_args[1]))
5714 if(index >= m_wallet->get_num_subaddresses(m_current_subaddress_account))
5715 else if(local_args.size() <= 2 && epee::string_tools::get_xtype_from_string(index, local_args[0]))
5716 if(local_args.size() > 0)
5717 if(!epee::string_tools::get_xtype_from_string(index_max, local_args[0]))
5718 if(index_max < index_min)
5719 if(index_min >= m_wallet->get_num_subaddresses(m_current_subaddress_account))
5720 if(index_max >= m_wallet->get_num_subaddresses(m_current_subaddress_account))
5721 if(args.size() > 1)
5722 if(args.size() == 0)
5723 if(m_current_subaddress_account != 0)
5724 if(tools::wallet2::parse_short_payment_id(args.back(), payment_id))
5725 if(m_current_subaddress_account != 0)
5726 if(get_account_address_from_str(m_wallet->nettype(), info, args.back()))
5727 if(info.has_payment_id)
5728 if(args.size() == 0)
5729 else if(args.size() == 1 || (args[0] != "add" && args[0] != "delete"))
5730 else if(args[0] == "add")
5731 if(!cryptonote::get_account_address_from_str(m_wallet->nettype(), info, args[1]))
5732 if(info.has_payment_id)
5733 else if(!info.has_payment_id && args.size() >= 4 && args[2] == "pid")
5734 if(tools::wallet2::parse_long_payment_id(args[3], payment_id))
5735 else if(tools::wallet2::parse_short_payment_id(args[3], info.payment_id))
5736 if(i > description_start)
5737 if(!epee::string_tools::get_xtype_from_string(row_id, args[1]))
5738 if(address_book.empty())
5739 if(args.size() == 0)
5740 if(!epee::string_tools::parse_hexstr_to_binbuff(args.front(), txid_data) || txid_data.size() != sizeof(crypto::hash))
5741 if(!epee::string_tools::parse_hexstr_to_binbuff(args.front(), txid_data) || txid_data.size() != sizeof(crypto::hash))
5742 if(!epee::string_tools::parse_hexstr_to_binbuff(args.front(), txid_data) || txid_data.size() != sizeof(crypto::hash))
5743 if(n > 1)
5744 if(args.size() != 1)
5745 if(!epee::string_tools::parse_hexstr_to_binbuff(args.front(), txid_data) || txid_data.size() != sizeof(crypto::hash))
5746 if(!epee::string_tools::parse_hexstr_to_binbuff(args.front(), txid_data) || txid_data.size() != sizeof(crypto::hash))
5747 if(!epee::string_tools::parse_hexstr_to_binbuff(args.front(), txid_data) || txid_data.size() != sizeof(crypto::hash))
5748 if(note.empty())
5749 if(n > 0)
5750 if(args.size() != 0)
5751 if(description.empty())
5752 if(!m_wallet->check_connection(&version))
5753 if(err.empty())
5754 if(description.empty())
5755 if(m_wallet->watch_only())
5756 else if(m_wallet->multisig(&ready, &threshold, &total))
5757 if(m_wallet->key_on_device())
5758 if(args.size() != 1)
5759 if(m_wallet->watch_only())
5760 if(m_wallet->multisig())
5761 if(m_wallet->ask_password() && !get_and_verify_password())
5762 if(!r)
5763 if(args.size() != 3)
5764 if(!r)
5765 if(!cryptonote::get_account_address_from_str(m_wallet->nettype(), info, address_string))
5766 if(!r)
5767 if(m_wallet->key_on_device())
5768 if(args.size() != 1)
5769 if(m_wallet->watch_only())
5770 if(m_wallet->ask_password() && !get_and_verify_password())
5771 if(m_wallet->confirm_export_overwrite() && !check_file_overwrite(filename))
5772 if(!m_wallet->export_key_images(filename))
5773 if(m_wallet->key_on_device())
5774 if(!m_trusted_daemon)
5775 if(args.size() != 1)
5776 if(height > 0)
5777 if(m_wallet->key_on_device())
5778 if(args.size() != 1)
5779 if(m_wallet->ask_password() && !get_and_verify_password())
5780 if(m_wallet->confirm_export_overwrite() && !check_file_overwrite(filename))
5781 header += std::string((const char *)&keys.m_spend_public_key, sizeof(crypto::public_key));
5782 header += std::string((const char *)&keys.m_view_public_key, sizeof(crypto::public_key));
5783 if(!r)
5784 if(m_wallet->key_on_device())
5785 if(args.size() != 1)
5786 if(!r)
5787 if(data.size() < magiclen || memcmp(data.data(), OUTPUT_EXPORT_FILE_MAGIC, magiclen))
5788 if(data.size() < magiclen || memcmp(data.data(), OUTPUT_EXPORT_FILE_MAGIC_LEGACY, magiclen))
5789 const size_t headerlen = 2 * sizeof(crypto::public_key);
5790 if(data.size() < headerlen)
5791 const crypto::public_key &public_view_key = *(const crypto::public_key *)&data[sizeof(crypto::public_key)];
5792 if(public_spend_key != keys.m_spend_public_key || public_view_key != keys.m_view_public_key)
5793 if(args.size() != 1)
5794 if(!epee::string_tools::parse_hexstr_to_binbuff(args.front(), txid_data) || txid_data.size() != sizeof(crypto::hash))
5795 if(!epee::string_tools::parse_hexstr_to_binbuff(args.front(), txid_data) || txid_data.size() != sizeof(crypto::hash))
5796 if(!epee::string_tools::parse_hexstr_to_binbuff(args.front(), txid_data) || txid_data.size() != sizeof(crypto::hash))
5797 if(pd.m_tx_hash == txid)
5798 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5799 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5800 if(bh >= last_block_height)
5801 if(i->first == txid)
5802 if(!dests.empty())
5803 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5804 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5805 if(pd.m_tx_hash == txid)
5806 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5807 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5808 if(i->second.m_double_spend_seen)
5809 if(i->first == txid)
5810 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5811 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5812 if(m_in_manual_refresh.load(std::memory_order_relaxed))
5813 if(do_not_relay)
5814 if(epee::file_io_utils::save_string_to_file(filename, blob_hex))
5815 if(command_line::get_windows_args(argptrs))
5816 if(!vm)
5817 if(!command.empty())
5818 if(!w.process_command(command))
5819 if(tools::password_container::is_prompting.load())
5820 if(type == CTRL_C_EVENT)
5821 if(type == SIGINT)
5822 bool get_tx_proof(const std::vector<std::string> &args);
5823 bool check_tx_proof(const std::vector<std::string> &args);
5824 bool get_spend_proof(const std::vector<std::string> &args);
5825 bool check_spend_proof(const std::vector<std::string> &args);
5826 bool get_reserve_proof(const std::vector<std::string> &args);
5827 bool check_reserve_proof(const std::vector<std::string> &args);
5828 if(node_update_threshold < current_time - m_blockchain_height_update_time || m_blockchain_height <= height)
5829 if(std::chrono::milliseconds(20) < current_time - m_print_time || force)
5830 if(err.empty())
5831 if(!cryptonote::get_account_address_from_str(info, m_wallet->m_wallet->nettype(), dst_addr))
5832 if(payment_id_str.length() == 16)
5833 if(!payment_id_str.empty() && !has_long_pid)
5834 if(has_long_pid && info.has_payment_id)
5835 if(info.has_payment_id)
5836 if(r)
5837 if(!row->m_is_subaddress && payment_id.length() > 16 && payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5838 if(!row->m_is_subaddress && payment_id.length() > 16 && payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5839 if(tools::wallet2::parse_short_payment_id(payment_id, payment_id_short))
5840 if(r)
5841 if(payment_id == row->getPaymentId())
5842 if(long_payment_id == row->getPaymentId())
5843 if(payment_id == long_row_payment_id)
5844if(IOS)
5845endif()
5846 if(!filename.empty())
5847 if(tx_file_exists && !overwrite)
5848 if(!r)
5849 if(!reason.empty())
5850 if(index < 0)
5851 auto itr = std::find_if(m_history.begin(), m_history.end(),
5852 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5853 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5854 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5855 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5856 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5857 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5858 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5859 if(payment_id.substr(16).find_first_not_of('0') == std::string::npos)
5860 if(m_wallet.watchOnly())
5861 if(!r)
5862 if(cryptonote::parse_tx_extra(cd.extra, tx_extra_fields))
5863 if(find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
5864 if(cryptonote::get_encrypted_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id8))
5865 if(!payment_id_string.empty())
5866 else if(cryptonote::get_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
5867 if(!payment_id_string.empty())
5868 if(ring_size < min_ring_size)
5869 if(has_encrypted_payment_id && !entry.is_subaddress)
5870 if(i == dests.end())
5871 if(cd.change_dts.amount > 0)
5872 if(it == dests.end())
5873 if(it->second.second < cd.change_dts.amount)
5874 if(cd.change_dts.amount > 0)
5875 if(first_known_non_zero_change_index == -1)
5876 if(memcmp(&cd.change_dts.addr, &get_tx(first_known_non_zero_change_index).change_dts.addr, sizeof(cd.change_dts.addr)))
5877 if(memcmp(&cd.change_dts.addr, &get_tx(first_known_non_zero_change_index).change_dts.addr, sizeof(cd.change_dts.addr)))
5878 if(it->second.second == 0)
5879 if(i != dests.end())
5880 if(dest_string.empty())
5881 if(change > 0)
5882 if(mixin < min_mixin)
5883 if(cryptonote::find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
5884 if(cryptonote::get_encrypted_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id8))
5885 else if(!cryptonote::get_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
5886 if(payment_id != crypto::null_hash)
5887 if(utx.dests.empty())
5888 if(mixin < min_mixin)
5889 if(height >= m_wallet->m_wallet->get_refresh_from_block_height() || height % 1000 == 0)
5890 if(m_listener)
5891 if(m_listener && m_wallet->synchronized())
5892 if(m_listener && m_wallet->synchronized())
5893 if(m_listener && m_wallet->synchronized())
5894 if(m_listener)
5895 if(m_listener)
5896 if(m_listener)
5897 if(m_listener)
5898 if(tools::wallet2::parse_short_payment_id(paiment_id, pid8))
5899 if(tools::wallet2::parse_long_payment_id(paiment_id, pid))
5900 if(!get_account_address_from_str(info, static_cast<cryptonote::network_type>(nettype), address_string))
5901 if(!epee::string_tools::parse_hexstr_to_binbuff(secret_key_string, key_data) || key_data.size() != sizeof(crypto::secret_key))
5902 if(!epee::string_tools::parse_hexstr_to_binbuff(secret_key_string, key_data) || key_data.size() != sizeof(crypto::secret_key))
5903 if(!epee::string_tools::parse_hexstr_to_binbuff(secret_key_string, key_data) || key_data.size() != sizeof(crypto::secret_key))
5904 if(!crypto::secret_key_to_public_key(key, pkey))
5905 if(isViewKey)
5906 if(!matchAddress)
5907 if(!get_account_address_from_str(info, static_cast<cryptonote::network_type>(nettype), str))
5908 if(!info.has_payment_id)
5909 if(keys_file_exists || wallet_file_exists)
5910 if(keys_file_exists || wallet_file_exists)
5911 if(!get_account_address_from_str(info, m_wallet->nettype(), address_string))
5912 if(!spendkey_string.empty())
5913 if(!epee::string_tools::parse_hexstr_to_binbuff(spendkey_string, spendkey_data) || spendkey_data.size() != sizeof(crypto::secret_key))
5914 if(!epee::string_tools::parse_hexstr_to_binbuff(spendkey_string, spendkey_data) || spendkey_data.size() != sizeof(crypto::secret_key))
5915 if(!epee::string_tools::parse_hexstr_to_binbuff(spendkey_string, spendkey_data) || spendkey_data.size() != sizeof(crypto::secret_key))
5916 if(viewkey_string.empty())
5917 if(!epee::string_tools::parse_hexstr_to_binbuff(viewkey_string, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
5918 if(!epee::string_tools::parse_hexstr_to_binbuff(viewkey_string, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
5919 if(!epee::string_tools::parse_hexstr_to_binbuff(viewkey_string, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
5920 if(has_spendkey)
5921 if(!crypto::secret_key_to_public_key(spendkey, pkey))
5922 if(info.address.m_spend_public_key != pkey)
5923 if(!crypto::secret_key_to_public_key(viewkey, pkey))
5924 if(info.address.m_view_public_key != pkey)
5925 if(has_spendkey)
5926 if(!wallet_file_exists)
5927 if(seed.empty())
5928 if(!crypto::ElectrumWords::words_to_bytes(seed, recovery_key, old_language))
5929 if(old_language == crypto::ElectrumWords::old_language_name)
5930 if(store)
5931 if(status() != Status_Critical)
5932 if(m_wallet)
5933 if(!tools::wallet2::parse_short_payment_id(payment_id, pid))
5934 if(path.empty())
5935 if(daemon_username != "")
5936 if(!m_wallet->light_wallet_import_wallet_request(response))
5937 if(m_wallet->light_wallet())
5938 if(m_wallet->light_wallet())
5939 if(!m_is_connected)
5940 if(!err.empty())
5941 if(m_wallet->light_wallet())
5942 if(!m_is_connected)
5943 if(!err.empty())
5944 if(result == 0)
5945 if(connected() == Wallet::ConnectionStatus_Disconnected)
5946 if(millis > MAX_REFRESH_INTERVAL_MILLIS)
5947 if(!m_wallet->load_unsigned_tx(unsigned_filename, transaction->m_unsigned_tx_set))
5948 if(!transaction->m_unsigned_tx_set.transfers.empty())
5949 if(!r)
5950 if(!transaction->commit())
5951 if(m_wallet->watch_only())
5952 if(!m_wallet->export_key_images(filename))
5953 if(!trustedDaemon())
5954 if(fake_outs_count == 0)
5955 if(!cryptonote::get_account_address_from_str(info, m_wallet->nettype(), dst_addr))
5956 if(!info.has_payment_id && !payment_id.empty())
5957 if(r)
5958 if(r)
5959 if(!r)
5960 else if(info.has_payment_id)
5961 if(!r)
5962 if(amount)
5963 if(subaddr_indices.empty())
5964 if(!epee::string_tools::parse_hexstr_to_binbuff(txid, txid_data) || txid_data.size() != sizeof(crypto::hash))
5965 if(!epee::string_tools::parse_hexstr_to_binbuff(txid, txid_data) || txid_data.size() != sizeof(crypto::hash))
5966 if(!epee::string_tools::parse_hexstr_to_binbuff(txid, txid_data) || txid_data.size() != sizeof(crypto::hash))
5967 if(!epee::string_tools::parse_hexstr_to_binbuff(txid, txid_data) || txid_data.size() != sizeof(crypto::hash))
5968 if(!epee::string_tools::parse_hexstr_to_binbuff(txid, txid_data) || txid_data.size() != sizeof(crypto::hash))
5969 if(!epee::string_tools::parse_hexstr_to_binbuff(txid, txid_data) || txid_data.size() != sizeof(crypto::hash))
5970 if(!epee::string_tools::hex_to_pod(txid_str, txid))
5971 if(m_wallet->get_tx_key(txid, tx_key, additional_tx_keys))
5972 if(!epee::string_tools::hex_to_pod(txid_str, txid))
5973 if(!epee::string_tools::hex_to_pod(tx_key_str.substr(0, 64), tx_key))
5974 if(!epee::string_tools::hex_to_pod(tx_key_str.substr(0, 64), additional_tx_keys.back()))
5975 if(!cryptonote::get_account_address_from_str(info, m_wallet->nettype(), address_str))
5976std::string WalletImpl::getTxProof(const std::string &txid_str, const std::string &address_str, const std::string &message) const
5977 if(!epee::string_tools::hex_to_pod(txid_str, txid))
5978 if(!cryptonote::get_account_address_from_str(info, m_wallet->nettype(), address_str))
5979 return m_wallet->get_tx_proof(txid, info.address, info.is_subaddress, message);
5980bool WalletImpl::checkTxProof(const std::string &txid_str, const std::string &address_str, const std::string &message, const std::string &signature, bool &good, uint64_t &received, bool &in_pool, uint64_t &confirmations)
5981 if(!epee::string_tools::hex_to_pod(txid_str, txid))
5982 if(!cryptonote::get_account_address_from_str(info, m_wallet->nettype(), address_str))
5983 good = m_wallet->check_tx_proof(txid, info.address, info.is_subaddress, message, signature, received, in_pool, confirmations);
5984std::string WalletImpl::getSpendProof(const std::string &txid_str, const std::string &message) const
5985 if(!epee::string_tools::hex_to_pod(txid_str, txid))
5986 return m_wallet->get_spend_proof(txid, message);
5987bool WalletImpl::checkSpendProof(const std::string &txid_str, const std::string &message, const std::string &signature, bool &good) const
5988 if(!epee::string_tools::hex_to_pod(txid_str, txid))
5989 good = m_wallet->check_spend_proof(txid, message, signature);
5990std::string WalletImpl::getReserveProof(bool all, uint32_t account_index, uint64_t amount, const std::string &message) const
5991 if(!all)
5992 return m_wallet->get_reserve_proof(account_minreserve, message);
5993bool WalletImpl::checkReserveProof(const std::string &address, const std::string &message, const std::string &signature, bool &good, uint64_t &total, uint64_t &spent) const
5994 if(!cryptonote::get_account_address_from_str(info, m_wallet->nettype(), address))
5995 if(info.is_subaddress)
5996 good = m_wallet->check_reserve_proof(info.address, message, signature, total, spent);
5997 if(!cryptonote::get_account_address_from_str(info, m_wallet->nettype(), address))
5998 if(!result)
5999 if(!m_is_connected)
6000 if(!m_wallet->light_wallet() && (version >> 16) != CORE_RPC_VERSION_MAJOR)
6001 if(m_refreshThreadDone)
6002 if(m_refreshIntervalMillis > 0)
6003 if(m_refreshEnabled)
6004 if(m_wallet->light_wallet() || daemonSynced())
6005 if(!m_synchronized)
6006 if(m_history->count() == 0)
6007 if(m_wallet2Callback->getListener())
6008 if(!m_refreshEnabled)
6009 if(!m_refreshThreadDone)
6010 if(!m_refreshThreadDone)
6011 if(!m_wallet->init(daemon_address, m_daemon_login, upper_transaction_size_limit, ssl))
6012 if(isNewWallet() && daemonSynced())
6013 if(m_rebuildWalletCache)
6014 if(Utils::isAddressLocal(daemon_address))
6015 if(!trustedDaemon())
6016 if(!epee::string_tools::hex_to_pod(str, pkey))
6017 if(!ret)
6018 if(!epee::string_tools::hex_to_pod(pubkey, raw_pubkey))
6019 if(!ret)
6020 if(!epee::string_tools::hex_to_pod(key_image, raw_key_image))
6021 if(!ret)
6022 if(!epee::string_tools::hex_to_pod(txid, raw_txid))
6023 if(!ret)
6024 if(!epee::string_tools::hex_to_pod(key_image, raw_key_image))
6025 if(!ret)
6026 virtual std::string getTxProof(const std::string &txid, const std::string &address, const std::string &message) const;
6027 virtual bool checkTxProof(const std::string &txid, const std::string &address, const std::string &message, const std::string &signature, bool &good, uint64_t &received, bool &in_pool, uint64_t &confirmations);
6028 virtual std::string getSpendProof(const std::string &txid, const std::string &message) const;
6029 virtual bool checkSpendProof(const std::string &txid, const std::string &message, const std::string &signature, bool &good) const;
6030 virtual std::string getReserveProof(bool all, uint32_t account_index, uint64_t amount, const std::string &message) const;
6031 virtual bool checkReserveProof(const std::string &address, const std::string &message, const std::string &signature, bool &good, uint64_t &total, uint64_t &spent) const;
6032 virtual std::string getTxProof(const std::string &txid, const std::string &address, const std::string &message) const = 0;
6033 virtual bool checkTxProof(const std::string &txid, const std::string &address, const std::string &message, const std::string &signature, bool &good, uint64_t &received, bool &in_pool, uint64_t &confirmations) = 0;
6034 virtual std::string getSpendProof(const std::string &txid, const std::string &message) const = 0;
6035 virtual bool checkSpendProof(const std::string &txid, const std::string &message, const std::string &signature, bool &good) const = 0;
6036 virtual std::string getReserveProof(bool all, uint32_t account_index, uint64_t amount, const std::string &message) const = 0;
6037 virtual bool checkReserveProof(const std::string &address, const std::string &message, const std::string &signature, bool &good, uint64_t &total, uint64_t &spent) const = 0;
6038 if(restoreHeight > 0)
6039 if(restoreHeight > 0)
6040 if(!wallet_)
6041 if(!result)
6042 if(keys_file_exists)
6043 if(!boost::filesystem::is_directory(path))
6044 if(!boost::filesystem::is_regular_file(itr->status()))
6045 if(matched)
6046 if(boost::filesystem::exists(wallet_file))
6047 if(m_http_client.is_connected())
6048 if(!epee::net_utils::invoke_http_json("/json_rpc", req_t, resp_t, m_http_client))
6049 if(version)
6050 if(!epee::net_utils::invoke_http_json("/getinfo", ireq, ires, m_http_client))
6051 if(!epee::net_utils::invoke_http_json("/getinfo", ireq, ires, m_http_client))
6052 if(!epee::net_utils::invoke_http_json("/getinfo", ireq, ires, m_http_client))
6053 if(!epee::net_utils::invoke_http_json("/mining_status", mreq, mres, m_http_client))
6054 if(!mres.active)
6055 if(!epee::net_utils::invoke_http_json("/getinfo", ireq, ires, m_http_client))
6056 if(!epee::net_utils::invoke_http_json("/mining_status", mreq, mres, m_http_client))
6057 if(!epee::net_utils::invoke_http_json("/start_mining", mreq, mres, m_http_client))
6058 if(!epee::net_utils::invoke_http_json("/stop_mining", mreq, mres, m_http_client))
6059 if(!tools::check_updates(software, buildtag, version, hash))
6060 if(tools::vercmp(version.c_str(), RYO_VERSION) > 0)
6061 if(!g_walletManager)
6062 if(IOS)
6063 endif()
6064endif()
6065 if(m_rpc_version == 0)
6066 if(m_height == 0 || now >= m_height_time + 30) // re-cache every 30 seconds
6067 if(m_target_height == 0 || now >= m_target_height_time + 30) // re-cache every 30 seconds
6068 if(m_earliest_height[version] == 0)
6069static const MDB_val zerokeyval = {sizeof(zerokey), (void *)zerokey};
6070 if(va[n] == vb[n])
6071 THROW_WALLET_EXCEPTION_IF(read <= 0 || read > 256, tools::error::wallet_internal_error, "Internal error decompressing ring");
6072 if(!boost::filesystem::is_directory(filename))
6073 uint8_t buffer[sizeof(key_image) + sizeof(key) + sizeof(salt)];
6074 uint8_t buffer[sizeof(key_image) + sizeof(key) + sizeof(salt)];
6075 uint8_t buffer[sizeof(key_image) + sizeof(key) + sizeof(salt)];
6076 memcpy(buffer, &key_image, sizeof(key_image));
6077 memcpy(buffer + sizeof(key_image), &key, sizeof(key));
6078 memcpy(buffer + sizeof(key_image), &key, sizeof(key));
6079 memcpy(buffer + sizeof(key_image) + sizeof(key), salt, sizeof(salt));
6080 memcpy(buffer + sizeof(key_image) + sizeof(key), salt, sizeof(salt));
6081 memcpy(buffer + sizeof(key_image) + sizeof(key), salt, sizeof(salt));
6082 crypto::cn_fast_hash(buffer, sizeof(buffer), hash.data);
6083 static_assert(sizeof(hash) >= CHACHA_IV_SIZE, "Incompatible hash and chacha IV sizes");
6084 ciphertext.resize(plaintext.size() + sizeof(iv));
6085 crypto::chacha20(plaintext.data(), plaintext.size(), key, iv, &ciphertext[sizeof(iv)]);
6086 memcpy(&ciphertext[0], &iv, sizeof(iv));
6087 return encrypt(std::string((const char *)&key_image, sizeof(key_image)), key_image, key);
6088 THROW_WALLET_EXCEPTION_IF(ciphertext.size() < sizeof(iv), tools::error::wallet_internal_error, "Bad ciphertext text");
6089 THROW_WALLET_EXCEPTION_IF(ciphertext.size() < sizeof(iv), tools::error::wallet_internal_error, "Bad ciphertext text");
6090 plaintext.resize(ciphertext.size() - sizeof(iv));
6091 crypto::chacha20(ciphertext.data() + sizeof(iv), ciphertext.size() - sizeof(iv), key, iv, &plaintext[0]);
6092 crypto::chacha20(ciphertext.data() + sizeof(iv), ciphertext.size() - sizeof(iv), key, iv, &plaintext[0]);
6093 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to set ring for key image in LMDB table: " + std::string(mdb_strerror(dbr)));
6094 if(ret)
6095 if(ret)
6096 if(size_used + needed > mei.me_mapsize)
6097 if(si.available < needed)
6098 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to create LDMB environment: " + std::string(mdb_strerror(dbr)));
6099 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to set max env dbs: " + std::string(mdb_strerror(dbr)));
6100 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to open rings database file '" + actual_filename + "': " + std::string(mdb_strerror(dbr)));
6101 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to create LMDB transaction: " + std::string(mdb_strerror(dbr)));
6102 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to open LMDB dbi: " + std::string(mdb_strerror(dbr)));
6103 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to open LMDB dbi: " + std::string(mdb_strerror(dbr)));
6104 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to commit txn creating/opening database: " + std::string(mdb_strerror(dbr)));
6105 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to set env map size");
6106 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to create LMDB transaction: " + std::string(mdb_strerror(dbr)));
6107 if(in.type() != typeid(cryptonote::txin_to_key))
6108 if(ring_size == 1)
6109 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to commit txn adding ring to database: " + std::string(mdb_strerror(dbr)));
6110 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to set env map size");
6111 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to create LMDB transaction: " + std::string(mdb_strerror(dbr)));
6112 if(in.type() != typeid(cryptonote::txin_to_key))
6113 if(ring_size == 1)
6114 THROW_WALLET_EXCEPTION_IF(dbr && dbr != MDB_NOTFOUND, tools::error::wallet_internal_error, "Failed to look for key image in LMDB table: " + std::string(mdb_strerror(dbr)));
6115 if(dbr == MDB_NOTFOUND)
6116 THROW_WALLET_EXCEPTION_IF(data.mv_size <= 0, tools::error::wallet_internal_error, "Invalid ring data size");
6117 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to remove ring to database: " + std::string(mdb_strerror(dbr)));
6118 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to commit txn removing ring to database: " + std::string(mdb_strerror(dbr)));
6119 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to set env map size: " + std::string(mdb_strerror(dbr)));
6120 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to create LMDB transaction: " + std::string(mdb_strerror(dbr)));
6121 THROW_WALLET_EXCEPTION_IF(dbr && dbr != MDB_NOTFOUND, tools::error::wallet_internal_error, "Failed to look for key image in LMDB table: " + std::string(mdb_strerror(dbr)));
6122 if(dbr == MDB_NOTFOUND)
6123 THROW_WALLET_EXCEPTION_IF(data.mv_size <= 0, tools::error::wallet_internal_error, "Invalid ring data size");
6124 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to commit txn getting ring from database: " + std::string(mdb_strerror(dbr)));
6125 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to set env map size: " + std::string(mdb_strerror(dbr)));
6126 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to create LMDB transaction: " + std::string(mdb_strerror(dbr)));
6127 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to commit txn setting ring to database: " + std::string(mdb_strerror(dbr)));
6128 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to set env map size: " + std::string(mdb_strerror(dbr)));
6129 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to create LMDB transaction: " + std::string(mdb_strerror(dbr)));
6130 data.mv_size = sizeof(output);
6131 if(dbr == MDB_KEYEXIST)
6132 if(dbr == MDB_NOTFOUND)
6133 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to create cursor for blackballs table: " + std::string(mdb_strerror(dbr)));
6134 THROW_WALLET_EXCEPTION_IF(dbr && dbr != MDB_NOTFOUND, tools::error::wallet_internal_error, "Failed to lookup in blackballs table: " + std::string(mdb_strerror(dbr)));
6135 if(dbr == MDB_NOTFOUND)
6136 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to query blackballs table: " + std::string(mdb_strerror(dbr)));
6137 THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to commit txn blackballing output to database: " + std::string(mdb_strerror(dbr)));
6138 if(testnet)
6139 if(string_tools::get_extension(keys_file) == "keys")
6140 THROW_WALLET_EXCEPTION_IF(!daemon_address.empty() && !daemon_host.empty() && 0 != daemon_port,
6141 if(command_line::has_arg(vm, opts.daemon_login))
6142 if(!parsed)
6143 if(daemon_host.empty())
6144 if(!daemon_port)
6145 if(!daemon_address.empty())
6146 THROW_WALLET_EXCEPTION_IF(!std::regex_match(daemon_address, valid_address),
6147 if(command_line::get_arg(vm, opts.force_network))
6148 if(command_line::has_arg(vm, opts.password) && command_line::has_arg(vm, opts.password_file))
6149 if(command_line::has_arg(vm, opts.password))
6150 if(command_line::has_arg(vm, opts.password_file))
6151 THROW_WALLET_EXCEPTION_IF(!r, tools::error::wallet_internal_error, tools::wallet2::tr("the password file specified could not be read"));
6152 boost::trim_right_if(password, boost::is_any_of("\r\n"));
6153 boost::trim_right_if(password, boost::is_any_of("\r\n"));
6154 THROW_WALLET_EXCEPTION_IF(!password_prompter, tools::error::wallet_internal_error, tools::wallet2::tr("no password specified; use --prompt-for-password to prompt for a password"));
6155 if(!epee::file_io_utils::load_file_to_string(json_file, buf))
6156 if(json.Parse(buf.c_str()).HasParseError())
6157 THROW_WALLET_EXCEPTION_IF(field_version > current_version, tools::error::wallet_internal_error,
6158 if(field_viewkey_found)
6159 if(!epee::string_tools::parse_hexstr_to_binbuff(field_viewkey, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
6160 if(!epee::string_tools::parse_hexstr_to_binbuff(field_viewkey, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
6161 if(!epee::string_tools::parse_hexstr_to_binbuff(field_viewkey, viewkey_data) || viewkey_data.size() != sizeof(crypto::secret_key))
6162 if(!crypto::secret_key_to_public_key(viewkey, pkey))
6163 if(field_spendkey_found)
6164 if(!epee::string_tools::parse_hexstr_to_binbuff(field_spendkey, spendkey_data) || spendkey_data.size() != sizeof(crypto::secret_key))
6165 if(!epee::string_tools::parse_hexstr_to_binbuff(field_spendkey, spendkey_data) || spendkey_data.size() != sizeof(crypto::secret_key))
6166 if(!epee::string_tools::parse_hexstr_to_binbuff(field_spendkey, spendkey_data) || spendkey_data.size() != sizeof(crypto::secret_key))
6167 if(!crypto::secret_key_to_public_key(spendkey, pkey))
6168 if(field_seed_found)
6169 if(!crypto::Electrum25Words::words_to_bytes(field_seed, recovery_key, old_language))
6170 if(!field_seed_found && !field_viewkey_found && !field_spendkey_found)
6171 if(field_seed_found && (field_viewkey_found || field_spendkey_found))
6172 if(field_address_found)
6173 if(!get_account_address_from_str(nettype, info, field_address))
6174 if(field_viewkey_found)
6175 if(!crypto::secret_key_to_public_key(viewkey, pkey))
6176 if(info.address.m_view_public_key != pkey)
6177 if(field_spendkey_found)
6178 if(!crypto::secret_key_to_public_key(spendkey, pkey))
6179 if(info.address.m_spend_public_key != pkey)
6180 if(!field_seed.empty())
6181 else if(field_viewkey.empty() && !field_spendkey.empty())
6182 if(!crypto::secret_key_to_public_key(viewkey, address.m_view_public_key))
6183 if(field_spendkey.empty())
6184 if(field_address_found)
6185 if(!get_account_address_from_str(nettype, info, field_address))
6186 if(!crypto::secret_key_to_public_key(spendkey, address.m_spend_public_key))
6187 if(do_generate())
6188 if(!status)
6189 THROW_WALLET_EXCEPTION_IF(status->empty(), tools::error::no_connection_to_daemon, method);
6190 THROW_WALLET_EXCEPTION_IF(*status == CORE_RPC_STATUS_BUSY, tools::error::daemon_busy, method);
6191 THROW_WALLET_EXCEPTION_IF(*status != CORE_RPC_STATUS_OK, tools::error::wallet_generic_rpc_error, method, *status);
6192 if(!first)
6193 if(i->second.m_pd.m_tx_hash == pd.m_pd.m_tx_hash && i->second.m_pd.m_subaddr_index == pd.m_pd.m_subaddr_index)
6194 if(short_chain_history.size() > N)
6195 if(bulletproof)
6196 if(find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
6197 if(get_encrypted_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id8))
6198 if(ptx.dests.empty())
6199 if(payment_id != null_hash8)
6200 THROW_WALLET_EXCEPTION_IF(!add_extra_nonce_to_tx_extra(construction_data.extra, extra_nonce),
6201 if(idx > uint32_max - extra)
6202 if(!pwd)
6203 if(wallet)
6204 if(!pwd)
6205 if(m_http_client.is_connected())
6206 if(!has_25_seed && !has_14_seed)
6207 if(seed_language.empty())
6208 if(has_25_seed)
6209 if(!crypto::Electrum25Words::bytes_to_words(key, electrum_words, seed_language))
6210 if(!crypto::Electrum14Words::bytes_to_words(key, get_account().get_account_options(), electrum_words, seed_language))
6211 if(!multisig(&ready, &threshold, &total))
6212 if(!ready)
6213 if(!raw && seed_language.empty())
6214 data.append((const char *)&threshold, sizeof(uint32_t));
6215 data.append((const char *)&total, sizeof(uint32_t));
6216 data.append((const char *)&skey, sizeof(skey));
6217 data.append((const char *)&pkey, sizeof(pkey));
6218 data.append((const char *)&skey, sizeof(skey));
6219 data.append((const char *)&pkey, sizeof(pkey));
6220 data.append((const char *)&skey, sizeof(skey));
6221 data.append((const char *)&signer, sizeof(signer));
6222 if(!passphrase.empty())
6223 if(raw)
6224 if(!crypto::Electrum25Words::bytes_to_words(data.data(), data.size(), seed, seed_language))
6225 if(m_account.is_kurz())
6226 THROW_WALLET_EXCEPTION_IF(index_major >= m_subaddress_labels.size(), error::account_index_outofbound);
6227 if(m_subaddress_labels.size() <= index.major)
6228 else if(m_subaddress_labels[index.major].size() <= index.minor)
6229 if(index.major >= m_subaddress_labels.size() || index.minor >= m_subaddress_labels[index.major].size())
6230 THROW_WALLET_EXCEPTION_IF(index.major >= m_subaddress_labels.size(), error::account_index_outofbound);
6231 THROW_WALLET_EXCEPTION_IF(index.minor >= m_subaddress_labels[index.major].size(), error::address_index_outofbound);
6232 THROW_WALLET_EXCEPTION_IF(major > 0xffffffff, error::wallet_internal_error, "Subaddress major lookahead is too large");
6233 THROW_WALLET_EXCEPTION_IF(minor > 0xffffffff, error::wallet_internal_error, "Subaddress minor lookahead is too large");
6234 if(o.target.type() != typeid(txout_to_key))
6235 if(tx_scan_info.received)
6236 THROW_WALLET_EXCEPTION_IF(i >= tx.vout.size(), error::wallet_internal_error, "Invalid vout index");
6237 if(m_multisig)
6238 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key image");
6239 THROW_WALLET_EXCEPTION_IF(tx_scan_info.in_ephemeral.pub != boost::get<cryptonote::txout_to_key>(tx.vout[i].target).key,
6240 if(tx_scan_info.money_transfered == 0)
6241 if(!miner_tx && !pool)
6242 if(!parse_tx_extra(tx.extra, tx_extra_fields))
6243 if(!find_tx_extra_field_by_type(tx_extra_fields, pub_key_field, pk_index++))
6244 if(pk_index > 1)
6245 if(0 != m_callback)
6246 if(!hwdev.generate_key_derivation(tx_pub_key, keys.m_view_secret_key, derivation))
6247 static_assert(sizeof(derivation) == sizeof(rct::key), "Mismatched sizes of key_derivation and rct::key");
6248 static_assert(sizeof(derivation) == sizeof(rct::key), "Mismatched sizes of key_derivation and rct::key");
6249 memcpy(&derivation, rct::identity().bytes, sizeof(derivation));
6250 if(pk_index == 1)
6251 if(!hwdev.generate_key_derivation(additional_tx_pub_keys[i], keys.m_view_secret_key, additional_derivations.back()))
6252 if(miner_tx && m_refresh_type == RefreshNoCoinbase)
6253 else if(miner_tx && m_refresh_type == RefreshOptimizeCoinbase)
6254 THROW_WALLET_EXCEPTION_IF(tx_scan_info[0].error, error::acc_outs_lookup_error, tx, tx_pub_key, m_account.get_keys());
6255 if(tx_scan_info[0].received)
6256 tpool.submit(&waiter, boost::bind(&wallet2::check_acc_out_precomp_once, this, std::cref(tx.vout[i]), std::cref(derivation), std::cref(additional_derivations), i,
6257 tpool.submit(&waiter, boost::bind(&wallet2::check_acc_out_precomp_once, this, std::cref(tx.vout[i]), std::cref(derivation), std::cref(additional_derivations), i,
6258 tpool.submit(&waiter, boost::bind(&wallet2::check_acc_out_precomp_once, this, std::cref(tx.vout[i]), std::cref(derivation), std::cref(additional_derivations), i,
6259 std::ref(tx_scan_info[i]), std::ref(output_found[i])));
6260 std::ref(tx_scan_info[i]), std::ref(output_found[i])));
6261 THROW_WALLET_EXCEPTION_IF(tx_scan_info[i].error, error::acc_outs_lookup_error, tx, tx_pub_key, m_account.get_keys());
6262 if(tx_scan_info[i].received)
6263 else if(tx.vout.size() > 1 && tools::threadpool::getInstance().get_max_concurrency() > 1)
6264 tpool.submit(&waiter, boost::bind(&wallet2::check_acc_out_precomp_once, this, std::cref(tx.vout[i]), std::cref(derivation), std::cref(additional_derivations), i,
6265 tpool.submit(&waiter, boost::bind(&wallet2::check_acc_out_precomp_once, this, std::cref(tx.vout[i]), std::cref(derivation), std::cref(additional_derivations), i,
6266 tpool.submit(&waiter, boost::bind(&wallet2::check_acc_out_precomp_once, this, std::cref(tx.vout[i]), std::cref(derivation), std::cref(additional_derivations), i,
6267 std::ref(tx_scan_info[i]), std::ref(output_found[i])));
6268 std::ref(tx_scan_info[i]), std::ref(output_found[i])));
6269 THROW_WALLET_EXCEPTION_IF(tx_scan_info[i].error, error::acc_outs_lookup_error, tx, tx_pub_key, m_account.get_keys());
6270 if(tx_scan_info[i].received)
6271 THROW_WALLET_EXCEPTION_IF(tx_scan_info[i].error, error::acc_outs_lookup_error, tx, tx_pub_key, m_account.get_keys());
6272 if(tx_scan_info[i].received)
6273 if(!outs.empty() && num_vouts_received > 0)
6274 if(!pool)
6275 THROW_WALLET_EXCEPTION_IF(tx.vout.size() != o_indices.size(), error::wallet_internal_error,
6276 THROW_WALLET_EXCEPTION_IF(tx.vout.size() <= o, error::wallet_internal_error, "wrong out in transaction: internal index=" +
6277 THROW_WALLET_EXCEPTION_IF(kit != m_pub_keys.end() && kit->second >= m_transfers.size(),
6278 if(kit == m_pub_keys.end())
6279 if(!pool)
6280 if(tx.vout[o].amount == 0)
6281 else if(miner_tx && tx.version >= 2)
6282 if(!m_multisig && !m_watch_only)
6283 if(m_multisig)
6284 THROW_WALLET_EXCEPTION_IF(!m_multisig_rescan_k && m_multisig_rescan_info,
6285 if(m_multisig_rescan_info && m_multisig_rescan_info->front().size() >= m_transfers.size())
6286 if(0 != m_callback)
6287 else if(m_transfers[kit->second].m_spent || m_transfers[kit->second].amount() >= tx_scan_info[o].amount)
6288 THROW_WALLET_EXCEPTION_IF(tx_money_got_in_outs[tx_scan_info[o].received->index] < tx_scan_info[o].amount,
6289 THROW_WALLET_EXCEPTION_IF(tx_money_got_in_outs[tx_scan_info[o].received->index] < tx_scan_info[o].amount,
6290 THROW_WALLET_EXCEPTION_IF(m_transfers[kit->second].amount() > tx_scan_info[o].amount,
6291 if(!pool)
6292 if(tx.vout[o].amount == 0)
6293 else if(miner_tx && tx.version >= 2)
6294 if(m_multisig)
6295 THROW_WALLET_EXCEPTION_IF(!m_multisig_rescan_k && m_multisig_rescan_info,
6296 if(m_multisig_rescan_info && m_multisig_rescan_info->front().size() >= m_transfers.size())
6297 THROW_WALLET_EXCEPTION_IF(td.get_public_key() != tx_scan_info[o].in_ephemeral.pub, error::wallet_internal_error, "Inconsistent public keys");
6298 THROW_WALLET_EXCEPTION_IF(td.m_spent, error::wallet_internal_error, "Inconsistent spent status");
6299 if(0 != m_callback)
6300 if(in.type() != typeid(cryptonote::txin_to_key))
6301 if(it != m_key_images.end())
6302 if(amount > 0)
6303 if(amount != td.amount())
6304 if(subaddr_account && *subaddr_account != td.m_subaddr_index.major)
6305 if(!pool)
6306 if(0 != m_callback)
6307 if(tx_money_spent_in_ins > 0 && !pool)
6308 if(tx_money_spent_in_ins == self_received + fee)
6309 THROW_WALLET_EXCEPTION_IF(i == m_confirmed_txs.end(), error::wallet_internal_error,
6310 if(subaddr_account && i->first.major == *subaddr_account)
6311 if(tx_money_got_in_outs.size() > 0)
6312 if(find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
6313 if(get_encrypted_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id8))
6314 if(tx_pub_key != null_pkey)
6315 if(!m_account.get_device().decrypt_payment_id(payment_id8, tx_pub_key, m_account.get_keys().m_view_secret_key))
6316 else if(get_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
6317 else if(get_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
6318 if(pool)
6319 if(0 != m_callback)
6320 if(m_unconfirmed_txs.empty())
6321 if(unconf_it != m_unconfirmed_txs.end())
6322 if(store_tx_info())
6323 if(entry.second)
6324 if(find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
6325 if(in.type() != typeid(cryptonote::txin_to_key))
6326 THROW_WALLET_EXCEPTION_IF(bche.txs.size() + 1 != o_indices.indices.size(), error::wallet_internal_error,
6327 if(!m_explicit_refresh_from_block_height || (b.timestamp + 60 * 60 * 24 > m_account.get_createtime() && height >= m_refresh_from_block_height))
6328 THROW_WALLET_EXCEPTION_IF(bche.txs.size() != b.tx_hashes.size(), error::wallet_internal_error, "Wrong amount of transactions for block");
6329 THROW_WALLET_EXCEPTION_IF(!r, error::tx_parse_error, txblob);
6330 if(!(height % 100))
6331 if(0 != m_callback)
6332 if(!sz)
6333 if(sz - current_back_offset == 0)
6334 if(i < 10)
6335 if(!base_included)
6336 if(m_blockchain.offset())
6337 if(!error)
6338 if(!!result)
6339 THROW_WALLET_EXCEPTION_IF(result->empty(), tools::error::no_connection_to_daemon, "getversion");
6340 THROW_WALLET_EXCEPTION_IF(*result == CORE_RPC_STATUS_BUSY, tools::error::daemon_busy, "getversion");
6341 if(*result != CORE_RPC_STATUS_OK)
6342 if(rpc_version >= MAKE_CORE_RPC_VERSION(1, 7))
6343 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "getblocks.bin");
6344 THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "getblocks.bin");
6345 THROW_WALLET_EXCEPTION_IF(res.status != CORE_RPC_STATUS_OK, error::get_blocks_error, res.status);
6346 THROW_WALLET_EXCEPTION_IF(res.blocks.size() != res.output_indices.size(), error::wallet_internal_error,
6347 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "gethashes.bin");
6348 THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "gethashes.bin");
6349 THROW_WALLET_EXCEPTION_IF(res.status != CORE_RPC_STATUS_OK, error::get_hashes_error, res.status);
6350 THROW_WALLET_EXCEPTION_IF(blocks.size() != o_indices.size(), error::wallet_internal_error, "size mismatch");
6351 THROW_WALLET_EXCEPTION_IF(!m_blockchain.is_in_bounds(current_index), error::wallet_internal_error, "Index out of bounds of hashchain");
6352 if(threads > 1)
6353 tpool.submit(&waiter, boost::bind(&wallet2::parse_block_round, this, std::cref(tmpblocki->block),
6354 std::ref(round_blocks[i]), std::ref(round_block_hashes[i]), std::ref(error[i])));
6355 std::ref(round_blocks[i]), std::ref(round_block_hashes[i]), std::ref(error[i])));
6356 std::ref(round_blocks[i]), std::ref(round_block_hashes[i]), std::ref(error[i])));
6357 THROW_WALLET_EXCEPTION_IF(error[i], error::block_parse_error, tmpblocki->block);
6358 if(current_index >= m_blockchain.size())
6359 else if(bl_id != m_blockchain[current_index])
6360 THROW_WALLET_EXCEPTION_IF(current_index == start_height, error::wallet_internal_error,
6361 THROW_WALLET_EXCEPTION_IF(!r, error::block_parse_error, bl_entry.block);
6362 if(current_index >= m_blockchain.size())
6363 else if(bl_id != m_blockchain[current_index])
6364 THROW_WALLET_EXCEPTION_IF(current_index == start_height, error::wallet_internal_error,
6365 THROW_WALLET_EXCEPTION_IF(!ok, error::block_parse_error, i->block);
6366 if(it2 == txid)
6367 if(!found)
6368 if(0 != m_callback)
6369 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_transaction_pool_hashes.bin");
6370 THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_transaction_pool_hashes.bin");
6371 THROW_WALLET_EXCEPTION_IF(res.status != CORE_RPC_STATUS_OK, error::get_tx_pool_error);
6372 if(it2 == txid)
6373 if(!found)
6374 if(pit->second.m_state == wallet2::unconfirmed_transfer_details::pending)
6375 else if(pit->second.m_state == wallet2::unconfirmed_transfer_details::pending_not_in_pool && refreshed)
6376 if(pit->second.m_tx.vin[vini].type() == typeid(txin_to_key))
6377 if(td.m_key_image == tx_in_to_key.k_image)
6378 if(refreshed)
6379 if(up.second.m_pd.m_tx_hash == txid)
6380 if(m_scanned_pool_txs[0].find(txid) != m_scanned_pool_txs[0].end() || m_scanned_pool_txs[1].find(txid) != m_scanned_pool_txs[1].end())
6381 if(!txid_found_in_up)
6382 if(!txid_found_in_up)
6383 if(i.first == txid)
6384 if(subaddr_index != m_subaddresses.end() && subaddr_index->second.major != utd.m_subaddr_account)
6385 if(!found)
6386 if(!txids.empty())
6387 if(r && res.status == CORE_RPC_STATUS_OK)
6388 if(res.txs.size() == txids.size())
6389 if(tx_entry.in_pool)
6390 if(epee::string_tools::parse_hexstr_to_binbuff(tx_entry.as_hex, bd))
6391 if(epee::string_tools::parse_hexstr_to_binbuff(tx_entry.as_hex, bd))
6392 if(cryptonote::parse_and_validate_tx_from_blob(bd, tx, tx_hash, tx_prefix_hash))
6393 const std::vector<std::pair<crypto::hash, bool>>::const_iterator i = std::find_if(txids.begin(), txids.end(),
6394 if(i != txids.end())
6395 if(m_scanned_pool_txs[0].size() > 5000)
6396 if(stop_height > checkpoint_height && m_blockchain.size() - 1 < checkpoint_height)
6397 if(hashes.size() <= 3)
6398 if(blocks_start_height < m_blockchain.offset())
6399 if(hashes.size() + current_index < stop_height)
6400 if(current_index >= m_blockchain.size())
6401 if(!(current_index % 1000))
6402 if(0 != m_callback)
6403 else if(bl_id != m_blockchain[current_index])
6404 if(current_index >= stop_height)
6405 if(m_address_book.size() == old_size + 1)
6406 if(m_address_book.size() <= row_id)
6407 if(start_height > m_blockchain.size() || m_refresh_from_block_height > m_blockchain.size())
6408 if(!m_run.load(std::memory_order_relaxed))
6409 if(blocks.empty())
6410 if(blocks_start_height == next_blocks_start_height)
6411 if(error)
6412 if(try_count < 3)
6413 if(last_tx_hash_id != (m_transfers.size() ? m_transfers.back().m_txid : null_hash))
6414 if(m_run.load(std::memory_order_relaxed))
6415 if(!!result)
6416 THROW_WALLET_EXCEPTION_IF(result->empty(), tools::error::no_connection_to_daemon, "getversion");
6417 THROW_WALLET_EXCEPTION_IF(*result == CORE_RPC_STATUS_BUSY, tools::error::daemon_busy, "getversion");
6418 if(*result != CORE_RPC_STATUS_OK)
6419 if(rpc_version >= MAKE_CORE_RPC_VERSION(1, 19))
6420 if(!r)
6421 if(res.status == CORE_RPC_STATUS_BUSY)
6422 if(res.status != CORE_RPC_STATUS_OK)
6423 if(res.distributions.size() != 1)
6424 if(res.distributions[0].amount != 0)
6425 THROW_WALLET_EXCEPTION_IF(height < m_blockchain.offset() && m_blockchain.size() > m_blockchain.offset(),
6426 if(td.m_spent && td.m_spent_height >= height)
6427 auto it = std::find_if(m_transfers.begin(), m_transfers.end(), [&](const transfer_details &td) { return td.m_block_height >= height; });
6428 if(!m_transfers[i].m_key_image_known || m_transfers[i].m_key_image_partial)
6429 THROW_WALLET_EXCEPTION_IF(it_ki == m_key_images.end(), error::wallet_internal_error, "key image not found: index " + std::to_string(i) + ", ki " + epee::string_tools::pod_to_hex(m_transfers[i].m_key_image) + ", " + std::to_string(m_key_images.size()) + " key images known");
6430 THROW_WALLET_EXCEPTION_IF(it_pk == m_pub_keys.end(), error::wallet_internal_error, "public key not found");
6431 if(height <= it->second.m_block_height)
6432 if(height <= it->second.m_block_height)
6433 if(watch_only)
6434 if(!seed_language.empty())
6435 if(m_multisig)
6436 THROW_WALLET_EXCEPTION_IF(!r, error::file_read_error, keys_file_name);
6437 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "internal error: failed to deserialize \"" + keys_file_name + '\"');
6438 if(json.Parse(account_data.c_str()).HasParseError() || !json.IsObject())
6439 if(json.Parse(account_data.c_str()).HasParseError())
6440 else if(json.IsObject())
6441 if(!json.HasMember("key_data"))
6442 if(!json["key_data"].IsString())
6443 if(json.HasMember("key_on_device"))
6444 if(field_seed_language_found)
6445 if(m_multisig)
6446 if(!json.HasMember("multisig_signers"))
6447 if(!json["multisig_signers"].IsString())
6448 if(!r)
6449 if(field_default_priority_found)
6450 if(field_default_fee_multiplier_found)
6451 if(field_refresh_type_found)
6452 if(field_refresh_type == RefreshFull || field_refresh_type == RefreshOptimizeCoinbase || field_refresh_type == RefreshNoCoinbase)
6453 if(field_refresh_height_found)
6454 if(!m_force_network)
6455 THROW_WALLET_EXCEPTION_IF(static_cast<uint8_t>(m_nettype) != field_nettype, error::wallet_internal_error,
6456 if(r && m_key_on_device)
6457 if(!m_watch_only && !m_multisig)
6458 THROW_WALLET_EXCEPTION_IF(!r, error::invalid_password);
6459 THROW_WALLET_EXCEPTION_IF(!r, error::file_read_error, keys_file_name);
6460 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "internal error: failed to deserialize \"" + keys_file_name + '\"');
6461 if(json.Parse(account_data.c_str()).HasParseError() || !json.IsObject())
6462 if(json.Parse(account_data.c_str()).HasParseError())
6463 if(!no_spend_key)
6464 if(!wallet_.empty())
6465 THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_wallet_file, ignored_ec), error::file_exists, m_wallet_file);
6466 THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_keys_file, ignored_ec), error::file_exists, m_keys_file);
6467 THROW_WALLET_EXCEPTION_IF(multisig_data.size() < 32, error::invalid_multisig_seed);
6468 offset += sizeof(uint32_t);
6469 offset += sizeof(uint32_t);
6470 THROW_WALLET_EXCEPTION_IF(threshold < 2, error::invalid_multisig_seed);
6471 THROW_WALLET_EXCEPTION_IF(total != threshold && total != threshold + 1, error::invalid_multisig_seed);
6472 THROW_WALLET_EXCEPTION_IF(multisig_data.size() != 8 + 32 * (4 + n_multisig_keys + total), error::invalid_multisig_seed);
6473 offset += sizeof(crypto::secret_key);
6474 offset += sizeof(crypto::public_key);
6475 offset += sizeof(crypto::secret_key);
6476 offset += sizeof(crypto::public_key);
6477 offset += sizeof(crypto::secret_key);
6478 offset += sizeof(crypto::public_key);
6479 THROW_WALLET_EXCEPTION_IF(!crypto::secret_key_to_public_key(view_secret_key, calculated_view_public_key), error::invalid_multisig_seed);
6480 THROW_WALLET_EXCEPTION_IF(view_public_key != calculated_view_public_key, error::invalid_multisig_seed);
6481 THROW_WALLET_EXCEPTION_IF(!crypto::secret_key_to_public_key(spend_secret_key, local_signer), error::invalid_multisig_seed);
6482 THROW_WALLET_EXCEPTION_IF(std::find(multisig_signers.begin(), multisig_signers.end(), local_signer) == multisig_signers.end(), error::invalid_multisig_seed);
6483 THROW_WALLET_EXCEPTION_IF(!(rct::rct2sk(skey) == spend_secret_key), error::invalid_multisig_seed);
6484 if(!wallet_.empty())
6485 THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
6486 if(m_nettype != MAINNET || create_address_file)
6487 if(!r)
6488 if(!wallet_.empty())
6489 if(!wallet_.empty())
6490 THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_wallet_file, ignored_ec), error::file_exists, m_wallet_file);
6491 THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_keys_file, ignored_ec), error::file_exists, m_keys_file);
6492 if(m_refresh_from_block_height == 0 && !recover)
6493 if(!wallet_.empty())
6494 THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
6495 if(m_nettype != MAINNET || create_address_file)
6496 if(!r)
6497 if(!wallet_.empty())
6498 if(!wallet_.empty())
6499 THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_wallet_file, ignored_ec), error::file_exists, m_wallet_file);
6500 THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_keys_file, ignored_ec), error::file_exists, m_keys_file);
6501 if(seed == nullptr)
6502 if(m_refresh_from_block_height == 0 && !recover)
6503 if(!wallet_.empty())
6504 THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
6505 if(m_nettype != MAINNET || create_address_file)
6506 if(!r)
6507 if(!wallet_.empty())
6508 if(err.empty())
6509 if(target_height < height)
6510 if(height > blocks_per_month)
6511 if(err.empty() && local_height > height)
6512 if(!wallet_.empty())
6513 THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_wallet_file, ignored_ec), error::file_exists, m_wallet_file);
6514 THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_keys_file, ignored_ec), error::file_exists, m_keys_file);
6515 if(!wallet_.empty())
6516 THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
6517 if(m_nettype != MAINNET || create_address_file)
6518 if(!r)
6519 if(!wallet_.empty())
6520 if(!wallet_.empty())
6521 THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_wallet_file, ignored_ec), error::file_exists, m_wallet_file);
6522 THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_keys_file, ignored_ec), error::file_exists, m_keys_file);
6523 if(!wallet_.empty())
6524 THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
6525 if(m_nettype != MAINNET || create_address_file)
6526 if(!r)
6527 if(!wallet_.empty())
6528 if(!wallet_.empty())
6529 THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_wallet_file, ignored_ec), error::file_exists, m_wallet_file);
6530 THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_keys_file, ignored_ec), error::file_exists, m_keys_file);
6531 if(!wallet_.empty())
6532 THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
6533 if(!r)
6534 if(!wallet_.empty())
6535 if(threshold == spend_keys.size() + 1)
6536 else if(threshold == spend_keys.size())
6537 data += std::string((const char *)&signer, sizeof(crypto::public_key));
6538 data += std::string((const char *)&pmsk, sizeof(crypto::public_key));
6539 data.resize(data.size() + sizeof(crypto::signature));
6540 crypto::cn_fast_hash(data.data(), data.size() - sizeof(signature), hash);
6541 crypto::signature &signature = *(crypto::signature *)&data[data.size() - sizeof(crypto::signature)];
6542 if(threshold == spend_keys.size() + 1)
6543 if(!m_wallet_file.empty())
6544 THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
6545 if(boost::filesystem::exists(m_wallet_file + ".address.txt"))
6546 if(!r)
6547 if(!m_wallet_file.empty())
6548 THROW_WALLET_EXCEPTION_IF(!verify_multisig_info(info[i], secret_keys[i], public_keys[i]),
6549 if(rct::sk2rct(secret_keys[i]) == rct::sk2rct(secret_keys[j]))
6550 if(secret_keys[i] == local_skey)
6551 THROW_WALLET_EXCEPTION_IF(public_keys[i] == local_pkey, error::wallet_internal_error,
6552 if(std::find(signers.begin(), signers.end(), local_signer) == signers.end())
6553 std::sort(m_multisig_signers.begin(), m_multisig_signers.end(), [](const crypto::public_key &e0, const crypto::public_key &e1) { return memcmp(&e0, &e1, sizeof(e0)); });
6554 if(!m_wallet_file.empty())
6555 THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
6556 if(boost::filesystem::exists(m_wallet_file + ".address.txt"))
6557 if(!r)
6558 if(!m_wallet_file.empty())
6559 if(!verify_extra_multisig_info(info[i], public_keys, signers[i]))
6560 data += std::string((const char *)&skey, sizeof(crypto::secret_key));
6561 data += std::string((const char *)&pkey, sizeof(crypto::public_key));
6562 data.resize(data.size() + sizeof(crypto::signature));
6563 crypto::cn_fast_hash(data.data(), data.size() - sizeof(signature), hash);
6564 crypto::signature &signature = *(crypto::signature *)&data[data.size() - sizeof(crypto::signature)];
6565 if(data.size() < header_len || data.substr(0, header_len) != "MultisigV1")
6566 if(!tools::base58::decode(data.substr(header_len), decoded))
6567 if(decoded.size() != sizeof(crypto::secret_key) + sizeof(crypto::public_key) + sizeof(crypto::signature))
6568 if(decoded.size() != sizeof(crypto::secret_key) + sizeof(crypto::public_key) + sizeof(crypto::signature))
6569 if(decoded.size() != sizeof(crypto::secret_key) + sizeof(crypto::public_key) + sizeof(crypto::signature))
6570 if(decoded.size() != sizeof(crypto::secret_key) + sizeof(crypto::public_key) + sizeof(crypto::signature))
6571 offset += sizeof(skey);
6572 offset += sizeof(pkey);
6573 crypto::cn_fast_hash(decoded.data(), decoded.size() - sizeof(signature), hash);
6574 if(!crypto::check_signature(hash, pkey, signature))
6575 if(data.size() < header_len || data.substr(0, header_len) != "MultisigxV1")
6576 if(!tools::base58::decode(data.substr(header_len), decoded))
6577 if(decoded.size() < sizeof(crypto::public_key) + sizeof(crypto::signature))
6578 if(decoded.size() < sizeof(crypto::public_key) + sizeof(crypto::signature))
6579 if(decoded.size() < sizeof(crypto::public_key) + sizeof(crypto::signature))
6580 if((decoded.size() - (sizeof(crypto::public_key) + sizeof(crypto::signature))) % sizeof(crypto::public_key))
6581 if((decoded.size() - (sizeof(crypto::public_key) + sizeof(crypto::signature))) % sizeof(crypto::public_key))
6582 if((decoded.size() - (sizeof(crypto::public_key) + sizeof(crypto::signature))) % sizeof(crypto::public_key))
6583 if((decoded.size() - (sizeof(crypto::public_key) + sizeof(crypto::signature))) % sizeof(crypto::public_key))
6584 const size_t n_keys = (decoded.size() - (sizeof(crypto::public_key) + sizeof(crypto::signature))) / sizeof(crypto::public_key);
6585 const size_t n_keys = (decoded.size() - (sizeof(crypto::public_key) + sizeof(crypto::signature))) / sizeof(crypto::public_key);
6586 const size_t n_keys = (decoded.size() - (sizeof(crypto::public_key) + sizeof(crypto::signature))) / sizeof(crypto::public_key);
6587 offset += sizeof(signer);
6588 const crypto::signature &signature = *(const crypto::signature *)(decoded.data() + offset + n_keys * sizeof(crypto::public_key));
6589 crypto::cn_fast_hash(decoded.data(), decoded.size() - sizeof(signature), hash);
6590 if(!crypto::check_signature(hash, signer, signature))
6591 offset += sizeof(mspk);
6592 if(!m_multisig)
6593 if(threshold)
6594 if(total)
6595 if(ready)
6596 if(!m_multisig)
6597 if(td.m_key_image_partial)
6598 if(wallet_name.empty())
6599 THROW_WALLET_EXCEPTION_IF(!boost::filesystem::exists(m_keys_file, ignored_ec), error::file_not_found, m_keys_file);
6600 THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
6601 THROW_WALLET_EXCEPTION_IF(watch_only_keys_file_exists, error::file_save_error, new_keys_filename);
6602 THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, new_keys_filename);
6603 if(!epee::string_tools::parse_hexstr_to_binbuff(payment_id_str, payment_id_data))
6604 if(!epee::string_tools::parse_hexstr_to_binbuff(payment_id_str, payment_id_data))
6605 if(sizeof(crypto::hash) != payment_id_data.size())
6606 if(sizeof(crypto::hash) != payment_id_data.size())
6607 if(!epee::string_tools::parse_hexstr_to_binbuff(payment_id_str, payment_id_data))
6608 if(!epee::string_tools::parse_hexstr_to_binbuff(payment_id_str, payment_id_data))
6609 if(sizeof(crypto::hash8) != payment_id_data.size())
6610 if(sizeof(crypto::hash8) != payment_id_data.size())
6611 if(parse_long_payment_id(payment_id_str, payment_id))
6612 if(parse_short_payment_id(payment_id_str, payment_id8))
6613 THROW_WALLET_EXCEPTION_IF(!m_is_initialized, error::wallet_not_initialized);
6614 if(!m_http_client.is_connected())
6615 if(!m_http_client.connect(std::chrono::milliseconds(timeout)))
6616 if(version)
6617 if(!r)
6618 if(resp_t.status != CORE_RPC_STATUS_OK)
6619 THROW_WALLET_EXCEPTION_IF(e || !exists, error::file_not_found, m_keys_file);
6620 if(!load_keys(m_keys_file, password))
6621 THROW_WALLET_EXCEPTION_IF(true, error::file_read_error, m_keys_file);
6622 if(!boost::filesystem::exists(m_wallet_file, e) || e)
6623 THROW_WALLET_EXCEPTION_IF(!r, error::file_read_error, m_wallet_file);
6624 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "internal error: failed to deserialize \"" + m_wallet_file + '\"');
6625 THROW_WALLET_EXCEPTION_IF(
6626 if(m_blockchain.empty())
6627 if(get_num_subaddress_accounts() == 0)
6628 if(td.m_block_height < height)
6629 if(!m_blockchain.empty() && m_blockchain.size() == m_blockchain.offset())
6630 if(r && res.status == CORE_RPC_STATUS_OK)
6631 if(height > 0 && m_blockchain.size() > height)
6632 if(!m_force_network)
6633 THROW_WALLET_EXCEPTION_IF(genesis_hash != m_blockchain.genesis(), error::wallet_internal_error,
6634 if(!path.empty())
6635 if(!same_file)
6636 if(!parent_path.empty() && !boost::filesystem::exists(parent_path))
6637 if(!boost::filesystem::create_directories(parent_path, ec))
6638 if(!same_file)
6639 THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
6640 if(boost::filesystem::exists(old_address_file))
6641 THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_wallet_file);
6642 if(!r)
6643 if(!r)
6644 if(!r)
6645 if(success)
6646 THROW_WALLET_EXCEPTION_IF(!success, error::file_save_error, new_file);
6647 THROW_WALLET_EXCEPTION_IF(!success || !ostr.good(), error::file_save_error, new_file);
6648 THROW_WALLET_EXCEPTION_IF(e, error::file_save_error, m_wallet_file, e);
6649 if(td.m_subaddr_index.major == index_major && !td.m_spent)
6650 if(found == amount_per_subaddr.end())
6651 if(utx.second.m_subaddr_account == index_major && utx.second.m_state != wallet2::unconfirmed_transfer_details::failed)
6652 if(found == amount_per_subaddr.end())
6653 if(td.m_subaddr_index.major == index_major && !td.m_spent && is_transfer_unlocked(td))
6654 if(found == amount_per_subaddr.end())
6655 if(min_height < x.second.m_block_height &&
6656 if(min_height < x.second.m_block_height && max_height >= x.second.m_block_height &&
6657 if(i->second.m_block_height <= min_height || i->second.m_block_height > max_height)
6658 if(subaddr_account && *subaddr_account != i->second.m_subaddr_account)
6659 if(!subaddr_indices.empty() && std::count_if(i->second.m_subaddr_indices.begin(), i->second.m_subaddr_indices.end(), [&subaddr_indices](uint32_t index) { return subaddr_indices.count(index) == 1; }) == 0)
6660 if(!subaddr_indices.empty() && std::count_if(i->second.m_subaddr_indices.begin(), i->second.m_subaddr_indices.end(), [&subaddr_indices](uint32_t index) { return subaddr_indices.count(index) == 1; }) == 0)
6661 if(subaddr_account && *subaddr_account != i->second.m_subaddr_account)
6662 if(!subaddr_indices.empty() && std::count_if(i->second.m_subaddr_indices.begin(), i->second.m_subaddr_indices.end(), [&subaddr_indices](uint32_t index) { return subaddr_indices.count(index) == 1; }) == 0)
6663 if(!subaddr_indices.empty() && std::count_if(i->second.m_subaddr_indices.begin(), i->second.m_subaddr_indices.end(), [&subaddr_indices](uint32_t index) { return subaddr_indices.count(index) == 1; }) == 0)
6664 if((!subaddr_account || *subaddr_account == i->second.m_pd.m_subaddr_index.major) &&
6665 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "is_key_image_spent");
6666 THROW_WALLET_EXCEPTION_IF(daemon_resp.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "is_key_image_spent");
6667 THROW_WALLET_EXCEPTION_IF(daemon_resp.status != CORE_RPC_STATUS_OK, error::is_key_image_spent_error, daemon_resp.status);
6668 THROW_WALLET_EXCEPTION_IF(daemon_resp.spent_status.size() != n_outputs, error::wallet_internal_error,
6669 if(!td.m_key_image_known || td.m_key_image_partial)
6670 if(td.m_spent != (spent_status[i] != COMMAND_RPC_IS_KEY_IMAGE_SPENT::UNSPENT))
6671 if(td.m_spent)
6672 if(refresh)
6673 if(!is_tx_spendtime_unlocked(unlock_time, block_height))
6674 if(block_height + CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE > m_local_bc_height)
6675 if(idx + 1 != vec.size())
6676 if(e == vec[i])
6677 if(td0.m_txid == td1.m_txid)
6678 if(dh == 0)
6679 if(dh == 1)
6680 if(dh < 10)
6681 if(r > relatedness)
6682 if(relatedness == 1.0f)
6683 if(relatedness < best_relatedness)
6684 if(relatedness == best_relatedness)
6685 if(smallest)
6686 if(td.amount() < transfers[unused_indices[candidates[idx]]].amount())
6687 if(in.type() != typeid(cryptonote::txin_to_key))
6688 if(find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
6689 if(get_encrypted_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id8))
6690 if(ptx.dests.empty())
6691 if(m_account.get_device().decrypt_payment_id(payment_id8, ptx.dests[0].addr.m_view_public_key, ptx.tx_key))
6692 else if(!get_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
6693 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "sendrawtransaction");
6694 THROW_WALLET_EXCEPTION_IF(daemon_send_resp.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "sendrawtransaction");
6695 THROW_WALLET_EXCEPTION_IF(daemon_send_resp.status != CORE_RPC_STATUS_OK, error::tx_rejected, ptx.tx, daemon_send_resp.status, daemon_send_resp.reason);
6696 THROW_WALLET_EXCEPTION_IF(idx >= m_transfers.size(), error::wallet_internal_error,
6697 if(store_tx_info())
6698 if(store_tx_info())
6699 if(!boost::filesystem::exists(unsigned_filename, errcode))
6700 if(!epee::file_io_utils::load_file_to_string(unsigned_filename.c_str(), s))
6701 if(strncmp(s.c_str(), UNSIGNED_TX_PREFIX, magiclen))
6702 if(strncmp(s.c_str(), UNSIGNED_TX_PREFIX_LEGACY, magiclen))
6703 if(is_legacy && version == '\002')
6704 else if(!is_legacy && version == '\003')
6705 if(!load_unsigned_tx(unsigned_filename, exported_txs))
6706 if(accept_func && !accept_func(exported_txs))
6707 THROW_WALLET_EXCEPTION_IF(sd.sources.empty(), error::wallet_internal_error, "Empty sources");
6708 THROW_WALLET_EXCEPTION_IF(!r, error::tx_not_constructed, sd.sources, sd.splitted_dsts, sd.unlock_time, m_nettype);
6709 if(store_tx_info())
6710 bool all_are_txin_to_key = std::all_of(ptx.tx.vin.begin(), ptx.tx.vin.end(), [&](const txin_v &s_e) -> bool {
6711 THROW_WALLET_EXCEPTION_IF(!all_are_txin_to_key, error::unexpected_txin_type, ptx.tx);
6712 if(!m_transfers[i].m_key_image_known || m_transfers[i].m_key_image_partial)
6713 if(!epee::file_io_utils::save_string_to_file(signed_filename, std::string(SIGNED_TX_PREFIX) + ciphertext))
6714 if(export_raw)
6715 if(!epee::file_io_utils::save_string_to_file(raw_filename, tx_as_hex))
6716 if(!boost::filesystem::exists(signed_filename, errcode))
6717 if(!epee::file_io_utils::load_file_to_string(signed_filename.c_str(), s))
6718 if(strncmp(s.c_str(), SIGNED_TX_PREFIX, magiclen))
6719 if(strncmp(s.c_str(), SIGNED_TX_PREFIX_LEGACY, magiclen))
6720 if(is_legacy && version == '\002')
6721 else if(!is_legacy && version == '\003')
6722 if(accept_func && !accept_func(signed_txs))
6723 if(signed_txs.key_images.size() > m_transfers.size())
6724 if(td.m_key_image_known && !td.m_key_image_partial && td.m_key_image != signed_txs.key_images[i])
6725 if(ciphertext.empty())
6726 if(ciphertext.empty())
6727 if(strncmp(s.c_str(), MULTISIG_UNSIGNED_TX_PREFIX, magiclen))
6728 if(accept_func && !accept_func(exported_txs))
6729 if(is_signed)
6730 if(store_tx_info())
6731 if(!boost::filesystem::exists(filename, errcode))
6732 if(!epee::file_io_utils::load_file_to_string(filename.c_str(), s))
6733 if(!load_multisig_tx(s, exported_txs, accept_func))
6734 THROW_WALLET_EXCEPTION_IF(exported_txs.m_ptx.empty(), error::wallet_internal_error, "No tx found");
6735 THROW_WALLET_EXCEPTION_IF(exported_txs.m_signers.find(local_signer) != exported_txs.m_signers.end(),
6736 THROW_WALLET_EXCEPTION_IF(exported_txs.m_signers.size() > m_multisig_threshold,
6737 THROW_WALLET_EXCEPTION_IF(exported_txs.m_signers.size() == m_multisig_threshold,
6738 THROW_WALLET_EXCEPTION_IF(ptx.multisig_sigs.empty(), error::wallet_internal_error, "No signatures found in multisig tx");
6739 THROW_WALLET_EXCEPTION_IF(!r, error::tx_not_constructed, sd.sources, sd.splitted_dsts, sd.unlock_time, m_nettype);
6740 THROW_WALLET_EXCEPTION_IF(get_transaction_prefix_hash(tx) != get_transaction_prefix_hash(ptx.tx),
6741 if(sig.ignore != local_signer)
6742 if(sig.signing_keys.find(pmsk) == sig.signing_keys.end())
6743 THROW_WALLET_EXCEPTION_IF(!rct::signMultisig(ptx.tx.rct_signatures, indices, k, sig.msout, skey),
6744 if(is_last)
6745 if(sig.ignore != local_signer && exported_txs.m_signers.find(sig.ignore) == exported_txs.m_signers.end())
6746 THROW_WALLET_EXCEPTION_IF(found, error::wallet_internal_error, "More than one transaction is final");
6747 THROW_WALLET_EXCEPTION_IF(!found, error::wallet_internal_error,
6748 if(store_tx_info())
6749 if(!r)
6750 if(!load_multisig_tx_from_file(filename, exported_txs))
6751 if(accept_func && !accept_func(exported_txs))
6752 if(priority == 0)
6753 if(priority == 0)
6754 if(priority >= 1 && priority <= 5)
6755 THROW_WALLET_EXCEPTION_IF(false, error::invalid_priority);
6756 if(mixin < DEFAULT_MIXIN)
6757 if(priority == 0 && m_default_priority == 0 && auto_low_priority())
6758 if(blocks.size() != 1)
6759 else if(blocks[0].first > 0)
6760 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_info");
6761 THROW_WALLET_EXCEPTION_IF(getinfo_res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_info");
6762 THROW_WALLET_EXCEPTION_IF(getinfo_res.status != CORE_RPC_STATUS_OK, error::get_tx_pool_error);
6763 THROW_WALLET_EXCEPTION_IF(full_reward_zone == 0, error::wallet_internal_error, "Invalid block size limit from daemon");
6764 if(m_blockchain.size() < N)
6765 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "getblockheadersrange");
6766 THROW_WALLET_EXCEPTION_IF(getbh_res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "getblockheadersrange");
6767 THROW_WALLET_EXCEPTION_IF(getbh_res.status != CORE_RPC_STATUS_OK, error::get_blocks_error, getbh_res.status);
6768 if(getbh_res.headers.size() != N)
6769 if(P > 80)
6770 if(!m_ring_database.empty())
6771 if(!m_ringdb)
6772 if(!m_ringdb)
6773 if(!m_ringdb)
6774 if(txid == i.first)
6775 if(txid == i.first)
6776 if(!m_ringdb)
6777 if(!force && m_ring_history_saved)
6778 if(!m_ringdb)
6779 if(entry.second.m_change != uint64_t(-1))
6780 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "gettransactions");
6781 THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "gettransactions");
6782 THROW_WALLET_EXCEPTION_IF(res.status != CORE_RPC_STATUS_OK, error::wallet_internal_error, "gettransactions");
6783 THROW_WALLET_EXCEPTION_IF(res.txs.size() != req.txs_hashes.size(), error::wallet_internal_error,
6784 THROW_WALLET_EXCEPTION_IF(slice + res.txs.size() > txs_hashes.size(), error::wallet_internal_error, "Unexpected tx array size");
6785 THROW_WALLET_EXCEPTION_IF(tx_info.tx_hash != epee::string_tools::pod_to_hex(txs_hashes[slice + i]), error::wallet_internal_error, "Wrong txid received");
6786 THROW_WALLET_EXCEPTION_IF(tx_info.tx_hash != *it, error::wallet_internal_error, "Wrong txid received");
6787 THROW_WALLET_EXCEPTION_IF(!epee::string_tools::parse_hexstr_to_binbuff(tx_info.as_hex, bd), error::wallet_internal_error, "failed to parse tx from hexstr");
6788 THROW_WALLET_EXCEPTION_IF(!epee::string_tools::parse_hexstr_to_binbuff(tx_info.as_hex, bd), error::wallet_internal_error, "failed to parse tx from hexstr");
6789 THROW_WALLET_EXCEPTION_IF(!cryptonote::parse_and_validate_tx_from_blob(bd, tx, tx_hash, tx_prefix_hash), error::wallet_internal_error, "failed to parse tx from blob");
6790 THROW_WALLET_EXCEPTION_IF(epee::string_tools::pod_to_hex(tx_hash) != tx_info.tx_hash, error::wallet_internal_error, "txid mismatch");
6791 THROW_WALLET_EXCEPTION_IF(!add_rings(key, tx), error::wallet_internal_error, "Failed to save ring");
6792 if(!m_ringdb)
6793 if(!m_ringdb)
6794 if(!add)
6795 if(!m_ringdb)
6796 if(!m_ringdb)
6797 if(!unlocked) // don't add locked outs
6798 if(global_index == real_index) // don't re-add real one
6799 if(std::find(outs.back().begin(), outs.back().end(), item) != outs.back().end()) // don't add duplicates
6800 if(is_output_blackballed(output_public_key)) // don't add blackballed outputs
6801 if(fake_outputs_count > 0)
6802 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "transfer_selected");
6803 THROW_WALLET_EXCEPTION_IF(resp_t.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_output_histogram");
6804 THROW_WALLET_EXCEPTION_IF(resp_t.status != CORE_RPC_STATUS_OK, error::get_histogram_error, resp_t.status);
6805 if(is_after_segregation_fork && (m_segregate_pre_fork_outputs || m_key_reuse_mitigation2))
6806 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "transfer_selected");
6807 THROW_WALLET_EXCEPTION_IF(resp_t.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_output_distribution");
6808 THROW_WALLET_EXCEPTION_IF(resp_t.status != CORE_RPC_STATUS_OK, error::get_output_distribution, resp_t.status);
6809 if(d.amount == amount)
6810 THROW_WALLET_EXCEPTION_IF(d.start_height > segregation_fork_height, error::get_output_distribution, "Distribution start_height too high");
6811 THROW_WALLET_EXCEPTION_IF(segregation_fork_height - d.start_height >= d.distribution.size(), error::get_output_distribution, "Distribution size too small");
6812 THROW_WALLET_EXCEPTION_IF(segregation_fork_height - RECENT_OUTPUT_BLOCKS - d.start_height >= d.distribution.size(), error::get_output_distribution, "Distribution size too small");
6813 THROW_WALLET_EXCEPTION_IF(segregation_fork_height <= RECENT_OUTPUT_BLOCKS, error::wallet_internal_error, "Fork height too low");
6814 THROW_WALLET_EXCEPTION_IF(segregation_fork_height - RECENT_OUTPUT_BLOCKS < d.start_height, error::get_output_distribution, "Bad start height");
6815 THROW_WALLET_EXCEPTION_IF(!found, error::get_output_distribution, "Requested amount not found in response");
6816 if(is_after_segregation_fork && m_segregate_pre_fork_outputs && output_is_pre_fork)
6817 if(he.amount == amount)
6818 if(is_after_segregation_fork && m_key_reuse_mitigation2)
6819 if(output_is_pre_fork)
6820 if(is_shortly_after_segregation_fork)
6821 if(is_shortly_after_segregation_fork)
6822 THROW_WALLET_EXCEPTION_IF(num_outs == 0, error::wallet_internal_error,
6823 THROW_WALLET_EXCEPTION_IF(num_recent_outs > num_outs, error::wallet_internal_error,
6824 if(recent_outputs_count == 0)
6825 if(recent_outputs_count > num_recent_outs)
6826 if(td.m_global_output_index >= num_outs - num_recent_outs && recent_outputs_count > 0)
6827 if(td.m_key_image_known && !td.m_key_image_partial)
6828 if(get_ring(key, td.m_key_image, ring))
6829 THROW_WALLET_EXCEPTION_IF(ring.size() > fake_outputs_count + 1, error::wallet_internal_error,
6830 if(out < num_outs)
6831 if(out == td.m_global_output_index)
6832 THROW_WALLET_EXCEPTION_IF(!own_found, error::wallet_internal_error,
6833 if(num_outs <= requested_outputs_count && !existing_ring_found)
6834 if(num_found == 0)
6835 if(seen_indices.size() == num_outs)
6836 if(num_found - 1 < recent_outputs_count) // -1 to account for the real one we seeded with
6837 if(i == num_outs)
6838 else if(num_found - 1 < recent_outputs_count + pre_fork_outputs_count)
6839 if(i == num_outs)
6840 else if(num_found - 1 < recent_outputs_count + pre_fork_outputs_count + post_fork_outputs_count)
6841 if(i == num_post_fork_outs + segregation_limit[amount].first)
6842 if(i == num_outs)
6843 if(seen_indices.count(i))
6844 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_outs.bin");
6845 THROW_WALLET_EXCEPTION_IF(daemon_resp.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_outs.bin");
6846 THROW_WALLET_EXCEPTION_IF(daemon_resp.status != CORE_RPC_STATUS_OK, error::get_random_outs_error, daemon_resp.status);
6847 THROW_WALLET_EXCEPTION_IF(daemon_resp.outs.size() != req.outputs.size(), error::wallet_internal_error,
6848 if(is_after_segregation_fork && m_segregate_pre_fork_outputs && output_is_pre_fork)
6849 if(he.amount == amount)
6850 if(req.outputs[i].index == td.m_global_output_index)
6851 if(daemon_resp.outs[i].key == boost::get<txout_to_key>(td.m_tx.vout[td.m_internal_output_index].target).key)
6852 if(daemon_resp.outs[i].mask == mask)
6853 THROW_WALLET_EXCEPTION_IF(!real_out_found, error::wallet_internal_error,
6854 if(td.m_key_image_known && !td.m_key_image_partial)
6855 if(get_ring(key, td.m_key_image, ring))
6856 if(out < num_outs)
6857 if(out != td.m_global_output_index)
6858 if(req.outputs[i].index == out)
6859 THROW_WALLET_EXCEPTION_IF(!found, error::wallet_internal_error, "Falied to find existing ring output in daemon out data");
6860 if(outs.back().size() < fake_outputs_count + 1)
6861 THROW_WALLET_EXCEPTION_IF(!scanty_outs.empty(), error::not_enough_outs_to_mix, scanty_outs, fake_outputs_count);
6862 THROW_WALLET_EXCEPTION_IF(dsts.empty(), error::zero_destination);
6863 THROW_WALLET_EXCEPTION_IF(0 == dt.amount, error::zero_destination);
6864 THROW_WALLET_EXCEPTION_IF(needed_money < dt.amount, error::tx_sum_overflow, dsts, fee, m_nettype);
6865 if(m_multisig && !m_transfers.empty())
6866 if(signer == local_signer)
6867 if(i.m_signer == signer)
6868 THROW_WALLET_EXCEPTION_IF(n_available_signers + 1 < m_multisig_threshold, error::multisig_import_needed);
6869 THROW_WALLET_EXCEPTION_IF(found_money < needed_money, error::not_enough_unlocked_money, found_money, needed_money - fee, fee);
6870 THROW_WALLET_EXCEPTION_IF(subaddr_account != m_transfers[*i].m_subaddr_index.major, error::wallet_internal_error, "the tx uses funds from multiple accounts");
6871 if(outs.empty())
6872 THROW_WALLET_EXCEPTION_IF(outs.size() < out_index + 1, error::wallet_internal_error, "outs.size() < out_index + 1");
6873 THROW_WALLET_EXCEPTION_IF(outs[out_index].size() < fake_outputs_count, error::wallet_internal_error, "fake_outputs_count > random outputs found");
6874 auto it_to_replace = std::find_if(src.outputs.begin(), src.outputs.end(), [&](const tx_output_entry &a) {
6875 THROW_WALLET_EXCEPTION_IF(it_to_replace == src.outputs.end(), error::wallet_internal_error,
6876 if(m_multisig)
6877 if(change_dts.amount == 0)
6878 if(splitted_dsts.size() == 1)
6879 THROW_WALLET_EXCEPTION_IF(!r, error::tx_not_constructed, sources, dsts, unlock_time, m_nettype);
6880 THROW_WALLET_EXCEPTION_IF(upper_transaction_size_limit <= get_object_blobsize(tx), error::tx_too_big, tx, upper_transaction_size_limit);
6881 THROW_WALLET_EXCEPTION_IF((size_t)sources_copy[idx].real_output >= sources_copy[idx].outputs.size(),
6882 if(sources_copy[idx].outputs[sources_copy[idx].real_output].second.dest == sources[n].outputs[sources[n].real_output].second.dest)
6883 THROW_WALLET_EXCEPTION_IF(ins_order.size() != sources.size(), error::wallet_internal_error, "Failed to work out sources permutation");
6884 if(m_multisig)
6885 if(m_multisig_threshold < m_multisig_signers.size())
6886 THROW_WALLET_EXCEPTION_IF(selected_transfers.size() != sources_copy.size(), error::wallet_internal_error, "mismatched selected_transfers and sources sixes");
6887 THROW_WALLET_EXCEPTION_IF(!r, error::tx_not_constructed, sources, splitted_dsts, unlock_time, m_nettype);
6888 THROW_WALLET_EXCEPTION_IF(upper_transaction_size_limit <= get_object_blobsize(tx), error::tx_too_big, tx, upper_transaction_size_limit);
6889 THROW_WALLET_EXCEPTION_IF(cryptonote::get_transaction_prefix_hash(ms_tx) != prefix_hash, error::wallet_internal_error, "Multisig txes do not share prefix");
6890 THROW_WALLET_EXCEPTION_IF(cryptonote::get_transaction_hash(ms_tx) != cryptonote::get_transaction_hash(tx), error::wallet_internal_error, "Multisig txes differ by more than the signatures");
6891 bool all_are_txin_to_key = std::all_of(tx.vin.begin(), tx.vin.end(), [&](const txin_v &s_e) -> bool {
6892 THROW_WALLET_EXCEPTION_IF(!all_are_txin_to_key, error::unexpected_txin_type, tx);
6893 if(!td.m_spent && td.is_rct() && td.amount() >= needed_money && is_transfer_unlocked(td) && td.m_subaddr_index.major == subaddr_account && subaddr_indices.count(td.m_subaddr_index.minor) == 1)
6894 if(!td.m_spent && !td.m_key_image_partial && td.is_rct() && is_transfer_unlocked(td) && td.m_subaddr_index.major == subaddr_account && subaddr_indices.count(td.m_subaddr_index.minor) == 1)
6895 if(!td2.m_spent && !td.m_key_image_partial && td2.is_rct() && td.amount() + td2.amount() >= needed_money && is_transfer_unlocked(td2) && td2.m_subaddr_index == td.m_subaddr_index)
6896 if(relatedness < current_output_relatdness)
6897 if(relatedness == 0.0f)
6898 if(!use_rct)
6899 if(n_transfers > 1)
6900 if(unused_dust_indices.empty() && unused_transfers_indices.empty())
6901 if(m_transfers[i].is_rct())
6902 if(!found)
6903 if(m_transfers[i].is_rct())
6904 if(!found)
6905 if(m_transfers[n].is_rct())
6906 if(m_transfers[n].is_rct())
6907 if(transfers[idx].amount() >= threshold)
6908 if(merge_destinations)
6909 i = std::find_if(dsts.begin(), dsts.end(), [&](const cryptonote::tx_destination_entry &d) { return !memcmp(&d.addr, &addr, sizeof(addr)); });
6910 i = std::find_if(dsts.begin(), dsts.end(), [&](const cryptonote::tx_destination_entry &d) { return !memcmp(&d.addr, &addr, sizeof(addr)); });
6911 if(i == dsts.end())
6912 THROW_WALLET_EXCEPTION_IF(original_output_index > dsts.size(), error::wallet_internal_error,
6913 if(original_output_index == dsts.size())
6914 THROW_WALLET_EXCEPTION_IF(memcmp(&dsts[original_output_index].addr, &addr, sizeof(addr)), error::wallet_internal_error, "Mismatched destination address");
6915 THROW_WALLET_EXCEPTION_IF(memcmp(&dsts[original_output_index].addr, &addr, sizeof(addr)), error::wallet_internal_error, "Mismatched destination address");
6916 THROW_WALLET_EXCEPTION_IF(dsts.empty(), error::zero_destination);
6917 THROW_WALLET_EXCEPTION_IF(0 == dt.amount, error::zero_destination);
6918 THROW_WALLET_EXCEPTION_IF(needed_money < dt.amount, error::tx_sum_overflow, dsts, 0, m_nettype);
6919 THROW_WALLET_EXCEPTION_IF(needed_money == 0, error::zero_destination);
6920 if(subaddr_indices.empty()) // "index=<N1>[,<N2>,...]" wasn't specified -> use all the indices with non-zero unlocked balance
6921 THROW_WALLET_EXCEPTION_IF(needed_money > balance_subtotal, error::not_enough_money,
6922 THROW_WALLET_EXCEPTION_IF(needed_money > unlocked_balance_subtotal, error::not_enough_unlocked_money,
6923 if(!td.m_spent && !td.m_key_image_partial && is_transfer_unlocked(td) && td.m_subaddr_index.major == subaddr_account && subaddr_indices.count(td.m_subaddr_index.minor) == 1)
6924 if((td.is_rct()) || is_valid_decomposed_amount(td.amount()))
6925 auto found = std::find_if(unused_transfers_indices_per_subaddr.begin(), unused_transfers_indices_per_subaddr.end(), find_predicate);
6926 if(found == unused_transfers_indices_per_subaddr.end())
6927 auto found = std::find_if(unused_dust_indices_per_subaddr.begin(), unused_dust_indices_per_subaddr.end(), find_predicate);
6928 if(found == unused_dust_indices_per_subaddr.end())
6929 if(unused_dust_indices_per_subaddr.empty() && unused_transfers_indices_per_subaddr.empty())
6930 if(unused_dust_indices_per_subaddr.empty())
6931 if(unused_transfers_indices_per_subaddr.empty())
6932 if(!preferred_inputs.empty())
6933 if(unused_transfers_indices_per_subaddr[i].first == index_minor)
6934 if(unused_dust_indices_per_subaddr[i].first == index_minor)
6935 if(unused_dust_indices->empty() && unused_transfers_indices->empty())
6936 THROW_WALLET_EXCEPTION_IF(1, error::tx_not_possible, unlocked_balance(subaddr_account), needed_money, accumulated_fee + needed_fee);
6937 if(!preferred_inputs.empty())
6938 else if((dsts.empty() || dsts[0].amount == 0) && !adding_fee)
6939 if(m_transfers[idx].amount() >= m_min_output_value)
6940 if(get_count_above(m_transfers, *unused_transfers_indices, m_min_output_value) < m_min_output_count)
6941 if(relatedness > SECOND_OUTPUT_RELATEDNESS_THRESHOLD)
6942 if(adding_fee)
6943 if(available_amount > 0 && !dsts.empty() && estimate_rct_tx_size(tx.selected_transfers.size(), fake_outs_count, tx.dsts.size(), extra.size(), bulletproof) < TX_SIZE_TARGET(upper_transaction_size_limit))
6944 if(preferred_inputs.empty())
6945 if(adding_fee)
6946 if(try_tx)
6947 if(inputs < outputs)
6948 if(needed_fee > available_for_fee && !dsts.empty() && dsts[0].amount > 0)
6949 i = std::find_if(tx.dsts.begin(), tx.dsts.end(),
6950 [&](const cryptonote::tx_destination_entry &d) { return !memcmp(&d.addr, &dsts[0].addr, sizeof(dsts[0].addr)); });
6951 THROW_WALLET_EXCEPTION_IF(i == tx.dsts.end(), error::wallet_internal_error, "paid address not found in outputs");
6952 if(i->amount > needed_fee)
6953 if(needed_fee > available_for_fee)
6954 if(!dsts.empty())
6955 if((!dsts.empty() && dsts[0].amount > 0) || adding_fee)
6956 if(unused_transfers_indices->empty() && unused_transfers_indices_per_subaddr.size() > 1)
6957 if(unused_dust_indices->empty() && unused_dust_indices_per_subaddr.size() > 1)
6958 if(adding_fee)
6959 THROW_WALLET_EXCEPTION_IF(1, error::tx_not_possible, unlocked_balance(subaddr_account), needed_money, accumulated_fee + needed_fee);
6960 THROW_WALLET_EXCEPTION_IF(unlocked_balance(subaddr_account) == 0, error::wallet_internal_error, "No unlocked balance in the entire wallet");
6961 if(!td.m_spent && !td.m_key_image_partial && is_transfer_unlocked(td) && td.m_subaddr_index.major == subaddr_account && (subaddr_indices.empty() || subaddr_indices.count(td.m_subaddr_index.minor) == 1))
6962 if(below == 0 || td.amount() < below)
6963 if((td.is_rct()) || is_valid_decomposed_amount(td.amount()))
6964 THROW_WALLET_EXCEPTION_IF(!fund_found, error::wallet_internal_error, "No unlocked balance in the specified subaddress(es)");
6965 THROW_WALLET_EXCEPTION_IF(unused_transfer_dust_indices_per_subaddr.empty(), error::wallet_internal_error, "The smallest amount found is not below the specified threshold");
6966 if(subaddr_indices.empty())
6967 if(unused_transfer_dust_indices_per_subaddr.count(0) == 1 && unused_transfer_dust_indices_per_subaddr.size() > 1)
6968 if(td.m_key_image_known && td.m_key_image == ki && !td.m_spent && is_transfer_unlocked(td))
6969 if(td.is_rct() || is_valid_decomposed_amount(td.amount()))
6970 if(unused_dust_indices.empty() && unused_transfers_indices.empty())
6971 if(unused_transfers_indices.empty())
6972 else if(unused_dust_indices.empty())
6973 else if((tx.selected_transfers.size() & 1) || accumulated_outputs > calculate_fee(fake_outs_count+1, (upper_transaction_size_limit + 1023) / 1024, fee_multiplier))
6974 if(try_tx)
6975 THROW_WALLET_EXCEPTION_IF(needed_fee > available_for_fee, error::wallet_internal_error, "Transaction cannot pay for itself");
6976 if(!unused_transfers_indices.empty() || !unused_dust_indices.empty())
6977 if(version == cryptonote::hardfork_conf::FORK_ID_DISABLED)
6978 if(close_enough)
6979 if(m_upper_transaction_size_limit > 0)
6980 if(i->m_spent)
6981 if(i->m_key_image_partial)
6982 if(!is_transfer_unlocked(*i))
6983 if(f(*i))
6984 if(f(*i))
6985 if(!td.m_spent)
6986 if(trusted_daemon)
6987 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "select_available_outputs_from_histogram");
6988 THROW_WALLET_EXCEPTION_IF(resp_t.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_output_histogram");
6989 THROW_WALLET_EXCEPTION_IF(resp_t.status != CORE_RPC_STATUS_OK, error::get_histogram_error, resp_t.status);
6990 if(!allow_rct && td.is_rct())
6991 if(atleast)
6992 if(mixable.find(amount) != mixable.end())
6993 if(mixable.find(amount) == mixable.end())
6994 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_num_rct_outputs");
6995 THROW_WALLET_EXCEPTION_IF(resp_t.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_output_histogram");
6996 THROW_WALLET_EXCEPTION_IF(resp_t.status != CORE_RPC_STATUS_OK, error::get_histogram_error, resp_t.status);
6997 THROW_WALLET_EXCEPTION_IF(resp_t.histogram.size() != 1, error::get_histogram_error, "Expected exactly one response");
6998 THROW_WALLET_EXCEPTION_IF(resp_t.histogram[0].amount != 0, error::get_histogram_error, "Expected 0 amount");
6999 THROW_WALLET_EXCEPTION_IF(idx >= m_transfers.size(), error::wallet_internal_error, "Bad transfer index");
7000 if(i == m_tx_keys.end())
7001 if(j != m_additional_tx_keys.end())
7002std::string wallet2::get_spend_proof(const crypto::hash &txid, const std::string &message)
7003 THROW_WALLET_EXCEPTION_IF(m_watch_only, error::wallet_internal_error,
7004 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "gettransactions");
7005 THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "gettransactions");
7006 THROW_WALLET_EXCEPTION_IF(res.status != CORE_RPC_STATUS_OK, error::wallet_internal_error, "gettransactions");
7007 THROW_WALLET_EXCEPTION_IF(res.txs.size() != 1, error::wallet_internal_error,
7008 THROW_WALLET_EXCEPTION_IF(!epee::string_tools::parse_hexstr_to_binbuff(res.txs[0].as_hex, bd), error::wallet_internal_error, "failed to parse tx from hexstr");
7009 THROW_WALLET_EXCEPTION_IF(!epee::string_tools::parse_hexstr_to_binbuff(res.txs[0].as_hex, bd), error::wallet_internal_error, "failed to parse tx from hexstr");
7010 THROW_WALLET_EXCEPTION_IF(!cryptonote::parse_and_validate_tx_from_blob(bd, tx, tx_hash, tx_prefix_hash), error::wallet_internal_error, "failed to parse tx from blob");
7011 THROW_WALLET_EXCEPTION_IF(tx_hash != txid, error::wallet_internal_error, "txid mismatch");
7012 std::string sig_prefix_data((const char *)&txid, sizeof(crypto::hash));
7013 const txin_to_key *const in_key = boost::get<txin_to_key>(std::addressof(tx.vin[i]));
7014 if(in_key == nullptr)
7015 if(found == m_key_images.end())
7016 THROW_WALLET_EXCEPTION_IF(i > 0, error::wallet_internal_error, "subset of key images belong to us, very weird!");
7017 THROW_WALLET_EXCEPTION_IF(true, error::wallet_internal_error, "This tx wasn't generated by this wallet!");
7018 const txout_to_key *const in_tx_out_pkey = boost::get<txout_to_key>(std::addressof(in_td.m_tx.vout[in_td.m_internal_output_index].target));
7019 THROW_WALLET_EXCEPTION_IF(in_tx_out_pkey == nullptr, error::wallet_internal_error, "Output is not txout_to_key");
7020 THROW_WALLET_EXCEPTION_IF(!generate_key_image_helper(m_account.get_keys(), m_subaddresses, in_tx_out_pkey->key, in_tx_pub_key, in_additionakl_tx_pub_keys, in_td.m_internal_output_index, in_ephemeral, in_img, m_account.get_device()),
7021 THROW_WALLET_EXCEPTION_IF(in_key->k_image != in_img, error::wallet_internal_error, "key image mismatch");
7022 THROW_WALLET_EXCEPTION_IF(absolute_offsets.size() != ring_size, error::wallet_internal_error, "absolute offsets size is wrong");
7023 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_outs.bin");
7024 THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_outs.bin");
7025 THROW_WALLET_EXCEPTION_IF(res.status != CORE_RPC_STATUS_OK, error::wallet_internal_error, "get_outs.bin");
7026 THROW_WALLET_EXCEPTION_IF(res.outs.size() != ring_size, error::wallet_internal_error,
7027 if(res.outs[j].key == in_ephemeral.pub)
7028 THROW_WALLET_EXCEPTION_IF(sec_index >= ring_size, error::wallet_internal_error, "secret index not found");
7029 sig_str += tools::base58::encode(std::string((const char *)&sig, sizeof(crypto::signature)));
7030bool wallet2::check_spend_proof(const crypto::hash &txid, const std::string &message, const std::string &sig_str)
7031 THROW_WALLET_EXCEPTION_IF(sig_str.size() < header_len || sig_str.substr(0, header_len) != header, error::wallet_internal_error,
7032 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "gettransactions");
7033 THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "gettransactions");
7034 THROW_WALLET_EXCEPTION_IF(res.status != CORE_RPC_STATUS_OK, error::wallet_internal_error, "gettransactions");
7035 THROW_WALLET_EXCEPTION_IF(res.txs.size() != 1, error::wallet_internal_error,
7036 THROW_WALLET_EXCEPTION_IF(!epee::string_tools::parse_hexstr_to_binbuff(res.txs[0].as_hex, bd), error::wallet_internal_error, "failed to parse tx from hexstr");
7037 THROW_WALLET_EXCEPTION_IF(!epee::string_tools::parse_hexstr_to_binbuff(res.txs[0].as_hex, bd), error::wallet_internal_error, "failed to parse tx from hexstr");
7038 THROW_WALLET_EXCEPTION_IF(!cryptonote::parse_and_validate_tx_from_blob(bd, tx, tx_hash, tx_prefix_hash), error::wallet_internal_error, "failed to parse tx from blob");
7039 THROW_WALLET_EXCEPTION_IF(tx_hash != txid, error::wallet_internal_error, "txid mismatch");
7040 const txin_to_key *const in_key = boost::get<txin_to_key>(std::addressof(tx.vin[i]));
7041 if(in_key != nullptr)
7042 const size_t sig_len = tools::base58::encode(std::string((const char *)&signatures[0][0], sizeof(crypto::signature))).size();
7043 THROW_WALLET_EXCEPTION_IF(sig_str.size() != header_len + num_sigs * sig_len,
7044 const txin_to_key *const in_key = boost::get<txin_to_key>(std::addressof(tx.vin[i]));
7045 if(in_key == nullptr)
7046 THROW_WALLET_EXCEPTION_IF(!tools::base58::decode(sig_str.substr(offset, sig_len), sig_decoded), error::wallet_internal_error, "Signature decoding error");
7047 THROW_WALLET_EXCEPTION_IF(sizeof(crypto::signature) != sig_decoded.size(), error::wallet_internal_error, "Signature decoding error");
7048 THROW_WALLET_EXCEPTION_IF(sizeof(crypto::signature) != sig_decoded.size(), error::wallet_internal_error, "Signature decoding error");
7049 memcpy(&signatures.back()[j], sig_decoded.data(), sizeof(crypto::signature));
7050 std::string sig_prefix_data((const char *)&txid, sizeof(crypto::hash));
7051 const txin_to_key *const in_key = boost::get<txin_to_key>(std::addressof(tx.vin[i]));
7052 if(in_key == nullptr)
7053 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_outs.bin");
7054 THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_outs.bin");
7055 THROW_WALLET_EXCEPTION_IF(res.status != CORE_RPC_STATUS_OK, error::wallet_internal_error, "get_outs.bin");
7056 THROW_WALLET_EXCEPTION_IF(res.outs.size() != req.outputs.size(), error::wallet_internal_error,
7057 if(!crypto::check_ring_signature(sig_prefix_hash, in_key->k_image, p_output_keys, sig_iter->data()))
7058 THROW_WALLET_EXCEPTION_IF(sig_iter != signatures.cend(), error::wallet_internal_error, "Signature iterator didn't reach the end");
7059 THROW_WALLET_EXCEPTION_IF(!crypto::generate_key_derivation(address.m_view_public_key, tx_key, derivation), error::wallet_internal_error,
7060 THROW_WALLET_EXCEPTION_IF(!crypto::generate_key_derivation(address.m_view_public_key, additional_tx_keys[i], additional_derivations[i]), error::wallet_internal_error,
7061 THROW_WALLET_EXCEPTION_IF(!ok || (res.txs.size() != 1 && res.txs_as_hex.size() != 1),
7062 if(res.txs.size() == 1)
7063 ok = string_tools::parse_hexstr_to_binbuff(res.txs.front().as_hex, tx_data);
7064 ok = string_tools::parse_hexstr_to_binbuff(res.txs_as_hex.front(), tx_data);
7065 THROW_WALLET_EXCEPTION_IF(!ok, error::wallet_internal_error, "Failed to parse transaction from daemon");
7066 THROW_WALLET_EXCEPTION_IF(!cryptonote::parse_and_validate_tx_from_blob(tx_data, tx, tx_hash, tx_prefix_hash), error::wallet_internal_error,
7067 THROW_WALLET_EXCEPTION_IF(tx_hash != txid, error::wallet_internal_error,
7068 THROW_WALLET_EXCEPTION_IF(!additional_derivations.empty() && additional_derivations.size() != tx.vout.size(), error::wallet_internal_error,
7069 const cryptonote::txout_to_key *const out_key = boost::get<cryptonote::txout_to_key>(std::addressof(tx.vout[n].target));
7070 if(!out_key)
7071 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to derive public key");
7072 if(!found && !additional_derivations.empty())
7073 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to derive public key");
7074 if(found)
7075 if(tx.rct_signatures.type == rct::RCTTypeNull)
7076 if(rct::equalKeys(C, Ctmp))
7077 if(!in_pool)
7078 if(err.empty())
7079std::string wallet2::get_tx_proof(const crypto::hash &txid, const cryptonote::account_public_address &address, bool is_subaddress, const std::string &message)
7080 std::string prefix_data((const char *)&txid, sizeof(crypto::hash));
7081 if(is_out)
7082 THROW_WALLET_EXCEPTION_IF(!get_tx_key(txid, tx_key, additional_tx_keys), error::wallet_internal_error, "Tx secret key wasn't found in the wallet file.");
7083 if(is_subaddress)
7084 crypto::generate_tx_proof(prefix_hash, tx_pub_key, address.m_view_public_key, address.m_spend_public_key, shared_secret[0], tx_key, sig[0]);
7085 crypto::generate_tx_proof(prefix_hash, tx_pub_key, address.m_view_public_key, boost::none, shared_secret[0], tx_key, sig[0]);
7086 if(is_subaddress)
7087 crypto::generate_tx_proof(prefix_hash, tx_pub_key, address.m_view_public_key, address.m_spend_public_key, shared_secret[i], additional_tx_keys[i - 1], sig[i]);
7088 crypto::generate_tx_proof(prefix_hash, tx_pub_key, address.m_view_public_key, boost::none, shared_secret[i], additional_tx_keys[i - 1], sig[i]);
7089 THROW_WALLET_EXCEPTION_IF(!ok || (res.txs.size() != 1 && res.txs_as_hex.size() != 1),
7090 if(res.txs.size() == 1)
7091 ok = string_tools::parse_hexstr_to_binbuff(res.txs.front().as_hex, tx_data);
7092 ok = string_tools::parse_hexstr_to_binbuff(res.txs_as_hex.front(), tx_data);
7093 THROW_WALLET_EXCEPTION_IF(!ok, error::wallet_internal_error, "Failed to parse transaction from daemon");
7094 THROW_WALLET_EXCEPTION_IF(!cryptonote::parse_and_validate_tx_from_blob(tx_data, tx, tx_hash, tx_prefix_hash), error::wallet_internal_error,
7095 THROW_WALLET_EXCEPTION_IF(tx_hash != txid, error::wallet_internal_error, "Failed to get the right transaction from daemon");
7096 THROW_WALLET_EXCEPTION_IF(tx_pub_key == null_pkey, error::wallet_internal_error, "Tx pubkey was not found");
7097 if(is_subaddress)
7098 crypto::generate_tx_proof(prefix_hash, address.m_view_public_key, tx_pub_key, address.m_spend_public_key, shared_secret[0], a, sig[0]);
7099 crypto::generate_tx_proof(prefix_hash, address.m_view_public_key, tx_pub_key, boost::none, shared_secret[0], a, sig[0]);
7100 if(is_subaddress)
7101 crypto::generate_tx_proof(prefix_hash, address.m_view_public_key, additional_tx_pub_keys[i - 1], address.m_spend_public_key, shared_secret[i], a, sig[i]);
7102 crypto::generate_tx_proof(prefix_hash, address.m_view_public_key, additional_tx_pub_keys[i - 1], boost::none, shared_secret[i], a, sig[i]);
7103 THROW_WALLET_EXCEPTION_IF(!crypto::generate_key_derivation(shared_secret[0], rct::rct2sk(rct::I), derivation), error::wallet_internal_error, "Failed to generate key derivation");
7104 THROW_WALLET_EXCEPTION_IF(!crypto::generate_key_derivation(shared_secret[i], rct::rct2sk(rct::I), additional_derivations[i - 1]), error::wallet_internal_error, "Failed to generate key derivation");
7105 THROW_WALLET_EXCEPTION_IF(!received, error::wallet_internal_error, tr("No funds received in this tx."));
7106 tools::base58::encode(std::string((const char *)&shared_secret[i], sizeof(crypto::public_key))) +
7107 tools::base58::encode(std::string((const char *)&sig[i], sizeof(crypto::signature)));
7108bool wallet2::check_tx_proof(const crypto::hash &txid, const cryptonote::account_public_address &address, bool is_subaddress, const std::string &message, const std::string &sig_str, uint64_t &received, bool &in_pool, uint64_t &confirmations)
7109 THROW_WALLET_EXCEPTION_IF(sig_str.size() < header_len || sig_str.substr(0, header_len) != header, error::wallet_internal_error,
7110 const size_t pk_len = tools::base58::encode(std::string((const char *)&shared_secret[0], sizeof(crypto::public_key))).size();
7111 const size_t sig_len = tools::base58::encode(std::string((const char *)&sig[0], sizeof(crypto::signature))).size();
7112 THROW_WALLET_EXCEPTION_IF(sig_str.size() != header_len + num_sigs * (pk_len + sig_len), error::wallet_internal_error,
7113 THROW_WALLET_EXCEPTION_IF(!tools::base58::decode(sig_str.substr(offset, pk_len), pk_decoded), error::wallet_internal_error,
7114 THROW_WALLET_EXCEPTION_IF(!tools::base58::decode(sig_str.substr(offset + pk_len, sig_len), sig_decoded), error::wallet_internal_error,
7115 THROW_WALLET_EXCEPTION_IF(sizeof(crypto::public_key) != pk_decoded.size() || sizeof(crypto::signature) != sig_decoded.size(), error::wallet_internal_error,
7116 THROW_WALLET_EXCEPTION_IF(sizeof(crypto::public_key) != pk_decoded.size() || sizeof(crypto::signature) != sig_decoded.size(), error::wallet_internal_error,
7117 THROW_WALLET_EXCEPTION_IF(sizeof(crypto::public_key) != pk_decoded.size() || sizeof(crypto::signature) != sig_decoded.size(), error::wallet_internal_error,
7118 memcpy(&shared_secret[i], pk_decoded.data(), sizeof(crypto::public_key));
7119 memcpy(&sig[i], sig_decoded.data(), sizeof(crypto::signature));
7120 THROW_WALLET_EXCEPTION_IF(!ok || (res.txs.size() != 1 && res.txs_as_hex.size() != 1),
7121 if(res.txs.size() == 1)
7122 ok = string_tools::parse_hexstr_to_binbuff(res.txs.front().as_hex, tx_data);
7123 ok = string_tools::parse_hexstr_to_binbuff(res.txs_as_hex.front(), tx_data);
7124 THROW_WALLET_EXCEPTION_IF(!ok, error::wallet_internal_error, "Failed to parse transaction from daemon");
7125 THROW_WALLET_EXCEPTION_IF(!cryptonote::parse_and_validate_tx_from_blob(tx_data, tx, tx_hash, tx_prefix_hash), error::wallet_internal_error,
7126 THROW_WALLET_EXCEPTION_IF(tx_hash != txid, error::wallet_internal_error, "Failed to get the right transaction from daemon");
7127 THROW_WALLET_EXCEPTION_IF(tx_pub_key == null_pkey, error::wallet_internal_error, "Tx pubkey was not found");
7128 THROW_WALLET_EXCEPTION_IF(additional_tx_pub_keys.size() + 1 != num_sigs, error::wallet_internal_error, "Signature size mismatch with additional tx pubkeys");
7129 std::string prefix_data((const char *)&txid, sizeof(crypto::hash));
7130 if(is_out)
7131 good_signature[0] = is_subaddress ? crypto::check_tx_proof(prefix_hash, tx_pub_key, address.m_view_public_key, address.m_spend_public_key, shared_secret[0], sig[0]) : crypto::check_tx_proof(prefix_hash, tx_pub_key, address.m_view_public_key, boost::none, shared_secret[0], sig[0]);
7132 good_signature[0] = is_subaddress ? crypto::check_tx_proof(prefix_hash, tx_pub_key, address.m_view_public_key, address.m_spend_public_key, shared_secret[0], sig[0]) : crypto::check_tx_proof(prefix_hash, tx_pub_key, address.m_view_public_key, boost::none, shared_secret[0], sig[0]);
7133 good_signature[i + 1] = is_subaddress ? crypto::check_tx_proof(prefix_hash, additional_tx_pub_keys[i], address.m_view_public_key, address.m_spend_public_key, shared_secret[i + 1], sig[i + 1]) : crypto::check_tx_proof(prefix_hash, additional_tx_pub_keys[i], address.m_view_public_key, boost::none, shared_secret[i + 1], sig[i + 1]);
7134 good_signature[i + 1] = is_subaddress ? crypto::check_tx_proof(prefix_hash, additional_tx_pub_keys[i], address.m_view_public_key, address.m_spend_public_key, shared_secret[i + 1], sig[i + 1]) : crypto::check_tx_proof(prefix_hash, additional_tx_pub_keys[i], address.m_view_public_key, boost::none, shared_secret[i + 1], sig[i + 1]);
7135 good_signature[0] = is_subaddress ? crypto::check_tx_proof(prefix_hash, address.m_view_public_key, tx_pub_key, address.m_spend_public_key, shared_secret[0], sig[0]) : crypto::check_tx_proof(prefix_hash, address.m_view_public_key, tx_pub_key, boost::none, shared_secret[0], sig[0]);
7136 good_signature[0] = is_subaddress ? crypto::check_tx_proof(prefix_hash, address.m_view_public_key, tx_pub_key, address.m_spend_public_key, shared_secret[0], sig[0]) : crypto::check_tx_proof(prefix_hash, address.m_view_public_key, tx_pub_key, boost::none, shared_secret[0], sig[0]);
7137 good_signature[i + 1] = is_subaddress ? crypto::check_tx_proof(prefix_hash, address.m_view_public_key, additional_tx_pub_keys[i], address.m_spend_public_key, shared_secret[i + 1], sig[i + 1]) : crypto::check_tx_proof(prefix_hash, address.m_view_public_key, additional_tx_pub_keys[i], boost::none, shared_secret[i + 1], sig[i + 1]);
7138 good_signature[i + 1] = is_subaddress ? crypto::check_tx_proof(prefix_hash, address.m_view_public_key, additional_tx_pub_keys[i], address.m_spend_public_key, shared_secret[i + 1], sig[i + 1]) : crypto::check_tx_proof(prefix_hash, address.m_view_public_key, additional_tx_pub_keys[i], boost::none, shared_secret[i + 1], sig[i + 1]);
7139 if(std::any_of(good_signature.begin(), good_signature.end(), [](int i) { return i > 0; }))
7140 if(std::any_of(good_signature.begin(), good_signature.end(), [](int i) { return i > 0; }))
7141 if(good_signature[0])
7142 THROW_WALLET_EXCEPTION_IF(!crypto::generate_key_derivation(shared_secret[0], rct::rct2sk(rct::I), derivation), error::wallet_internal_error, "Failed to generate key derivation");
7143 if(good_signature[i])
7144 THROW_WALLET_EXCEPTION_IF(!crypto::generate_key_derivation(shared_secret[i], rct::rct2sk(rct::I), additional_derivations[i - 1]), error::wallet_internal_error, "Failed to generate key derivation");
7145std::string wallet2::get_reserve_proof(const boost::optional<std::pair<uint32_t, uint64_t>> &account_minreserve, const std::string &message)
7146 THROW_WALLET_EXCEPTION_IF(m_watch_only || m_multisig, error::wallet_internal_error, "Reserve proof can only be generated by a full wallet");
7147 THROW_WALLET_EXCEPTION_IF(balance_all() == 0, error::wallet_internal_error, "Zero balance");
7148 THROW_WALLET_EXCEPTION_IF(account_minreserve && balance(account_minreserve->first) < account_minreserve->second, error::wallet_internal_error,
7149 if(!td.m_spent && (!account_minreserve || account_minreserve->first == td.m_subaddr_index.major))
7150 if(account_minreserve)
7151 prefix_data.append((const char *)&m_account.get_keys().m_account_address, sizeof(cryptonote::account_public_address));
7152 prefix_data.append((const char *)&m_transfers[selected_transfers[i]].m_key_image, sizeof(crypto::key_image));
7153 THROW_WALLET_EXCEPTION_IF(tx_pub_key == crypto::null_pkey, error::wallet_internal_error, "The tx public key isn't found");
7154 THROW_WALLET_EXCEPTION_IF(!crypto::generate_key_derivation(proof.shared_secret, rct::rct2sk(rct::I), derivation),
7155 THROW_WALLET_EXCEPTION_IF(!derive_subaddress_public_key(td.get_public_key(), derivation, proof.index_in_tx, subaddress_spendkey),
7156 if(m_subaddresses.count(subaddress_spendkey) == 1)
7157 THROW_WALLET_EXCEPTION_IF(additional_tx_pub_keys.empty(), error::wallet_internal_error,
7158 THROW_WALLET_EXCEPTION_IF(i == 1, error::wallet_internal_error,
7159 crypto::generate_tx_proof(prefix_hash, m_account.get_keys().m_account_address.m_view_public_key, *tx_pub_key_used, boost::none, proof.shared_secret, m_account.get_keys().m_view_secret_key, proof.shared_secret_sig);
7160 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key image");
7161 THROW_WALLET_EXCEPTION_IF(ephemeral.pub != td.get_public_key(), error::wallet_internal_error, "Derived public key doesn't agree with the stored one");
7162 if(!index.is_zero())
7163bool wallet2::check_reserve_proof(const cryptonote::account_public_address &address, const std::string &message, const std::string &sig_str, uint64_t &total, uint64_t &spent)
7164 THROW_WALLET_EXCEPTION_IF(!check_connection(&rpc_version), error::wallet_internal_error, "Failed to connect to daemon: " + get_daemon_address());
7165 THROW_WALLET_EXCEPTION_IF(rpc_version < MAKE_CORE_RPC_VERSION(1, 0), error::wallet_internal_error, "Daemon RPC version is too old");
7166 THROW_WALLET_EXCEPTION_IF(!boost::string_ref{sig_str}.starts_with(header), error::wallet_internal_error,
7167 THROW_WALLET_EXCEPTION_IF(!tools::base58::decode(sig_str.substr(std::strlen(header)), sig_decoded), error::wallet_internal_error,
7168 THROW_WALLET_EXCEPTION_IF(subaddr_spendkeys.count(address.m_spend_public_key) == 0, error::wallet_internal_error,
7169 prefix_data.append((const char *)&address, sizeof(cryptonote::account_public_address));
7170 prefix_data.append((const char *)&proofs[i].key_image, sizeof(crypto::key_image));
7171 THROW_WALLET_EXCEPTION_IF(!ok || gettx_res.txs.size() != proofs.size(),
7172 THROW_WALLET_EXCEPTION_IF(!ok || kispent_res.spent_status.size() != proofs.size(),
7173 THROW_WALLET_EXCEPTION_IF(gettx_res.txs[i].in_pool, error::wallet_internal_error, "Tx is unconfirmed");
7174 ok = string_tools::parse_hexstr_to_binbuff(gettx_res.txs[i].as_hex, tx_data);
7175 THROW_WALLET_EXCEPTION_IF(!ok, error::wallet_internal_error, "Failed to parse transaction from daemon");
7176 THROW_WALLET_EXCEPTION_IF(!cryptonote::parse_and_validate_tx_from_blob(tx_data, tx, tx_hash, tx_prefix_hash), error::wallet_internal_error,
7177 THROW_WALLET_EXCEPTION_IF(tx_hash != proof.txid, error::wallet_internal_error, "Failed to get the right transaction from daemon");
7178 THROW_WALLET_EXCEPTION_IF(proof.index_in_tx >= tx.vout.size(), error::wallet_internal_error, "index_in_tx is out of bound");
7179 const cryptonote::txout_to_key *const out_key = boost::get<cryptonote::txout_to_key>(std::addressof(tx.vout[proof.index_in_tx].target));
7180 THROW_WALLET_EXCEPTION_IF(!out_key, error::wallet_internal_error, "Output key wasn't found")
7181 THROW_WALLET_EXCEPTION_IF(tx_pub_key == crypto::null_pkey, error::wallet_internal_error, "The tx public key isn't found");
7182 ok = crypto::check_tx_proof(prefix_hash, address.m_view_public_key, tx_pub_key, boost::none, proof.shared_secret, proof.shared_secret_sig);
7183 if(!ok && additional_tx_pub_keys.size() == tx.vout.size())
7184 ok = crypto::check_tx_proof(prefix_hash, address.m_view_public_key, additional_tx_pub_keys[proof.index_in_tx], boost::none, proof.shared_secret, proof.shared_secret_sig);
7185 if(!ok)
7186 if(!ok)
7187 THROW_WALLET_EXCEPTION_IF(!crypto::generate_key_derivation(proof.shared_secret, rct::rct2sk(rct::I), derivation), error::wallet_internal_error, "Failed to generate key derivation");
7188 THROW_WALLET_EXCEPTION_IF(subaddr_spendkeys.count(subaddr_spendkey) == 0, error::wallet_internal_error,
7189 if(amount == 0)
7190 if(kispent_res.spent_status[i])
7191 if(!crypto::check_signature(prefix_hash, i.first, i.second))
7192 if(result)
7193 if(ok)
7194 if(resp_t.status == CORE_RPC_STATUS_BUSY)
7195 else if(resp_t.status != CORE_RPC_STATUS_OK)
7196 if(i == m_tx_notes.end())
7197 if(i == m_attributes.end())
7198 if(m_account_tags.second.size() != get_num_subaddress_accounts())
7199 if(!tag.empty() && m_account_tags.first.count(tag) == 0)
7200 if(std::find(m_account_tags.second.begin(), m_account_tags.second.end(), i->first) == m_account_tags.second.end())
7201 THROW_WALLET_EXCEPTION_IF(account_index >= get_num_subaddress_accounts(), error::wallet_internal_error, "Account index out of bound");
7202 if(m_account_tags.second[account_index] == tag)
7203 THROW_WALLET_EXCEPTION_IF(tag.empty(), error::wallet_internal_error, "Tag must not be empty");
7204 THROW_WALLET_EXCEPTION_IF(m_account_tags.first.count(tag) == 0, error::wallet_internal_error, "Tag is unregistered");
7205 return std::string("SigV1") + tools::base58::encode(std::string((const char *)&signature, sizeof(signature)));
7206 if(signature.size() < header_len || signature.substr(0, header_len) != "SigV1")
7207 if(!tools::base58::decode(signature.substr(header_len), decoded))
7208 if(sizeof(s) != decoded.size())
7209 if(sizeof(s) != decoded.size())
7210 memcpy(&s, decoded.data(), sizeof(s));
7211 if(!parse_tx_extra(td.m_tx.extra, tx_extra_fields))
7212 THROW_WALLET_EXCEPTION_IF(!find_tx_extra_field_by_type(tx_extra_fields, pub_key_field, 0), error::wallet_internal_error,
7213 if(!two_found)
7214 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key derivation");
7215 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key derivation");
7216 if(!tx_scan_info.error && tx_scan_info.received)
7217 THROW_WALLET_EXCEPTION_IF(true, error::wallet_internal_error,
7218 data += std::string((const char *)&keys.m_spend_public_key, sizeof(crypto::public_key));
7219 data += std::string((const char *)&keys.m_view_public_key, sizeof(crypto::public_key));
7220 data += std::string((const char *)&i.first, sizeof(crypto::key_image));
7221 data += std::string((const char *)&i.second, sizeof(crypto::signature));
7222 crypto::cn_fast_hash(&td.m_key_image, sizeof(td.m_key_image), hash);
7223 THROW_WALLET_EXCEPTION_IF(out.target.type() != typeid(txout_to_key), error::wallet_internal_error,
7224 if(!parse_tx_extra(td.m_tx.extra, tx_extra_fields))
7225 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key image");
7226 THROW_WALLET_EXCEPTION_IF(td.m_key_image_known && !td.m_key_image_partial && ki != td.m_key_image,
7227 THROW_WALLET_EXCEPTION_IF(in_ephemeral.pub != pkey,
7228 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, std::string(tr("failed to read file ")) + filename);
7229 if(data.size() < magiclen || memcmp(data.data(), KEY_IMAGE_EXPORT_FILE_MAGIC, magiclen))
7230 if(data.size() < magiclen || memcmp(data.data(), KEY_IMAGE_EXPORT_FILE_MAGIC_LEGACY, magiclen))
7231 const size_t headerlen = 2 * sizeof(crypto::public_key);
7232 THROW_WALLET_EXCEPTION_IF(data.size() < headerlen, error::wallet_internal_error, std::string("Bad data size from file ") + filename);
7233 const crypto::public_key &public_view_key = *(const crypto::public_key *)&data[sizeof(crypto::public_key)];
7234 if(public_spend_key != keys.m_spend_public_key || public_view_key != keys.m_view_public_key)
7235 const size_t record_size = sizeof(crypto::key_image) + sizeof(crypto::signature);
7236 const size_t record_size = sizeof(crypto::key_image) + sizeof(crypto::signature);
7237 THROW_WALLET_EXCEPTION_IF((data.size() - headerlen) % record_size,
7238 crypto::signature signature = *reinterpret_cast<const crypto::signature *>(&data[headerlen + n * record_size + sizeof(crypto::key_image)]);
7239 THROW_WALLET_EXCEPTION_IF(signed_key_images.size() > m_transfers.size(), error::wallet_internal_error,
7240 if(signed_key_images.empty())
7241 THROW_WALLET_EXCEPTION_IF(out.target.type() != typeid(txout_to_key), error::wallet_internal_error,
7242 THROW_WALLET_EXCEPTION_IF(!(rct::scalarmultKey(rct::ki2rct(key_image), rct::curveOrder()) == rct::identity()),
7243 THROW_WALLET_EXCEPTION_IF(!crypto::check_ring_signature((const crypto::hash &)key_image, key_image, pkeys, &signature),
7244 if(!check_spent)
7245 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "is_key_image_spent");
7246 THROW_WALLET_EXCEPTION_IF(daemon_resp.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "is_key_image_spent");
7247 THROW_WALLET_EXCEPTION_IF(daemon_resp.status != CORE_RPC_STATUS_OK, error::is_key_image_spent_error, daemon_resp.status);
7248 THROW_WALLET_EXCEPTION_IF(daemon_resp.spent_status.size() != signed_key_images.size(), error::wallet_internal_error,
7249 if(in.type() == typeid(cryptonote::txin_to_key))
7250 if(td.m_spent)
7251 if(daemon_resp.spent_status[i] == COMMAND_RPC_IS_KEY_IMAGE_SPENT::SPENT_IN_BLOCKCHAIN)
7252 if(v != out_kimg_map.end())
7253 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "gettransactions");
7254 THROW_WALLET_EXCEPTION_IF(gettxs_res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "gettransactions");
7255 THROW_WALLET_EXCEPTION_IF(gettxs_res.txs.size() != spent_txids.size(), error::wallet_internal_error,
7256 THROW_WALLET_EXCEPTION_IF(e.in_pool, error::wallet_internal_error, "spent tx isn't supposed to be in txpool");
7257 THROW_WALLET_EXCEPTION_IF(!epee::string_tools::parse_hexstr_to_binbuff(e.as_hex, bd), error::wallet_internal_error, "parse_hexstr_to_binbuff failed");
7258 THROW_WALLET_EXCEPTION_IF(!epee::string_tools::parse_hexstr_to_binbuff(e.as_hex, bd), error::wallet_internal_error, "parse_hexstr_to_binbuff failed");
7259 THROW_WALLET_EXCEPTION_IF(!cryptonote::parse_and_validate_tx_from_blob(bd, spent_tx, spnet_txid_parsed, spent_txid_prefix), error::wallet_internal_error, "parse_and_validate_tx_from_blob failed");
7260 THROW_WALLET_EXCEPTION_IF(*spent_txid != spnet_txid_parsed, error::wallet_internal_error, "parsed txid mismatch");
7261 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key derivation");
7262 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key derivation");
7263 THROW_WALLET_EXCEPTION_IF(tx_scan_info.error, error::wallet_internal_error, "check_acc_out_precomp failed");
7264 if(tx_scan_info.received)
7265 if(tx_scan_info.money_transfered == 0)
7266 if(in.type() != typeid(cryptonote::txin_to_key))
7267 if(it != m_key_images.end())
7268 if(amount > 0)
7269 THROW_WALLET_EXCEPTION_IF(amount != td.amount(), error::wallet_internal_error,
7270 if(m_callback)
7271 if(subaddr_account != (uint32_t)-1 && subaddr_account != td.m_subaddr_index.major)
7272 if(j->second.m_tx_hash == *spent_txid)
7273 memcpy(&spent_txid, &n, sizeof(uint64_t));
7274 if(std::get<0>(bc))
7275 THROW_WALLET_EXCEPTION_IF(td.m_tx.vout.empty(), error::wallet_internal_error, "tx with no outputs at index " + boost::lexical_cast<std::string>(i));
7276 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key image");
7277 THROW_WALLET_EXCEPTION_IF(in_ephemeral.pub != boost::get<cryptonote::txout_to_key>(td.m_tx.vout[td.m_internal_output_index].target).key,
7278 if(used_L.find(L) != used_L.end())
7279 if(p.m_signer == ignore)
7280 if(used_L.find(lr.m_L) != used_L.end())
7281 THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key image");
7282 header += std::string((const char *)&keys.m_spend_public_key, sizeof(crypto::public_key));
7283 header += std::string((const char *)&keys.m_view_public_key, sizeof(crypto::public_key));
7284 header += std::string((const char *)&signer, sizeof(crypto::public_key));
7285 THROW_WALLET_EXCEPTION_IF(data.size() < magiclen || memcmp(data.data(), MULTISIG_EXPORT_FILE_MAGIC, magiclen),
7286 const size_t headerlen = 3 * sizeof(crypto::public_key);
7287 THROW_WALLET_EXCEPTION_IF(data.size() < headerlen, error::wallet_internal_error, "Bad data size");
7288 const crypto::public_key &public_view_key = *(const crypto::public_key *)&data[sizeof(crypto::public_key)];
7289 const crypto::public_key &signer = *(const crypto::public_key *)&data[2 * sizeof(crypto::public_key)];
7290 THROW_WALLET_EXCEPTION_IF(public_spend_key != keys.m_spend_public_key || public_view_key != keys.m_view_public_key,
7291 if(get_multisig_signer_public_key() == signer)
7292 if(seen.find(signer) != seen.end())
7293 if(pi.size() < n_outputs)
7294 if(n_outputs == 0)
7295 if(!info.empty() && !info.front().empty())
7296 std::sort(info.begin(), info.end(), [](const std::vector<tools::wallet2::multisig_info> &i0, const std::vector<tools::wallet2::multisig_info> &i1) { return memcmp(&i0[0].m_signer, &i1[0].m_signer, sizeof(i0[0].m_signer)); });
7297 if(!td.m_key_image_partial)
7298 crypto::generate_chacha_key(&skey, sizeof(skey), key);
7299 ciphertext.resize(plaintext.size() + sizeof(iv) + (authenticated ? sizeof(crypto::signature) : 0));
7300 ciphertext.resize(plaintext.size() + sizeof(iv) + (authenticated ? sizeof(crypto::signature) : 0));
7301 crypto::chacha20(plaintext.data(), plaintext.size(), key, iv, &ciphertext[sizeof(iv)]);
7302 memcpy(&ciphertext[0], &iv, sizeof(iv));
7303 if(authenticated)
7304 crypto::cn_fast_hash(ciphertext.data(), ciphertext.size() - sizeof(signature), hash);
7305 crypto::signature &signature = *(crypto::signature *)&ciphertext[ciphertext.size() - sizeof(crypto::signature)];
7306 const size_t prefix_size = sizeof(chacha_iv) + (authenticated ? sizeof(crypto::signature) : 0);
7307 const size_t prefix_size = sizeof(chacha_iv) + (authenticated ? sizeof(crypto::signature) : 0);
7308 THROW_WALLET_EXCEPTION_IF(ciphertext.size() < prefix_size,
7309 crypto::generate_chacha_key(&skey, sizeof(skey), key);
7310 if(authenticated)
7311 crypto::cn_fast_hash(ciphertext.data(), ciphertext.size() - sizeof(signature), hash);
7312 const crypto::signature &signature = *(const crypto::signature *)&ciphertext[ciphertext.size() - sizeof(crypto::signature)];
7313 THROW_WALLET_EXCEPTION_IF(!crypto::check_signature(hash, pkey, signature),
7314 if(!is_legacy)
7315 crypto::chacha20(ciphertext.data() + sizeof(iv), ciphertext.size() - prefix_size, key, iv, &plaintext[0]);
7316 crypto::chacha8(ciphertext.data() + sizeof(iv), ciphertext.size() - prefix_size, key, iv, &plaintext[0]);
7317 if(!get_account_address_from_str(nettype(), info, address))
7318 if(info.has_payment_id && !payment_id.empty())
7319 if(!payment_id.empty())
7320 if(!wallet2::parse_long_payment_id(payment_id, pid32) && !wallet2::parse_short_payment_id(payment_id, pid8))
7321 if(!payment_id.empty())
7322 if(amount > 0)
7323 if(!recipient_name.empty())
7324 if(!tx_description.empty())
7325 if(separator_pos == std::string::npos || uri.substr(0, separator_pos) != "ryo")
7326 if(pos_behind_schema >= uri.size())
7327 if(!get_account_address_from_str(nettype(), info, address))
7328 if(!strchr(remainder.c_str(), '?'))
7329 if(body.empty())
7330 boost::split(arguments, body, boost::is_any_of("&"));
7331 boost::split(kv, arg, boost::is_any_of("="));
7332 if(kv.size() != 2)
7333 if(have_arg.find(kv[0]) != have_arg.end())
7334 if(kv[0] == "tx_amount")
7335 if(!cryptonote::parse_amount(amount, kv[1]))
7336 else if(kv[0] == "tx_payment_id")
7337 if(info.has_payment_id)
7338 if(!wallet2::parse_long_payment_id(kv[1], hash) && !wallet2::parse_short_payment_id(kv[1], hash8))
7339 else if(kv[0] == "recipient_name")
7340 else if(kv[0] == "tx_description")
7341 if(!check_connection(&version))
7342 if(version < MAKE_CORE_RPC_VERSION(1, 6))
7343 if(date.tm_mon < 0 || 11 < date.tm_mon || date.tm_mday < 1 || 31 < date.tm_mday)
7344 if(!err.empty())
7345 if(!r || res.status != CORE_RPC_STATUS_OK)
7346 if(!r)
7347 else if(res.status == CORE_RPC_STATUS_BUSY)
7348 if(res.blocks.size() < 3)
7349 if(!parse_and_validate_block_from_blob(res.blocks[0].block, blk_min))
7350 if(!parse_and_validate_block_from_blob(res.blocks[1].block, blk_mid))
7351 if(!parse_and_validate_block_from_blob(res.blocks[2].block, blk_max))
7352 if(!(timestamp_min <= timestamp_mid && timestamp_mid <= timestamp_max))
7353 if(timestamp_target > timestamp_max)
7354 if(timestamp_target <= timestamp_min + 2 * 24 * 60 * 60) // two days of "buffer" period
7355 if(timestamp_target <= timestamp_mid)
7356 if(height_max - height_min <= 2 * 24 * 30) // don't divide the height range finer than two days
7357 if(result && *result != CORE_RPC_STATUS_OK)
7358 THROW_WALLET_EXCEPTION_IF(fee_level.first == 0.0, error::wallet_internal_error, "Invalid 0 fee");
7359 THROW_WALLET_EXCEPTION_IF(fee_level.second == 0.0, error::wallet_internal_error, "Invalid 0 fee");
7360 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "Failed to connect to daemon");
7361 THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_txpool_backlog");
7362 THROW_WALLET_EXCEPTION_IF(res.status != CORE_RPC_STATUS_OK, error::get_tx_pool_error);
7363 THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_info");
7364 THROW_WALLET_EXCEPTION_IF(resp_t.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_info");
7365 THROW_WALLET_EXCEPTION_IF(resp_t.status != CORE_RPC_STATUS_OK, error::get_tx_pool_error);
7366 if(i.blob_size == 0)
7367 if(this_fee_byte >= our_fee_byte_min)
7368 if(this_fee_byte >= our_fee_byte_max)
7369 THROW_WALLET_EXCEPTION_IF(min_blob_size == 0, error::wallet_internal_error, "Invalid 0 fee");
7370 THROW_WALLET_EXCEPTION_IF(max_blob_size == 0, error::wallet_internal_error, "Invalid 0 fee");
7371 THROW_WALLET_EXCEPTION_IF(fee == 0, error::wallet_internal_error, "Invalid 0 fee");
7372 if(m_nettype == TESTNET)
7373 if(m_nettype == STAGENET)
7374 THROW_WALLET_EXCEPTION_IF(m_nettype != MAINNET, tools::error::wallet_internal_error, "Invalid network type");
7375 if(m_segregation_height > 0)
7376 if(use_dns)
7377 if(tools::dns_utils::load_txt_records_from_dns(records, dns_urls))
7378 boost::split(fields, record, boost::is_any_of(":"));
7379 if(fields.size() != 2)
7380 if(!string_tools::get_xtype_from_string(height, fields[1]))
7381 if(diff < best_diff)
7382 if(best_height)
7383 if(m_nettype == TESTNET)
7384 else if(m_nettype == STAGENET)
7385 if(m_offset == 0 && m_blockchain.empty())
7386 if(ver < 5)
7387 if(ver < 19)
7388 if(ver < 6)
7389 if(ver < 7)
7390 if(ver < 8)
7391 if(ver < 9)
7392 if(ver < 11)
7393 if(ver < 12)
7394 if(ver < 13)
7395 if(ver < 17)
7396 if(ver < 14)
7397 if(ver < 15)
7398 if(ver < 16)
7399 if(ver < 17)
7400 if(ver < 22)
7401 if(ver < 18)
7402 if(ver < 20)
7403 if(ver < 21)
7404 if(ver < 22)
7405 if(ver < 23)
7406 if(ver < 24)
7407 std::string get_tx_proof(const crypto::hash &txid, const cryptonote::account_public_address &address, bool is_subaddress, const std::string &message);
7408 bool check_tx_proof(const crypto::hash &txid, const cryptonote::account_public_address &address, bool is_subaddress, const std::string &message, const std::string &sig_str, uint64_t &received, bool &in_pool, uint64_t &confirmations);
7409 std::string get_spend_proof(const crypto::hash &txid, const std::string &message);
7410 bool check_spend_proof(const crypto::hash &txid, const std::string &message, const std::string &sig_str);
7411 std::string get_reserve_proof(const boost::optional<std::pair<uint32_t, uint64_t>> &account_minreserve, const std::string &message);
7412 bool check_reserve_proof(const cryptonote::account_public_address &address, const std::string &message, const std::string &sig_str, uint64_t &total, uint64_t &spent);
7413 if(use_fork_rules(FORK_FEE_V2, 10))
7414 if(ver < 1)
7415 if(ver < 2)
7416 if(ver < 4)
7417 if(ver < 6)
7418 if(ver < 7)
7419 if(ver < 8)
7420 if(ver < 9)
7421 if(ver < 3)
7422 if(ver < 1)
7423 if(ver < 2)
7424 if(ver < 3)
7425 if(ver < 4)
7426 if(ver < 5)
7427 if(ver < 6)
7428 if(ver < 7)
7429 if(ver < 8)
7430 if(ver < 9)
7431 if(ver < 5)
7432 if(ver < 1)
7433 if(ver < 2)
7434 if(ver < 3)
7435 if(ver < 4)
7436 if(ver < 6)
7437 if(!typename Archive::is_saving() && x.m_change != (uint64_t)-1)
7438 if(ver < 7)
7439 if(ver < 8)
7440 if(ver < 1)
7441 if(ver < 2)
7442 if(ver < 3)
7443 if(!typename Archive::is_saving() && x.m_change != (uint64_t)-1)
7444 if(x.m_amount_in > (x.m_amount_out + x.m_change))
7445 if(ver < 4)
7446 if(!typename Archive::is_saving())
7447 if(ver < 5)
7448 if(ver < 6)
7449 if(ver < 1)
7450 if(ver < 2)
7451 if(ver < 3)
7452 if(ver < 17)
7453 if(ver < 2)
7454 if(ver < 1)
7455 if(ver < 2)
7456 if(ver < 2)
7457 if(ver < 1)
7458 if(ver < 2)
7459 if(ver < 3)
7460 if(command_line::get_arg(vm, command_line::arg_help))
7461 else if(command_line::get_arg(vm, command_line::arg_version))
7462 if(command_line::has_arg(vm, arg_config_file))
7463 if(bf::exists(config_path, ec))
7464 if(!r)
7465 if(!command_line::is_arg_defaulted(vm, arg_log_file))
7466 if(!command_line::is_arg_defaulted(vm, arg_log_level))
7467 if(notice)
7468 if(!command_line::is_arg_defaulted(vm, arg_max_concurrency))
7469 if(!command_line::is_arg_defaulted(vm, arg_log_level))
7470 if(!m_reason.empty())
7471#define THROW_WALLET_EXCEPTION_IF(cond, err_type, ...) \
7472 if(cond) \
7473 if(!pwd_container)
7474 if(m_wallet)
7475 if(m_stop.load(std::memory_order_relaxed))
7476 if(!rpc_config)
7477 if(m_wallet)
7478 if(!command_line::has_arg(*m_vm, arg_trusted_daemon))
7479 if(tools::is_local_address(walvars->get_daemon_address()))
7480 if(command_line::has_arg(*m_vm, arg_wallet_dir))
7481 if(!m_wallet_dir.empty() && MKDIR(m_wallet_dir.c_str(), 0700) < 0 && errno != EEXIST)
7482 if(disable_auth)
7483 if(rpc_config->login)
7484 if(!rpc_config->login)
7485 if(!rpc_login_file.handle())
7486 if(std::ferror(rpc_login_file.handle()))
7487 if(entry.payment_id.substr(16).find_first_not_of('0') == std::string::npos)
7488 if(entry.payment_id.substr(16).find_first_not_of('0') == std::string::npos)
7489 if(entry.payment_id.substr(16).find_first_not_of('0') == std::string::npos)
7490 if(entry.payment_id.substr(16).find_first_not_of('0') == std::string::npos)
7491 if(entry.payment_id.substr(16).find_first_not_of('0') == std::string::npos)
7492 if(entry.payment_id.substr(16).find_first_not_of('0') == std::string::npos)
7493 if(entry.payment_id.substr(16).find_first_not_of('0') == std::string::npos)
7494 if(entry.payment_id.substr(16).find_first_not_of('0') == std::string::npos)
7495 if(!m_wallet)
7496 info.num_unspent_outputs = std::count_if(transfers.begin(), transfers.end(), [&](const tools::wallet2::transfer_details &td) { return !td.m_spent && td.m_subaddr_index == index; });
7497 if(!m_wallet)
7498 if(req.address_index.empty())
7499 info.used = std::find_if(transfers.begin(), transfers.end(), [&](const tools::wallet2::transfer_details &td) { return td.m_subaddr_index == index; }) != transfers.end();
7500 if(!m_wallet)
7501 if(!m_wallet)
7502 if(!m_wallet)
7503 if(!req.tag.empty() && account_tags.first.count(req.tag) == 0)
7504 if(!req.tag.empty() && req.tag != account_tags.second[subaddr_index.major])
7505 if(!m_wallet)
7506 if(!m_wallet)
7507 if(account_tags.second[i] == info.tag)
7508 if(!m_wallet)
7509 if(!get_account_address_from_str(m_wallet->nettype(), info, it->address))
7510 if(er.message.empty())
7511 if(info.has_payment_id)
7512 if(!payment_id.empty() || integrated_payment_id != crypto::null_hash8)
7513 if(!cryptonote::add_extra_nonce_to_tx_extra(extra, extra_nonce))
7514 if(at_least_one_destination && dsts.empty())
7515 if(!payment_id.empty())
7516 if(wallet2::parse_long_payment_id(payment_id_str, long_payment_id))
7517 else if(wallet2::parse_short_payment_id(payment_id_str, short_payment_id))
7518 if(!cryptonote::add_extra_nonce_to_tx_extra(extra, extra_nonce))
7519 if(is_error_value(s))
7520 if(is_error_value(s))
7521 if(get_tx_key)
7522 if(m_wallet->multisig())
7523 if(multisig_txset.empty())
7524 if(!do_not_relay)
7525 if(!r)
7526 if(!m_wallet)
7527 if(m_wallet->restricted())
7528 if(!validate_transfer(req.destinations, req.payment_id, dsts, extra, true, er))
7529 if(req.ring_size != 0)
7530 if(ptx_vector.empty())
7531 if(ptx_vector.size() != 1)
7532 if(!m_wallet)
7533 if(m_wallet->restricted())
7534 if(!validate_transfer(req.destinations, req.payment_id, dsts, extra, true, er))
7535 if(req.ring_size != 0)
7536 if(!m_wallet)
7537 if(m_wallet->restricted())
7538 if(!validate_transfer(destination, req.payment_id, dsts, extra, true, er))
7539 if(req.ring_size != 0)
7540 if(!m_wallet)
7541 if(m_wallet->restricted())
7542 if(!validate_transfer(destination, req.payment_id, dsts, extra, true, er))
7543 if(!epee::string_tools::hex_to_pod(req.key_image, ki))
7544 if(req.ring_size != 0)
7545 if(ptx_vector.empty())
7546 if(ptx_vector.size() > 1)
7547 if(ptx.selected_transfers.size() > 1)
7548 if(!m_wallet)
7549 if(!epee::string_tools::parse_hexstr_to_binbuff(req.hex, blob))
7550 if(!epee::string_tools::parse_hexstr_to_binbuff(req.hex, blob))
7551 if(!m_wallet)
7552 if(req.payment_id.empty())
7553 if(!tools::wallet2::parse_short_payment_id(req.payment_id, payment_id))
7554 if(!m_wallet)
7555 if(!get_account_address_from_str(m_wallet->nettype(), info, req.integrated_address))
7556 if(!info.has_payment_id)
7557 if(!m_wallet)
7558 if(m_wallet->restricted())
7559 if(!m_wallet)
7560 if(!epee::string_tools::parse_hexstr_to_binbuff(req.payment_id, payment_id_blob))
7561 if(!epee::string_tools::parse_hexstr_to_binbuff(req.payment_id, payment_id_blob))
7562 if(sizeof(payment_id) == payment_id_blob.size())
7563 if(sizeof(payment_id) == payment_id_blob.size())
7564 else if(sizeof(payment_id8) == payment_id_blob.size())
7565 else if(sizeof(payment_id8) == payment_id_blob.size())
7566 if(!m_wallet)
7567 if(req.payment_ids.empty())
7568 if(!epee::string_tools::parse_hexstr_to_binbuff(payment_id_str, payment_id_blob))
7569 if(!epee::string_tools::parse_hexstr_to_binbuff(payment_id_str, payment_id_blob))
7570 if(sizeof(payment_id) == payment_id_blob.size())
7571 if(sizeof(payment_id) == payment_id_blob.size())
7572 else if(sizeof(payment_id8) == payment_id_blob.size())
7573 else if(sizeof(payment_id8) == payment_id_blob.size())
7574 if(!m_wallet)
7575 if(req.transfer_type.compare("all") != 0 && req.transfer_type.compare("available") != 0 && req.transfer_type.compare("unavailable") != 0)
7576 if(req.transfer_type.compare("available") == 0)
7577 else if(req.transfer_type.compare("unavailable") == 0)
7578 if(!filter || available != td.m_spent)
7579 if(req.account_index != td.m_subaddr_index.major || (!req.subaddr_indices.empty() && req.subaddr_indices.count(td.m_subaddr_index.minor) == 0))
7580 if(!transfers_found)
7581 if(!m_wallet)
7582 if(m_wallet->restricted())
7583 if(req.key_type.compare("mnemonic") == 0)
7584 if(!m_wallet->get_seed(res.key, short_seed))
7585 else if(req.key_type.compare("view_key") == 0)
7586 else if(req.key_type.compare("spend_key") == 0)
7587 if(!m_wallet)
7588 if(m_wallet->restricted())
7589 if(!m_wallet)
7590 if(m_wallet->restricted())
7591 if(!m_wallet)
7592 if(m_wallet->restricted())
7593 if(!get_account_address_from_str(m_wallet->nettype(), info, req.address))
7594 if(!m_wallet)
7595 if(m_wallet->restricted())
7596 if(!m_wallet)
7597 if(m_wallet->restricted())
7598 if(req.txids.size() != req.notes.size())
7599 if(!epee::string_tools::parse_hexstr_to_binbuff(*i++, txid_blob) || txid_blob.size() != sizeof(crypto::hash))
7600 if(!epee::string_tools::parse_hexstr_to_binbuff(*i++, txid_blob) || txid_blob.size() != sizeof(crypto::hash))
7601 if(!epee::string_tools::parse_hexstr_to_binbuff(*i++, txid_blob) || txid_blob.size() != sizeof(crypto::hash))
7602 if(!m_wallet)
7603 if(!epee::string_tools::parse_hexstr_to_binbuff(*i++, txid_blob) || txid_blob.size() != sizeof(crypto::hash))
7604 if(!epee::string_tools::parse_hexstr_to_binbuff(*i++, txid_blob) || txid_blob.size() != sizeof(crypto::hash))
7605 if(!epee::string_tools::parse_hexstr_to_binbuff(*i++, txid_blob) || txid_blob.size() != sizeof(crypto::hash))
7606 if(!m_wallet)
7607 if(m_wallet->restricted())
7608 if(!m_wallet)
7609 if(m_wallet->restricted())
7610 if(!m_wallet)
7611 if(!epee::string_tools::hex_to_pod(req.txid, txid))
7612 if(!m_wallet->get_tx_key(txid, tx_key, additional_tx_keys))
7613 if(!m_wallet)
7614 if(!epee::string_tools::hex_to_pod(req.txid, txid))
7615 if(!epee::string_tools::hex_to_pod(tx_key_str.substr(0, 64), tx_key))
7616 if(!epee::string_tools::hex_to_pod(tx_key_str.substr(0, 64), additional_tx_keys.back()))
7617 if(!get_account_address_from_str(m_wallet->nettype(), info, req.address))
7618bool wallet_rpc_server::on_get_tx_proof(const wallet_rpc::COMMAND_RPC_GET_TX_PROOF::request &req, wallet_rpc::COMMAND_RPC_GET_TX_PROOF::response &res, epee::json_rpc::error &er)
7619 if(!m_wallet)
7620 if(!epee::string_tools::hex_to_pod(req.txid, txid))
7621 if(!get_account_address_from_str(m_wallet->nettype(), info, req.address))
7622 res.signature = m_wallet->get_tx_proof(txid, info.address, info.is_subaddress, req.message);
7623bool wallet_rpc_server::on_check_tx_proof(const wallet_rpc::COMMAND_RPC_CHECK_TX_PROOF::request &req, wallet_rpc::COMMAND_RPC_CHECK_TX_PROOF::response &res, epee::json_rpc::error &er)
7624 if(!m_wallet)
7625 if(!epee::string_tools::hex_to_pod(req.txid, txid))
7626 if(!get_account_address_from_str(m_wallet->nettype(), info, req.address))
7627 res.good = m_wallet->check_tx_proof(txid, info.address, info.is_subaddress, req.message, req.signature, res.received, res.in_pool, res.confirmations);
7628bool wallet_rpc_server::on_get_spend_proof(const wallet_rpc::COMMAND_RPC_GET_SPEND_PROOF::request &req, wallet_rpc::COMMAND_RPC_GET_SPEND_PROOF::response &res, epee::json_rpc::error &er)
7629 if(!m_wallet)
7630 if(!epee::string_tools::hex_to_pod(req.txid, txid))
7631 res.signature = m_wallet->get_spend_proof(txid, req.message);
7632bool wallet_rpc_server::on_check_spend_proof(const wallet_rpc::COMMAND_RPC_CHECK_SPEND_PROOF::request &req, wallet_rpc::COMMAND_RPC_CHECK_SPEND_PROOF::response &res, epee::json_rpc::error &er)
7633 if(!m_wallet)
7634 if(!epee::string_tools::hex_to_pod(req.txid, txid))
7635 res.good = m_wallet->check_spend_proof(txid, req.message, req.signature);
7636bool wallet_rpc_server::on_get_reserve_proof(const wallet_rpc::COMMAND_RPC_GET_RESERVE_PROOF::request &req, wallet_rpc::COMMAND_RPC_GET_RESERVE_PROOF::response &res, epee::json_rpc::error &er)
7637 if(!m_wallet)
7638 if(!req.all)
7639 if(req.account_index >= m_wallet->get_num_subaddress_accounts())
7640 res.signature = m_wallet->get_reserve_proof(account_minreserve, req.message);
7641bool wallet_rpc_server::on_check_reserve_proof(const wallet_rpc::COMMAND_RPC_CHECK_RESERVE_PROOF::request &req, wallet_rpc::COMMAND_RPC_CHECK_RESERVE_PROOF::response &res, epee::json_rpc::error &er)
7642 if(!m_wallet)
7643 if(!get_account_address_from_str(m_wallet->nettype(), info, req.address))
7644 if(info.is_subaddress)
7645 res.good = m_wallet->check_reserve_proof(info.address, req.message, req.signature, res.total, res.spent);
7646 if(!m_wallet)
7647 if(m_wallet->restricted())
7648 if(req.filter_by_height)
7649 if(req.in)
7650 if(req.out)
7651 if(req.pending || req.failed)
7652 if(!((req.failed && is_failed) || (!is_failed && req.pending)))
7653 if(req.pool)
7654 if(!m_wallet)
7655 if(m_wallet->restricted())
7656 if(!epee::string_tools::parse_hexstr_to_binbuff(req.txid, txid_blob))
7657 if(!epee::string_tools::parse_hexstr_to_binbuff(req.txid, txid_blob))
7658 if(sizeof(txid) == txid_blob.size())
7659 if(sizeof(txid) == txid_blob.size())
7660 if(req.account_index >= m_wallet->get_num_subaddress_accounts())
7661 if(i->second.m_tx_hash == txid)
7662 if(i->first == txid)
7663 if(i->first == txid)
7664 if(i->second.m_pd.m_tx_hash == txid)
7665 if(!m_wallet)
7666 if(!m_wallet)
7667 if(m_wallet->restricted())
7668 if(!m_trusted_daemon)
7669 if(height == 0)
7670 if(uri.empty())
7671 if(!m_wallet)
7672 if(!m_wallet->parse_uri(req.uri, res.uri.address, res.uri.payment_id, res.uri.amount, res.uri.tx_description, res.uri.recipient_name, res.unknown_parameters, error))
7673 if(!m_wallet)
7674 if(req.entries.empty())
7675 if(idx >= ab.size())
7676 if(!m_wallet)
7677 if(m_wallet->restricted())
7678 if(!get_account_address_from_str(m_wallet->nettype(), info, req.address))
7679 if(er.message.empty())
7680 if(info.has_payment_id)
7681 if(!req.payment_id.empty())
7682 if(info.has_payment_id)
7683 if(!wallet2::parse_long_payment_id(req.payment_id, payment_id))
7684 if(!wallet2::parse_short_payment_id(req.payment_id, info.payment_id))
7685 if(!m_wallet->add_address_book_row(info.address, payment_id, req.description, info.is_subaddress))
7686 if(!m_wallet)
7687 if(m_wallet->restricted())
7688 if(req.index >= ab.size())
7689 if(!m_wallet->delete_address_book_row(req.index))
7690 if(!m_wallet)
7691 if(m_wallet->restricted())
7692 if(!m_wallet)
7693 if(!m_trusted_daemon)
7694 if(req.threads_count < 1 || max_mining_threads_count < req.threads_count)
7695 if(!r || daemon_res.status != CORE_RPC_STATUS_OK)
7696 if(!r || daemon_res.status != CORE_RPC_STATUS_OK)
7697 if(m_wallet_dir.empty())
7698 if(filename.find_first_of("<>:\"|?*~") != std::string::npos)
7699 if(filename.find_first_of("<>:\"|?*~") != std::string::npos)
7700 if(filename.find("..") != std::string::npos)
7701 if(!wallet_path_helper(req.filename, er))
7702 if(it == languages.end())
7703 if(!wal)
7704 if(!wal)
7705 if(!wallet_path_helper(req.filename, er))
7706 if(!get_account_address_from_str(m_nettype, info, req.address) || info.is_subaddress || info.is_kurz)
7707 if(req.viewkey.size() != 64 || !epee::string_tools::hex_to_pod(req.viewkey, viewkey))
7708 if(!wallet)
7709 if(!wallet_path_helper(req.filename, er))
7710 boost::split(wseed, req.seed, boost::is_any_of(" "), boost::token_compress_on);
7711 if(wseed.size() == 12 || wseed.size() == 14)
7712 else if(wseed.size() >= 24 && wseed.size() <= 26)
7713 if(!decode_14 && !decode_25)
7714 if(!wallet)
7715 if(decode_14)
7716 if(!wallet_path_helper(req.filename, er))
7717 if(!wal)
7718 if(m_wallet == nullptr)
7719 if(!m_wallet)
7720 if(m_wallet->restricted())
7721 if(m_wallet->verify_password(req.old_password))
7722 if(!m_wallet)
7723 if(!m_wallet)
7724 if(m_wallet->restricted())
7725 if(m_wallet->multisig())
7726 if(m_wallet->watch_only())
7727 if(!m_wallet)
7728 if(m_wallet->restricted())
7729 if(m_wallet->multisig())
7730 if(m_wallet->watch_only())
7731 if(!m_wallet)
7732 if(m_wallet->restricted())
7733 if(!m_wallet->multisig(&ready))
7734 if(!ready)
7735 if(!m_wallet)
7736 if(m_wallet->restricted())
7737 if(!m_wallet->multisig(&ready, &threshold, &total))
7738 if(!ready)
7739 if(req.info.size() < threshold - 1)
7740 if(!epee::string_tools::parse_hexstr_to_binbuff(req.info[n], info[n]))
7741 if(!epee::string_tools::parse_hexstr_to_binbuff(req.info[n], info[n]))
7742 if(m_trusted_daemon)
7743 if(!m_wallet)
7744 if(m_wallet->restricted())
7745 if(!m_wallet->multisig(&ready, &threshold, &total))
7746 if(ready)
7747 if(req.multisig_info.size() < threshold - 1)
7748 if(!m_wallet->finalize_multisig(req.password, req.multisig_info))
7749 if(!m_wallet)
7750 if(m_wallet->restricted())
7751 if(!m_wallet->multisig(&ready, &threshold, &total))
7752 if(!ready)
7753 if(!epee::string_tools::parse_hexstr_to_binbuff(req.tx_data_hex, blob))
7754 if(!epee::string_tools::parse_hexstr_to_binbuff(req.tx_data_hex, blob))
7755 if(!r)
7756 if(!r)
7757 if(!txids.empty())
7758 if(!m_wallet)
7759 if(m_wallet->restricted())
7760 if(!m_wallet->multisig(&ready, &threshold, &total))
7761 if(!ready)
7762 if(!epee::string_tools::parse_hexstr_to_binbuff(req.tx_data_hex, blob))
7763 if(!epee::string_tools::parse_hexstr_to_binbuff(req.tx_data_hex, blob))
7764 if(!r)
7765 if(txs.m_signers.size() < threshold)
7766 if(command_line::get_windows_args(argptrs))
7767 if(!vm)
7768 if(testnet && stagenet)
7769 if(testnet)
7770 else if(stagenet)
7771 if(!wallet_file.empty() && !from_json.empty())
7772 if(!wallet_dir.empty())
7773 if(wallet_file.empty() && from_json.empty())
7774 if(!wallet_file.empty())
7775 if(!wal)
7776 if(quit)
7777 if(wal)
7778 if(m_wallet == nullptr) return;
7779 bool on_get_tx_proof(const wallet_rpc::COMMAND_RPC_GET_TX_PROOF::request &req, wallet_rpc::COMMAND_RPC_GET_TX_PROOF::response &res, epee::json_rpc::error &er);
7780 bool on_check_tx_proof(const wallet_rpc::COMMAND_RPC_CHECK_TX_PROOF::request &req, wallet_rpc::COMMAND_RPC_CHECK_TX_PROOF::response &res, epee::json_rpc::error &er);
7781 bool on_get_spend_proof(const wallet_rpc::COMMAND_RPC_GET_SPEND_PROOF::request &req, wallet_rpc::COMMAND_RPC_GET_SPEND_PROOF::response &res, epee::json_rpc::error &er);
7782 bool on_check_spend_proof(const wallet_rpc::COMMAND_RPC_CHECK_SPEND_PROOF::request &req, wallet_rpc::COMMAND_RPC_CHECK_SPEND_PROOF::response &res, epee::json_rpc::error &er);
7783 bool on_get_reserve_proof(const wallet_rpc::COMMAND_RPC_GET_RESERVE_PROOF::request &req, wallet_rpc::COMMAND_RPC_GET_RESERVE_PROOF::response &res, epee::json_rpc::error &er);
7784 bool on_check_reserve_proof(const wallet_rpc::COMMAND_RPC_CHECK_RESERVE_PROOF::request &req, wallet_rpc::COMMAND_RPC_CHECK_RESERVE_PROOF::response &res, epee::json_rpc::error &er);
7785[INC 37.232.129.226:58394 PRE-HANDSHAKE] - INCOMING
7786[INC 37.232.129.226:58394 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
7787NEW PEER DISCOVERED 37.232.129.226:58394
7788[INC 37.232.129.226:58394 PRE-HANDSHAKE] - HANDSHAKE SUCCES
7789[INC 37.232.129.226:58394 ACTIVE] - SENT RESPONSECOMMAND1001
7790[INC 37.232.129.226:58394 ACTIVE] - RECEIVED REQUESTCOMMAND1007
7791[INC 37.232.129.226:58394 ACTIVE] - Starting TAR PIT
7792[INC 37.232.129.226:58394 ACTIVE] - DISCONNECTED
7793[INC 37.232.129.226:58410 PRE-HANDSHAKE] - INCOMING
7794[INC 37.232.129.226:58410 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
7795NEW PEER DISCOVERED 37.232.129.226:58410
7796[INC 37.232.129.226:58410 PRE-HANDSHAKE] - HANDSHAKE SUCCES
7797[INC 37.232.129.226:58410 ACTIVE] - SENT RESPONSECOMMAND1001
7798[INC 37.232.129.226:58410 ACTIVE] - RECEIVED REQUESTCOMMAND1007
7799[INC 37.232.129.226:58410 ACTIVE] - Starting TAR PIT
7800[INC 37.232.129.226:58410 ACTIVE] - DISCONNECTED
7801RANDOM KOSHER PEER W 37.232.129.226:58410
7802RANDOM KOSHER PEER W 37.232.129.226:58410
7803RANDOM KOSHER PEER W 37.232.129.226:58410
7804[INC 37.232.129.226:56286 PRE-HANDSHAKE] - INCOMING
7805[INC 37.232.129.226:56286 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
7806NEW PEER DISCOVERED 37.232.129.226:56286
7807[INC 37.232.129.226:56286 PRE-HANDSHAKE] - HANDSHAKE SUCCES
7808[INC 37.232.129.226:56286 ACTIVE] - SENT RESPONSECOMMAND1001
7809[INC 37.232.129.226:56286 ACTIVE] - RECEIVED REQUESTCOMMAND1007
7810[INC 37.232.129.226:56286 ACTIVE] - Starting TAR PIT
7811[INC 37.232.129.226:56286 ACTIVE] - SENT RESPONSECOMMAND1007
7812[INC 37.232.129.226:56286 ACTIVE] - DISCONNECTED
7813RANDOM KOSHER PEER W 37.232.129.226:56286
7814RANDOM KOSHER PEER W 37.232.129.226:56286
7815RANDOM KOSHER PEER W 37.232.129.226:56286
7816[INC 37.232.129.226:56340 PRE-HANDSHAKE] - INCOMING
7817[INC 37.232.129.226:56340 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
7818NEW PEER DISCOVERED 37.232.129.226:56340
7819[INC 37.232.129.226:56340 PRE-HANDSHAKE] - HANDSHAKE SUCCES
7820[INC 37.232.129.226:56340 ACTIVE] - SENT RESPONSECOMMAND1001
7821[INC 37.232.129.226:56340 ACTIVE] - RECEIVED REQUESTCOMMAND1007
7822[INC 37.232.129.226:56340 ACTIVE] - SENT RESPONSECOMMAND1007
7823[INC 37.232.129.226:56340 ACTIVE] - Starting TAR PIT
7824[INC 37.232.129.226:56340 ACTIVE] - RECEIVED REQUESTCOMMAND1002
7825[INC 37.232.129.226:56340 ACTIVE] - SENT RESPONSECOMMAND1002
7826[INC 37.232.129.226:56340 ACTIVE] - DISCONNECTED
7827RANDOM KOSHER PEER W 37.232.129.226:56340
7828RANDOM KOSHER PEER W 37.232.129.226:56340
7829RANDOM KOSHER PEER W 37.232.129.226:56340
7830RANDOM KOSHER PEER W 37.232.129.226:56340
7831RANDOM KOSHER PEER W 37.232.129.226:56340
7832RANDOM KOSHER PEER W 37.232.129.226:56340
7833RANDOM KOSHER PEER W 37.232.129.226:56340
7834RANDOM KOSHER PEER W 37.232.129.226:56340
7835RANDOM KOSHER PEER W 37.232.129.226:56340
7836RANDOM KOSHER PEER W 37.232.129.226:56340
7837RANDOM KOSHER PEER W 37.232.129.226:56340
7838RANDOM KOSHER PEER W 37.232.129.226:56340
7839RANDOM KOSHER PEER W 37.232.129.226:56340
7840RANDOM KOSHER PEER W 37.232.129.226:56340
7841[INC 37.232.129.226:56962 PRE-HANDSHAKE] - INCOMING
7842[INC 37.232.129.226:56962 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
7843NEW PEER DISCOVERED 37.232.129.226:56962
7844[INC 37.232.129.226:56962 PRE-HANDSHAKE] - HANDSHAKE SUCCES
7845[INC 37.232.129.226:56962 ACTIVE] - SENT RESPONSECOMMAND1001
7846[INC 37.232.129.226:56962 ACTIVE] - RECEIVED REQUESTCOMMAND1007
7847[INC 37.232.129.226:56962 ACTIVE] - SENT RESPONSECOMMAND1007
7848[INC 37.232.129.226:56962 ACTIVE] - Starting TAR PIT
7849[INC 37.232.129.226:56962 ACTIVE] - RECEIVED REQUESTCOMMAND1002
7850[INC 37.232.129.226:56962 ACTIVE] - SENT RESPONSECOMMAND1002
7851[INC 37.232.129.226:56962 ACTIVE] - DISCONNECTED
7852RANDOM KOSHER PEER W 37.232.129.226:56962
7853RANDOM KOSHER PEER W 37.232.129.226:56962
7854RANDOM KOSHER PEER W 37.232.129.226:56962
7855RANDOM KOSHER PEER W 37.232.129.226:56962
7856RANDOM KOSHER PEER W 37.232.129.226:56962
7857[INC 37.232.129.226:57489 PRE-HANDSHAKE] - INCOMING
7858[INC 37.232.129.226:57489 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
7859NEW PEER DISCOVERED 37.232.129.226:57489
7860[INC 37.232.129.226:57489 PRE-HANDSHAKE] - HANDSHAKE SUCCES
7861[INC 37.232.129.226:57489 ACTIVE] - SENT RESPONSECOMMAND1001
7862[INC 37.232.129.226:57489 ACTIVE] - RECEIVED REQUESTCOMMAND1007
7863[INC 37.232.129.226:57489 ACTIVE] - Starting TAR PIT
7864[INC 37.232.129.226:57489 ACTIVE] - SENT RESPONSECOMMAND1007
7865[INC 37.232.129.226:57489 ACTIVE] - DISCONNECTED
7866RANDOM KOSHER PEER W 37.232.129.226:57489
7867RANDOM KOSHER PEER W 37.232.129.226:57489
7868[INC 37.232.129.226:57524 PRE-HANDSHAKE] - INCOMING
7869[INC 37.232.129.226:57524 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
7870NEW PEER DISCOVERED 37.232.129.226:57524
7871[INC 37.232.129.226:57524 PRE-HANDSHAKE] - HANDSHAKE SUCCES
7872[INC 37.232.129.226:57524 ACTIVE] - SENT RESPONSECOMMAND1001
7873[INC 37.232.129.226:57524 ACTIVE] - RECEIVED REQUESTCOMMAND1007
7874[INC 37.232.129.226:57524 ACTIVE] - SENT RESPONSECOMMAND1007
7875[INC 37.232.129.226:57524 ACTIVE] - Starting TAR PIT
7876[INC 37.232.129.226:57524 ACTIVE] - RECEIVED REQUESTCOMMAND1002
7877[INC 37.232.129.226:57524 ACTIVE] - SENT RESPONSECOMMAND1002
7878 try_get_support_flags(context_, [](p2p_connection_context &flags_context, const uint32_t &support_flags) {
7879bool node_server<t_payload_net_handler>::try_get_support_flags(const p2p_connection_context &context, std::function<void(p2p_connection_context &, const uint32_t &)> f)
7880 try_get_support_flags(context, [](p2p_connection_context &flags_context, const uint32_t &support_flags) {
7881 cryptonote_connection_context() : m_state(state_before_handshake), m_remote_blockchain_height(0), m_last_response_height(0),
7882 state_before_handshake = 0, //default state
7883 case cryptonote_connection_context::state_before_handshake:
7884 return "state_before_handshake";
7885#define P2P_DEFAULT_HANDSHAKE_INTERVAL 60 //seconds
7886#define P2P_DEFAULT_PEERS_IN_HANDSHAKE 250
7887#define P2P_DEFAULT_HANDSHAKE_INVOKE_TIMEOUT 5000 //5 seconds
7888 //bool process_handshake_data(const blobdata& data, cryptonote_connection_context& context);
7889 //bool get_payload_sync_data(HANDSHAKE_DATA::request& hshd, cryptonote_connection_context& context);
7890 if(context.m_state == cryptonote_connection_context::state_before_handshake && !is_inital)
7891 //let the socket to send response to handshake, but request callback, to let send request data after response
7892 if(context.m_state == cryptonote_connection_context::state_synchronizing || context.m_state == cryptonote_connection_context::state_before_handshake)
7893 const bool passive = context.m_state == cryptonote_connection_context::state_before_handshake;
7894 typedef COMMAND_HANDSHAKE_T<typename t_payload_net_handler::payload_type> COMMAND_HANDSHAKE;
7895 typedef COMMAND_HANDSHAKE_T<typename t_payload_net_handler::payload_type> COMMAND_HANDSHAKE;
7896 HANDLE_INVOKE_T2(COMMAND_HANDSHAKE, &node_server::handle_handshake)
7897 HANDLE_INVOKE_T2(COMMAND_HANDSHAKE, &node_server::handle_handshake)
7898 int handle_handshake(int command, typename COMMAND_HANDSHAKE::request &arg, typename COMMAND_HANDSHAKE::response &rsp, p2p_connection_context &context);
7899 int handle_handshake(int command, typename COMMAND_HANDSHAKE::request &arg, typename COMMAND_HANDSHAKE::response &rsp, p2p_connection_context &context);
7900 int handle_handshake(int command, typename COMMAND_HANDSHAKE::request &arg, typename COMMAND_HANDSHAKE::response &rsp, p2p_connection_context &context);
7901 //bool get_local_handshake_data(handshake_data& hshd);
7902 //bool get_local_handshake_data(handshake_data& hshd);
7903 bool do_handshake_with_peer(peerid_type &pi, p2p_connection_context &context, bool just_take_peerlist = false);
7904 bool try_to_connect_and_handshake_with_new_peer(const epee::net_utils::network_address &na, bool just_take_peerlist = false, uint64_t last_seen_stamp = 0, PeerType peer_type = white, uint64_t first_seen_stamp = 0);
7905 bool check_connection_and_handshake_with_peer(const epee::net_utils::network_address &na, uint64_t last_seen_stamp);
7906 epee::math_helper::once_a_time_seconds<P2P_DEFAULT_HANDSHAKE_INTERVAL> m_peer_handshake_idle_maker_interval;
7907 epee::math_helper::once_a_time_seconds<P2P_DEFAULT_HANDSHAKE_INTERVAL> m_peer_handshake_idle_maker_interval;
7908 m_config.m_net_config.handshake_interval = P2P_DEFAULT_HANDSHAKE_INTERVAL;
7909 m_config.m_net_config.handshake_interval = P2P_DEFAULT_HANDSHAKE_INTERVAL;
7910 m_config.m_net_config.send_peerlist_sz = P2P_DEFAULT_PEERS_IN_HANDSHAKE;
7911bool node_server<t_payload_net_handler>::do_handshake_with_peer(peerid_type &pi, p2p_connection_context &context_, bool just_take_peerlist)
7912 typename COMMAND_HANDSHAKE::request arg;
7913 typename COMMAND_HANDSHAKE::response rsp;
7914 bool r = epee::net_utils::async_invoke_remote_command2<typename COMMAND_HANDSHAKE::response>(context_.m_connection_id, COMMAND_HANDSHAKE::ID, arg, m_net_server.get_config_object(),
7915 bool r = epee::net_utils::async_invoke_remote_command2<typename COMMAND_HANDSHAKE::response>(context_.m_connection_id, COMMAND_HANDSHAKE::ID, arg, m_net_server.get_config_object(),
7916 [this, &pi, &ev, &hsh_result, &just_take_peerlist](int code, const typename COMMAND_HANDSHAKE::response &rsp, p2p_connection_context &context) {
7917 LOG_WARNING_CC(context, "COMMAND_HANDSHAKE invoke failed. (" << code << ", " << epee::levin::get_err_descr(code) << ")");
7918 LOG_WARNING_CC(context, "COMMAND_HANDSHAKE Failed, wrong network! (" << epee::string_tools::get_str_from_guid_a(rsp.node_data.network_id) << "), closing connection.");
7919 LOG_WARNING_CC(context, "COMMAND_HANDSHAKE: failed to handle_remote_peerlist(...), closing connection.");
7920 LOG_WARNING_CC(context, "COMMAND_HANDSHAKE invoked, but process_payload_sync_data returned false, dropping connection.");
7921 LOG_DEBUG_CC(context, " COMMAND_HANDSHAKE INVOKED OK");
7922 LOG_DEBUG_CC(context, " COMMAND_HANDSHAKE(AND CLOSE) INVOKED OK");
7923 P2P_DEFAULT_HANDSHAKE_INVOKE_TIMEOUT);
7924 LOG_WARNING_CC(context_, "COMMAND_HANDSHAKE Failed");
7925bool node_server<t_payload_net_handler>::try_to_connect_and_handshake_with_new_peer(const epee::net_utils::network_address &na, bool just_take_peerlist, uint64_t last_seen_stamp, PeerType peer_type, uint64_t first_seen_stamp)
7926 res = do_handshake_with_peer(pi, con, just_take_peerlist);
7927 LOG_PRINT_CC_PRIORITY_NODE(is_priority, con, "Failed to HANDSHAKE with peer "
7928 LOG_DEBUG_CC(con, "CONNECTION HANDSHAKED OK AND CLOSED.");
7929 LOG_DEBUG_CC(con, "CONNECTION HANDSHAKED OK.");
7930bool node_server<t_payload_net_handler>::check_connection_and_handshake_with_peer(const epee::net_utils::network_address &na, uint64_t last_seen_stamp)
7931 res = do_handshake_with_peer(pi, con, true);
7932 LOG_PRINT_CC_PRIORITY_NODE(is_priority, con, "Failed to HANDSHAKE with peer " << na.str());
7933 LOG_DEBUG_CC(con, "CONNECTION HANDSHAKED OK AND CLOSED.");
7934 if(!try_to_connect_and_handshake_with_new_peer(pe.adr, false, 0, anchor, pe.first_seen))
7935 _note("Handshake failed");
7936 if(!try_to_connect_and_handshake_with_new_peer(pe.adr, false, pe.last_seen, use_white_list ? white : gray))
7937 _note("Handshake failed");
7938 if(try_to_connect_and_handshake_with_new_peer(m_seed_nodes[current_index], true))
7939 m_peer_handshake_idle_maker_interval.do_call(boost::bind(&node_server<t_payload_net_handler>::peer_sync_idle_maker, this));
7940 MDEBUG("STARTED PEERLIST IDLE HANDSHAKE");
7941 cncts.push_back(local_connects_type::value_type(cntxt, cntxt.peer_id)); //do idle sync only with handshaked connections
7942 MDEBUG("FINISHED PEERLIST IDLE HANDSHAKE");
7943 P2P_DEFAULT_HANDSHAKE_INVOKE_TIMEOUT);
7944int node_server<t_payload_net_handler>::handle_handshake(int command, typename COMMAND_HANDSHAKE::request &arg, typename COMMAND_HANDSHAKE::response &rsp, p2p_connection_context &context)
7945int node_server<t_payload_net_handler>::handle_handshake(int command, typename COMMAND_HANDSHAKE::request &arg, typename COMMAND_HANDSHAKE::response &rsp, p2p_connection_context &context)
7946int node_server<t_payload_net_handler>::handle_handshake(int command, typename COMMAND_HANDSHAKE::request &arg, typename COMMAND_HANDSHAKE::response &rsp, p2p_connection_context &context)
7947 LOG_WARNING_CC(context, "COMMAND_HANDSHAKE came not from incoming connection");
7948 LOG_WARNING_CC(context, "COMMAND_HANDSHAKE came, but seems that connection already have associated peer_id (double COMMAND_HANDSHAKE?)");
7949 LOG_WARNING_CC(context, "COMMAND_HANDSHAKE came, but seems that connection already have associated peer_id (double COMMAND_HANDSHAKE?)");
7950 LOG_WARNING_CC(context, "COMMAND_HANDSHAKE came, but already have max incoming connections, so dropping this one.");
7951 LOG_WARNING_CC(context, "COMMAND_HANDSHAKE came, but process_payload_sync_data returned false, dropping connection.");
7952 LOG_DEBUG_CC(context, "COMMAND_HANDSHAKE");
7953 try_to_connect_and_handshake_with_new_peer(na);
7954 bool success = check_connection_and_handshake_with_peer(pe.adr, pe.last_seen);
7955 bool get_peerlist_head(std::list<peerlist_entry> &bs_head, uint32_t depth = P2P_DEFAULT_PEERS_IN_HANDSHAKE);
7956 KV_SERIALIZE(handshake_interval)
7957 uint32_t handshake_interval;
7958struct COMMAND_HANDSHAKE_T
7959[INC 37.232.129.226:56340 PRE-HANDSHAKE] - INCOMING
7960[INC 37.232.129.226:56340 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
7961NEW PEER DISCOVERED 37.232.129.226:56340
7962[INC 37.232.129.226:56340 PRE-HANDSHAKE] - HANDSHAKE SUCCES
7963[INC 37.232.129.226:56340 ACTIVE] - SENT RESPONSECOMMAND1001
7964[INC 37.232.129.226:56340 ACTIVE] - RECEIVED REQUESTCOMMAND1007
7965[INC 37.232.129.226:56340 ACTIVE] - SENT RESPONSECOMMAND1007
7966[INC 37.232.129.226:56340 ACTIVE] - Starting TAR PIT
7967[INC 37.232.129.226:56340 ACTIVE] - RECEIVED REQUESTCOMMAND1002
7968[INC 37.232.129.226:56340 ACTIVE] - SENT RESPONSECOMMAND1002
7969[INC 37.232.129.226:56340 ACTIVE] - DISCONNECTED
7970RANDOM KOSHER PEER W 37.232.129.226:56340
7971RANDOM KOSHER PEER W 37.232.129.226:56340
7972[INC 37.232.129.226:56340 PRE-HANDSHAKE] - INCOMING
7973[INC 37.232.129.226:56340 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
7974NEW PEER DISCOVERED 37.232.129.226:56340
7975[INC 37.232.129.226:56340 PRE-HANDSHAKE] - HANDSHAKE SUCCES
7976[INC 37.232.129.226:56340 ACTIVE] - SENT RESPONSECOMMAND1001
7977[INC 37.232.129.226:56340 ACTIVE] - RECEIVED REQUESTCOMMAND1007
7978[INC 37.232.129.226:56340 ACTIVE] - SENT RESPONSECOMMAND1007
7979[INC 37.232.129.226:56340 ACTIVE] - Starting TAR PIT
7980[INC 37.232.129.226:56286 PRE-HANDSHAKE] - INCOMING
7981[INC 37.232.129.226:56286 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
7982NEW PEER DISCOVERED 37.232.129.226:56286
7983[INC 37.232.129.226:56286 PRE-HANDSHAKE] - HANDSHAKE SUCCES
7984[INC 37.232.129.226:56286 ACTIVE] - SENT RESPONSECOMMAND1001
7985[INC 37.232.129.226:56286 ACTIVE] - RECEIVED REQUESTCOMMAND1007
7986[INC 37.232.129.226:56286 ACTIVE] - Starting TAR PIT
7987[INC 37.232.129.226:56286 ACTIVE] - SENT RESPONSECOMMAND1007
7988[INC 37.232.129.226:56286 ACTIVE] - DISCONNECTED
7989RANDOM KOSHER PEER W 37.232.129.226:56286
7990RANDOM KOSHER PEER W 37.232.129.226:56286
7991RANDOM KOSHER PEER W 37.232.129.226:56286
7992[INC 54.37.87.203:47862 PRE-HANDSHAKE] - INCOMING
7993[INC 54.37.87.203:47862 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
7994[INC 54.37.87.203:47862 PRE-HANDSHAKE] - HANDSHAKE SUCCES
7995[INC 54.37.87.203:47862 ACTIVE] - SENT RESPONSECOMMAND1001
7996[INC 54.37.87.203:47862 ACTIVE] - RECEIVED REQUESTCOMMAND1007
7997[INC 54.37.87.203:47862 ACTIVE] - Starting TAR PIT
7998[INC 54.37.87.203:47862 ACTIVE] - SENT RESPONSECOMMAND1007
7999[INC 54.37.87.203:47862 ACTIVE] - DISCONNECTED
8000STARTING TAR PIT
8001[INC 54.37.87.203:47862 ACTIVE] - Starting TAR PIT
8002STARTING TAR PIT
8003[INC 37.232.129.226:56286 ACTIVE] - Starting TAR PIT
8004STARTING TAR PIT
8005[INC 37.232.129.226:56340 ACTIVE] - Starting TAR PIT
8006[INC 37.232.129.226:54626 PRE-HANDSHAKE] - INCOMING
8007[INC 37.232.129.226:54626 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
8008[INC 37.232.129.226:54626 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8009[INC 37.232.129.226:54626 PRE-HANDSHAKE] - HANDSHAKE SUCCES
8010[INC 37.232.129.226:54626 ACTIVE] - SENT RESPONSECOMMAND1001
8011[INC 37.232.129.226:54626 ACTIVE] - RECEIVED REQUESTCOMMAND1007
8012[INC 37.232.129.226:54626 ACTIVE] - COMMAND REQUEST SUP FLAGS
8013[INC 37.232.129.226:54626 ACTIVE] - SENT RESPONSECOMMAND1007
8014[OUT 212.8.248.8:19733 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8015[INC 93.105.231.224:43425 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8016[INC 212.8.248.8:33494 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8017[OUT 54.38.137.179:12209 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8018[INC 54.38.137.179:45714 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8019[OUT 159.69.221.50:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8020[OUT 145.239.0.161:19001 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8021[OUT 78.47.45.92:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8022[OUT 94.130.67.112:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8023[OUT 185.134.22.134:19733 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8024[OUT 81.169.176.111:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8025[OUT 54.37.87.203:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8026[OUT 209.97.131.134:18080 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8027[OUT 163.172.161.97:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8028[OUT 5.2.65.14:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8029[INC 145.239.0.161:57374 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8030[OUT 92.53.90.28:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8031[INC 159.69.221.50:37704 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8032[INC 94.130.67.112:36186 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8033[INC 78.47.45.92:45366 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8034[INC 78.47.45.92:45366 PRE-HANDSHAKE] - PING WITH: OK/[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS14958898227596094153
8035[INC 185.134.22.134:52086 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8036COMMAND REQUEST SUP FLAGS
8037[OUT 178.194.16.34:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8038[OUT 86.12.81.216:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8039[OUT 91.213.203.68:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8040[INC 81.169.176.111:35758 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8041[OUT 176.99.5.218:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8042[INC 54.37.87.203:57078 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8043[INC 5.2.65.14:35422 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8044[INC 209.97.131.134:43452 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8045[OUT 194.85.135.154:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8046[INC 77.68.82.168:56218 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8047[INC 163.172.161.97:59642 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8048[OUT 88.95.232.108:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8049[INC 92.53.90.28:46388 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8050[INC 178.194.16.34:60547 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8051[OUT 216.155.154.42:12220 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8052[OUT 194.36.174.34:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8053[INC 86.121.226.20:53270 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8054[INC 86.12.81.216:59276 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8055[OUT 144.202.1.137:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8056[INC 91.213.203.68:49252 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8057[OUT 104.168.127.78:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8058[OUT 91.77.130.176:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8059[OUT 208.111.82.122:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8060[INC 176.99.5.218:37512 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8061[OUT 207.201.218.167:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8062[OUT 54.39.16.195:19633 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8063[INC 194.85.135.154:59517 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8064[INC 88.95.232.108:52833 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8065[OUT 147.75.58.191:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8066[OUT 184.18.24.79:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8067[INC 91.77.130.176:49986 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8068[INC 216.155.154.42:53852 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8069[OUT 138.68.46.46:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8070[INC 194.36.174.34:46552 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8071[INC 144.202.1.137:55274 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8072[OUT 50.18.217.1:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8073[INC 104.168.127.78:42604 PRE-HANDSHAKE] - [INC 88.95.232.108:52833 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS DISCONNECTED
8074[INC 208.111.82.122:1407 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8075[INC 54.39.16.195:45494 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8076[INC 207.201.218.167:60278 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8077[OUT 47.97.181.237:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8078[INC 147.75.58.191:44944 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8079[INC 184.18.24.79:56476 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8080[INC 138.68.46.46:33806 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8081[INC 50.18.217.1:37550 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8082[INC 47.97.181.237:36964 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8083[OUT 123.3.225.178:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8084[INC 123.3.225.178:56172 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8085[OUT 112.215.205.226:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8086[INC 112.215.205.226:40448 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8087[OUT 92.53.90.28:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8088[OUT 50.18.217.1:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8089[OUT 209.97.131.134:18080 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8090[OUT 178.194.16.34:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8091[OUT 81.169.176.111:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8092[OUT 185.134.22.134:19733 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8093[OUT 86.121.226.20:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8094[OUT 147.75.58.191:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8095[OUT 78.47.45.92:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8096[OUT 54.39.16.195:19633 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8097[OUT 5.2.65.14:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8098[OUT 145.239.0.161:19001 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8099[OUT 94.130.67.112:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8100[OUT 176.99.5.218:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8101[OUT 123.3.225.178:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8102[OUT 54.37.87.203:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8103[OUT 104.168.127.78:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8104[OUT 208.111.82.122:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8105[OUT 194.85.135.154:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8106[OUT 159.69.221.50:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8107[OUT 144.202.1.137:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8108[OUT 184.18.24.79:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8109[OUT 88.95.232.108:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8110[OUT 138.68.46.46:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8111[OUT 194.36.174.34:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8112[OUT 91.213.203.68:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8113[OUT 91.77.130.176:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8114[OUT 212.8.248.8:19733 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8115[OUT 207.201.218.167:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8116[OUT 112.215.205.226:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8117[OUT 47.97.181.237:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8118[OUT 92.53.90.28:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8119[OUT 209.97.131.134:18080 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8120[OUT 178.194.16.34:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8121[OUT 81.169.176.111:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8122[OUT 185.134.22.134:19733 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8123[OUT 86.121.226.20:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8124[OUT 147.75.58.191:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8125[OUT 145.239.0.161:19001 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8126[OUT 123.3.225.178:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8127[OUT 94.130.67.112:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8128[OUT 77.68.82.168:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8129[OUT 54.37.87.203:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8130[OUT 104.168.127.78:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8131[OUT 176.99.5.218:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8132[OUT 208.111.82.122:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8133[OUT 194.85.135.154:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8134[OUT 159.69.221.50:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8135[OUT 88.95.232.108:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8136[OUT 86.12.81.216:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8137[OUT 144.202.1.137:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8138[OUT 184.18.24.79:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8139NOT COMMAND REQUEST SUP FLAGS
8140[OUT 138.68.46.46:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8141[OUT 91.77.130.176:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8142[OUT 194.36.174.34:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8143[OUT 91.213.203.68:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8144[OUT 54.39.16.195:19633 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8145[OUT 212.8.248.8:19733 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8146[OUT 112.215.205.226:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8147[OUT 207.201.218.167:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8148[OUT 81.100.148.250:12210 PRE-HANDSHAKE] - COMMAND REQUEST SUP FLAGS
8149[INC 81.100.148.250:8586 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8150[OUT 47.97.181.237:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8151[OUT 209.97.131.134:18080 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8152[OUT 5.2.65.14:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8153[OUT 178.194.16.34:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8154[OUT 86.121.226.20:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8155[OUT 81.169.176.111:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8156[OUT 185.134.22.134:19733 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8157[OUT 78.47.45.92:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8158[OUT 147.75.58.191:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8159[OUT 123.3.225.178:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8160[OUT 145.239.0.161:19001 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8161[OUT 94.130.67.112:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8162[OUT 208.111.82.122:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8163[OUT 77.68.82.168:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8164[OUT 104.168.127.78:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8165[OUT 194.85.135.154:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8166[INC 37.232.129.226:54626 PRE-HANDSHAKE] - NOT COMMAND REQUEST SUP FLAGS
8167[INC 37.232.129.226:54626 ACTIVE] - COMMAND REQUEST SUP FLAGS
8168[OUT 144.202.1.137:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8169[OUT 159.69.221.50:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8170[OUT 88.95.232.108:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8171[OUT 184.18.24.79:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8172[OUT 138.68.46.46:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8173[OUT 81.100.148.250:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8174[OUT 91.77.130.176:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8175[OUT 91.213.203.68:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8176[OUT 194.36.174.34:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8177[OUT 92.53.90.28:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8178[OUT 212.8.248.8:19733 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8179[OUT 112.215.205.226:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8180[OUT 47.97.181.237:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8181[OUT 178.194.16.34:12210 ACTIVE] - NOT COMMAND REQUEST SUP FLAGS
8182Press Enter to start
8183[OUT 212.8.248.8:19733 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8184[OUT 212.8.248.8:19733 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8185[OUT 54.38.137.179:12209 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8186[OUT 54.38.137.179:12209 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8187[OUT 159.69.221.50:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8188[OUT 145.239.0.161:19001 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8189[OUT 145.239.0.161:19001 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8190[OUT 159.69.221.50:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8191[OUT 185.134.22.134:19733 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8192[OUT 78.47.45.92:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8193[OUT 94.130.67.112:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8194[OUT 78.47.45.92:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8195[OUT 94.130.67.112:12210 PRE-HANDSHAKE] - [OUT 185.134.22.134:19733 PRE-HANDSHAKE] - SENT SENT RESPONSECOMMANDRESPONSE1007COMMAND
81961007
8197[OUT 81.169.176.111:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8198[OUT 81.169.176.111:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8199[OUT 54.37.87.203:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8200[OUT 5.2.65.14:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8201[OUT 5.2.65.14:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8202[OUT 54.37.87.203:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8203[OUT 209.97.131.134:18080 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8204[OUT 209.97.131.134:18080 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8205[OUT 163.172.161.97:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8206[OUT 163.172.161.97:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8207[OUT 178.194.16.34:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8208[OUT 178.194.16.34:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8209[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8210[OUT 77.68.82.168:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8211[OUT 86.12.81.216:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8212[OUT 86.12.81.216:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8213[OUT 92.53.90.28:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8214[OUT 92.53.90.28:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8215[OUT 86.121.226.20:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8216[OUT 86.121.226.20:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8217[OUT 91.213.203.68:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8218[OUT 91.213.203.68:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8219[OUT 91.77.130.176:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8220[OUT 91.77.130.176:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8221[OUT 194.85.135.154:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8222[OUT 194.85.135.154:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8223[OUT 88.95.232.108:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8224[OUT 88.95.232.108:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8225[OUT 176.99.5.218:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
82261007
8227[OUT 216.155.154.42:12220 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8228[OUT 144.202.1.137:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8229[OUT 144.202.1.137:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8230[OUT 176.99.5.218:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8231[OUT 104.168.127.78:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8232[OUT 104.168.127.78:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8233[OUT 194.36.174.34:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8234[OUT 194.36.174.34:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8235[OUT 208.111.82.122:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8236[OUT 208.111.82.122:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8237[OUT 54.39.16.195:19633 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8238[OUT 54.39.16.195:19633 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8239[OUT 207.201.218.167:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8240[OUT 207.201.218.167:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8241[OUT 147.75.58.191:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8242[OUT 147.75.58.191:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8243[OUT 184.18.24.79:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8244[OUT 184.18.24.79:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8245[OUT 138.68.46.46:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8246[OUT 138.68.46.46:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8247[OUT 50.18.217.1:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8248[OUT 50.18.217.1:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8249[OUT 47.97.181.237:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8250[OUT 47.97.181.237:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8251[OUT 123.3.225.178:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8252[OUT 123.3.225.178:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8253[INC 207.201.218.167:59670 ACTIVE] - RECEIVED REQUESTCOMMAND[INC 123.3.225.178:55900 PRE-HANDSHAKE] - 1007PING WITH: OK/
8254[INC 207.201.218.167:59670 ACTIVE] - SENT RESPONSECOMMAND1007
8255[OUT 112.215.205.226:12210 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1007
8256[OUT 112.215.205.226:12210 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1007
8257[INC 212.8.248.8:58416 PRE-HANDSHAKE] - INCOMING
8258[INC 212.8.248.8:58416 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8259[INC 93.105.231.224:39509 PRE-HANDSHAKE] - INCOMING
8260[INC 93.105.231.224:39509 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
8261[INC 93.105.231.224:39509 PRE-HANDSHAKE] - HANDSHAKE SUCCES
8262[INC 93.105.231.224:39509 ACTIVE] - SENT RESPONSECOMMAND1001
8263[INC 212.8.248.8:58416 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8264[INC 212.8.248.8:58416 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8265[INC 93.105.231.224:39509 ACTIVE] - DISCONNECTED
8266[INC 54.38.137.179:26146 PRE-HANDSHAKE] - INCOMING
8267[INC 54.38.137.179:26146 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8268[INC 54.38.137.179:26146 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8269[INC 54.38.137.179:26146 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8270[INC 212.8.248.8:58416 PRE-HANDSHAKE] - DISCONNECTED
8271[INC 54.38.137.179:26146 PRE-HANDSHAKE] - DISCONNECTED
8272[INC 145.239.0.161:58542 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8273[INC 145.239.0.161:58542 PRE-HANDSHAKE] - INCOMING
8274[INC 159.69.221.50:35180 PRE-HANDSHAKE] - INCOMING
8275[INC 159.69.221.50:35180 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8276[INC 78.47.45.92:60510 PRE-HANDSHAKE] - INCOMING
8277[INC 94.130.67.112:60226 PRE-HANDSHAKE] - INCOMING
8278[INC 78.47.45.92:60510 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8279[INC 94.130.67.112:60226 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003[OUT 184.18.24.79:12210 PRE-HANDSHAKE] -
8280[INC 185.134.22.134:46568 PRE-HANDSHAKE] - INCOMING
8281[INC 185.134.22.134:46568 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8282[INC 81.169.176.111:59660 PRE-HANDSHAKE] - INCOMING
8283[INC 81.169.176.111:59660 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8284[INC 5.2.65.14:59218 PRE-HANDSHAKE] - INCOMING
8285[INC 5.2.65.14:59218 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8286[INC 145.239.0.161:58542 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8287[INC 145.239.0.161:58542 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8288[INC 54.37.87.203:56814 PRE-HANDSHAKE] - [INC 54.37.87.203:56814 PRE-HANDSHAKE] - INCOMING
8289[INC 54.37.87.203:56814 PRE-HANDSHAKE] - [INC 54.37.87.203:56814 PRE-HANDSHAKE] - INCOMING
8290[INC 159.69.221.50:35180 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8291[INC 159.69.221.50:35180 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8292[INC 78.47.45.92:60510 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8293[INC 78.47.45.92:60510 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8294[INC 94.130.67.112:60226 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8295[INC 94.130.67.112:60226 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8296[INC 185.134.22.134:46568 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8297[INC 185.134.22.134:46568 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8298[INC 209.97.131.134:22482 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8299[INC 209.97.131.134:22482 PRE-HANDSHAKE] - INCOMING
8300[INC 5.2.65.14:59218 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8301[INC 5.2.65.14:59218 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8302[INC 81.169.176.111:59660 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8303[INC 81.169.176.111:59660 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8304[INC 163.172.161.97:42980 PRE-HANDSHAKE] - INCOMING
8305[INC 163.172.161.97:42980 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8306[INC 178.194.16.34:59481 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8307[INC 178.194.16.34:59481 PRE-HANDSHAKE] - INCOMING
8308[INC 77.68.82.168:55616 PRE-HANDSHAKE] - INCOMING
8309[INC 77.68.82.168:55616 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8310[INC 54.37.87.203:56814 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8311[INC 54.37.87.203:56814 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8312[INC 86.12.81.216:57314 PRE-HANDSHAKE] - INCOMING
8313[INC 86.12.81.216:57314 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8314[INC 209.97.131.134:22482 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8315[INC 209.97.131.134:22482 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8316[INC 92.53.90.28:55950 PRE-HANDSHAKE] - INCOMING
8317[INC 92.53.90.28:55950 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8318[INC 86.121.226.20:43056 PRE-HANDSHAKE] - INCOMING
8319[INC 86.121.226.20:43056 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8320[INC 145.239.0.161:58542 PRE-HANDSHAKE] - DISCONNECTED
8321[INC 78.47.45.92:60510 PRE-HANDSHAKE] - DISCONNECTED
8322[INC 159.69.221.50:35180 PRE-HANDSHAKE] - DISCONNECTED
8323[INC 163.172.161.97:42980 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8324[INC 163.172.161.97:42980 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8325[INC 94.130.67.112:60226 PRE-HANDSHAKE] - DISCONNECTED
8326[INC 77.68.82.168:55616 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8327[INC 77.68.82.168:55616 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8328[INC 178.194.16.34:59481 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8329[INC 178.194.16.34:59481 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8330[INC 86.12.81.216:57314 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8331[INC 86.12.81.216:57314 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8332[INC 185.134.22.134:46568 PRE-HANDSHAKE] - DISCONNECTED
8333[INC 91.213.203.68:49198 PRE-HANDSHAKE] - INCOMING
8334[INC 91.213.203.68:49198 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8335[INC 5.2.65.14:59218 PRE-HANDSHAKE] - DISCONNECTED
8336[INC 91.77.130.176:49809 PRE-HANDSHAKE] - INCOMING
8337[INC 91.77.130.176:49809 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8338[INC 81.169.176.111:59660 PRE-HANDSHAKE] - DISCONNECTED
8339[INC 86.121.226.20:43056 PRE-HANDSHAKE] - [INC 92.53.90.28:55950 PRE-HANDSHAKE] - PING WITH: PING WITH: OKOK//605142819237362318605142819237362318
8340[INC 86.121.226.20:43056 PRE-HANDSHAKE] - [INC 92.53.90.28:55950 PRE-HANDSHAKE] - PING WITH: PING WITH: OKOK//605142819237362318605142819237362318
8341[INC 86.121.226.20:43056 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8342[INC 92.53.90.28:55950 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8343[INC 54.37.87.203:56814 PRE-HANDSHAKE] - DISCONNECTED
8344[INC 209.97.131.134:22482 PRE-HANDSHAKE] - [OUT 216.155.154.42:12220 PRE-HANDSHAKE] - DISCONNECTEDRECEIVED REQUESTCOMMAND
8345[INC 194.85.135.154:56046 PRE-HANDSHAKE] - INCOMING
8346[INC 194.85.135.154:56046 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8347[INC 88.95.232.108:52724 PRE-HANDSHAKE] - INCOMING
8348[INC 88.95.232.108:52724 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8349[INC 91.213.203.68:49198 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8350[INC 91.213.203.68:49198 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8351[INC 176.99.5.218:48610 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND[INC 176.99.5.218:48610 PRE-HANDSHAKE] - INCOMING1003
8352[INC 176.99.5.218:48610 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND[INC 176.99.5.218:48610 PRE-HANDSHAKE] - INCOMING1003
8353[INC 163.172.161.97:42980 PRE-HANDSHAKE] - [INC 91.77.130.176:49809 PRE-HANDSHAKE] - DISCONNECTEDPING WITH: OK/
8354[INC 163.172.161.97:42980 PRE-HANDSHAKE] - [INC 91.77.130.176:49809 PRE-HANDSHAKE] - DISCONNECTEDPING WITH: OK/
8355[INC 91.77.130.176:49809 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8356[INC 77.68.82.168:55616 PRE-HANDSHAKE] - DISCONNECTED
8357[INC 194.85.135.154:56046 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8358[INC 194.85.135.154:56046 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8359[INC 88.95.232.108:52724 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8360[INC 88.95.232.108:52724 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8361[INC 176.99.5.218:48610 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8362[INC 176.99.5.218:48610 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8363[INC 216.155.154.42:46112 PRE-HANDSHAKE] - INCOMING
8364[INC 216.155.154.42:46112 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8365[INC 86.121.226.20:43056 PRE-HANDSHAKE] - DISCONNECTED
8366[INC 178.194.16.34:59481 PRE-HANDSHAKE] - DISCONNECTED
8367[INC 92.53.90.28:55950 PRE-HANDSHAKE] - DISCONNECTED
8368[INC 144.202.1.137:48404 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND[INC 144.202.1.137:48404 PRE-HANDSHAKE] - INCOMING1003
8369[INC 144.202.1.137:48404 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND[INC 144.202.1.137:48404 PRE-HANDSHAKE] - INCOMING1003
8370[INC 104.168.127.78:37112 PRE-HANDSHAKE] - INCOMING
8371[INC 104.168.127.78:37112 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8372[INC 91.213.203.68:49198 PRE-HANDSHAKE] - DISCONNECTED
8373[INC 194.36.174.34:58518 PRE-HANDSHAKE] - INCOMING
8374[INC 194.36.174.34:58518 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8375[INC 86.12.81.216:57314 PRE-HANDSHAKE] - DISCONNECTED
8376[INC 208.111.82.122:32840 PRE-HANDSHAKE] - INCOMING[INC 208.111.82.122:32840 PRE-HANDSHAKE] -
8377[INC 208.111.82.122:32840 PRE-HANDSHAKE] - INCOMING[INC 208.111.82.122:32840 PRE-HANDSHAKE] -
8378[INC 54.39.16.195:33790 PRE-HANDSHAKE] - INCOMING
8379[INC 54.39.16.195:33790 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8380[INC 207.201.218.167:59672 PRE-HANDSHAKE] - INCOMING
8381[INC 207.201.218.167:59672 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8382[INC 216.155.154.42:46112 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8383[INC 216.155.154.42:46112 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8384[INC 147.75.58.191:44774 PRE-HANDSHAKE] - INCOMING
8385[INC 147.75.58.191:44774 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8386[INC 144.202.1.137:48404 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8387[INC 144.202.1.137:48404 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8388[INC 88.95.232.108:52724 PRE-HANDSHAKE] - DISCONNECTED
8389[INC 194.85.135.154:56046 PRE-HANDSHAKE] - DISCONNECTED
8390[INC 184.18.24.79:55884 PRE-HANDSHAKE] - INCOMING
8391[INC 176.99.5.218:48610 PRE-HANDSHAKE] - DISCONNECTED
8392[INC 184.18.24.79:55884 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8393[INC 104.168.127.78:37112 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8394[INC 104.168.127.78:37112 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8395[INC 194.36.174.34:58518 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8396[INC 194.36.174.34:58518 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8397[INC 208.111.82.122:32840 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8398[INC 208.111.82.122:32840 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8399[INC 54.39.16.195:33790 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8400[INC 54.39.16.195:33790 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8401[INC 207.201.218.167:59672 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8402[INC 207.201.218.167:59672 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8403[INC 147.75.58.191:44774 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8404[INC 147.75.58.191:44774 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8405[INC 91.77.130.176:49809 PRE-HANDSHAKE] - DISCONNECTED
8406[INC 138.68.46.46:33712 PRE-HANDSHAKE] - INCOMING
8407[INC 138.68.46.46:33712 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8408[INC 184.18.24.79:55884 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8409[INC 184.18.24.79:55884 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8410[INC 50.18.217.1:42744 PRE-HANDSHAKE] - INCOMING
8411[INC 50.18.217.1:42744 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8412[INC 216.155.154.42:46112 PRE-HANDSHAKE] - DISCONNECTED
8413[INC 144.202.1.137:48404 PRE-HANDSHAKE] - DISCONNECTED
8414[INC 104.168.127.78:37112 PRE-HANDSHAKE] - DISCONNECTED
8415[INC 194.36.174.34:58518 PRE-HANDSHAKE] - DISCONNECTED
8416[INC 208.111.82.122:32840 PRE-HANDSHAKE] - DISCONNECTED
8417[INC 54.39.16.195:33790 PRE-HANDSHAKE] - DISCONNECTED
8418[INC 138.68.46.46:33712 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8419[INC 138.68.46.46:33712 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8420[INC 207.201.218.167:59672 PRE-HANDSHAKE] - DISCONNECTED
8421[INC 50.18.217.1:42744 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8422[INC 50.18.217.1:42744 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8423[INC 47.97.181.237:34526 PRE-HANDSHAKE] - INCOMING
8424[INC 47.97.181.237:34526 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8425[INC 147.75.58.191:44774 PRE-HANDSHAKE] - DISCONNECTED
8426[INC 184.18.24.79:55884 PRE-HANDSHAKE] - DISCONNECTED
8427[INC 47.97.181.237:34526 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8428[INC 47.97.181.237:34526 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8429[INC 138.68.46.46:33712 PRE-HANDSHAKE] - DISCONNECTED
8430[INC 50.18.217.1:42744 PRE-HANDSHAKE] - DISCONNECTED
8431[INC 207.201.218.167:59670 PRE-HANDSHAKE] - INCOMING
8432[INC 207.201.218.167:59670 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1001
8433[INC 47.97.181.237:34526 PRE-HANDSHAKE] - DISCONNECTED
8434[INC 123.3.225.178:55900 PRE-HANDSHAKE] - INCOMING
8435[INC 123.3.225.178:55900 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8436[INC 207.201.218.167:59670 PRE-HANDSHAKE] - HANDSHAKE SUCCES
8437[INC 207.201.218.167:59670 ACTIVE] - SENT RESPONSECOMMAND1001
8438[INC 207.201.218.167:59670 ACTIVE] - RECEIVED REQUESTCOMMAND[INC 123.3.225.178:55900 PRE-HANDSHAKE] - 1007PING WITH: OK/
8439[INC 207.201.218.167:59670 ACTIVE] - RECEIVED REQUESTCOMMAND[INC 123.3.225.178:55900 PRE-HANDSHAKE] - 1007PING WITH: OK/
8440[INC 123.3.225.178:55900 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8441[INC 207.201.218.167:59670 ACTIVE] - SENT RESPONSECOMMAND1007
8442[INC 123.3.225.178:55900 PRE-HANDSHAKE] - DISCONNECTED
8443[INC 112.215.205.226:43112 PRE-HANDSHAKE] - INCOMING
8444[INC 112.215.205.226:43112 PRE-HANDSHAKE] - RECEIVED REQUESTCOMMAND1003
8445[INC 112.215.205.226:43112 PRE-HANDSHAKE] - PING WITH: OK/605142819237362318
8446[INC 112.215.205.226:43112 PRE-HANDSHAKE] - SENT RESPONSECOMMAND1003
8447[INC 112.215.205.226:43112 PRE-HANDSHAKE] - DISCONNECTED