require 'vendor/autoload.php';
use Denpa\Levin;
$vars = [
'network_id' => 'somenetwork',
];
Levin\connection($ip, $port, $vars)->connect(
function ($bucket, $connection) {
if ($bucket->isRequest('supportflags', 'timedsync', 'ping')) {
// respond to supportflags, timedsync and ping requests
// to keep the connection open
$connection->write($bucket->response());
}
if ($bucket->isResponse('handshake')) {
// send ping request to the server after
// receiving handshake response
$connection->write(Levin\request('ping'));
}
if ($bucket->isResponse('ping')) {
// dump server response to the console
var_dump($bucket->getPayload());
// returning false closes connection
return false;
}
}
);| command | link | request | response |
|---|---|---|---|
| Handshake | p2p_protocol_defs.h#L177 | ✅ | ✅ |
| TimedSync | p2p_protocol_defs.h#L239 | ✅ | ✅ |
| Ping | p2p_protocol_defs.h#L297 | ✅ | ✅ |
| StatInfo | p2p_protocol_defs.h#L348 | ❌ | ❌ |
| NetworkState | p2p_protocol_defs.h#L382 | ❌ | ❌ |
| PeerId | p2p_protocol_defs.h#L414 | ✅ | ✅ |
| SupportFlags | p2p_protocol_defs.h#L437 | ✅ | ✅ |
| command | link | request |
|---|---|---|
| NewBlock | cryptonote_protocol_defs.h#L126 | ✅ |
| RequestGetObjects | cryptonote_protocol_defs.h#L163 | ❌ |
| ResponseGetObjects | cryptonote_protocol_defs.h#L179 | ❌ |
| RequestChain | cryptonote_protocol_defs.h#L217 | ✅ |
| ResponseChainEntry | cryptonote_protocol_defs.h#L231 | ✅ |
| NewFluffyBlock | cryptonote_protocol_defs.h#L254 | ✅ |
| RequestFluffyMissingTx | cryptonote_protocol_defs.h#L273 | ❌ |
Denpa\Levin\Exceptions\ConnectionException- thrown on connection errors.Denpa\Levin\Exceptions\EntryTooLargeException- thrown when type or packet size is too large.Denpa\Levin\Exceptions\SignatureMismatchException- thrown on section or bucket signature mismatches.Denpa\Levin\Exceptions\UnexpectedTypeException- thrown on unexpected or invalid type.Denpa\Levin\Exceptions\UnknownCommandException- thrown on unknown command.Denpa\Levin\Exceptions\UnpackException- thrown when unable to unpack binary data.
This product is distributed under the MIT license.
Loosely based on py-levin.
If you like this project, you can donate using one of the following addresses:
BTC:
3L6dqSBNgdpZan78KJtzoXEk9DN3sgEQJu
Monero:
458j3EKczYFEE1Gku9ENUgTj4KUtHbqP9hT82vFRdZHiBRfbVFDUE7QArtAB63cNZiKMgBgwrD4k1Wtac8ZgoKx2GUHFpo2
Safex:
Safex61BqfGVucrCo71xPxhQi4L1oMaRYUHwBKMuHVy8UTR1HkBjhJx4WafkLvhSwUeshkonyDjvYFiBrRDeEcrL5k6JLALD85L2T
❤Thanks for your support!❤