Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FTQ rpc call, v3.18.0 again #1776

Merged
merged 9 commits into from
Jan 10, 2024
2 changes: 2 additions & 0 deletions libethereum/Client.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ class Client : public ClientBase, protected Worker {
/// Retrieve pending transactions
Transactions pending() const override;

Transactions debugGetFutureTransactions() const { return m_tq.debugGetFutureTransactions(); }

/// Queues a block for import.
ImportResult queueBlock( bytes const& _block, bool _isSafe = false );

Expand Down
11 changes: 11 additions & 0 deletions libethereum/TransactionQueue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -537,3 +537,14 @@ void TransactionQueue::verifierBody() {
MICROPROFILE_LEAVE();
}
}

Transactions TransactionQueue::debugGetFutureTransactions() const {
Transactions res;
ReadGuard l( m_lock );
for ( auto addressAndMap : m_future ) {
for ( auto nonceAndTransaction : addressAndMap.second ) {
res.push_back( nonceAndTransaction.second.transaction );
} // for nonce
} // for address
return res;
}
2 changes: 2 additions & 0 deletions libethereum/TransactionQueue.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ class TransactionQueue {
template < class... Args >
Transactions topTransactionsSync( unsigned _limit, Args... args );

Transactions debugGetFutureTransactions() const;

/// Get a hash set of transactions in the queue
/// @returns A hash set of all transactions in the queue
const h256Hash knownTransactions() const;
Expand Down
7 changes: 7 additions & 0 deletions libweb3jsonrpc/Debug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -314,3 +314,10 @@ uint64_t Debug::debug_doBlocksDbCompaction() {

return boost::chrono::duration_cast< boost::chrono::milliseconds >( t2 - t1 ).count();
}

Json::Value Debug::debug_getFutureTransactions() {
auto res = toJson( m_eth.debugGetFutureTransactions() );
for ( auto& t : res )
t.removeMember( "data" );
return res;
}
2 changes: 2 additions & 0 deletions libweb3jsonrpc/Debug.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ class Debug : public DebugFace {
virtual uint64_t debug_doStateDbCompaction() override;
virtual uint64_t debug_doBlocksDbCompaction() override;

virtual Json::Value debug_getFutureTransactions() override;

private:
eth::Client const& m_eth;
SkaleDebugInterface* m_debugInterface = nullptr;
Expand Down
10 changes: 10 additions & 0 deletions libweb3jsonrpc/DebugFace.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ class DebugFace : public ServerInterface< DebugFace > {
this->bindAndAddMethod( jsonrpc::Procedure( "debug_doBlocksDbCompaction",
jsonrpc::PARAMS_BY_POSITION, jsonrpc::JSON_STRING, NULL ),
&dev::rpc::DebugFace::debug_doBlocksDbCompactionI );

this->bindAndAddMethod( jsonrpc::Procedure( "debug_getFutureTransactions",
jsonrpc::PARAMS_BY_POSITION, jsonrpc::JSON_STRING, NULL ),
&dev::rpc::DebugFace::debug_getFutureTransactionsI );
}
inline virtual void debug_accountRangeAtI( const Json::Value& request, Json::Value& response ) {
response = this->debug_accountRangeAt( request[0u].asString(), request[1u].asInt(),
Expand Down Expand Up @@ -179,6 +183,10 @@ class DebugFace : public ServerInterface< DebugFace > {
response = this->debug_doBlocksDbCompaction();
}

virtual void debug_getFutureTransactionsI( const Json::Value&, Json::Value& response ) {
response = this->debug_getFutureTransactions();
}

virtual Json::Value debug_accountRangeAt(
const std::string& param1, int param2, const std::string& param3, int param4 ) = 0;
virtual Json::Value debug_traceTransaction(
Expand Down Expand Up @@ -206,6 +214,8 @@ class DebugFace : public ServerInterface< DebugFace > {

virtual uint64_t debug_doStateDbCompaction() = 0;
virtual uint64_t debug_doBlocksDbCompaction() = 0;

virtual Json::Value debug_getFutureTransactions() = 0;
};

} // namespace rpc
Expand Down
10 changes: 10 additions & 0 deletions test/unittests/libweb3jsonrpc/WebThreeStubClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1344,3 +1344,13 @@
throw jsonrpc::JsonRpcException(
jsonrpc::Errors::ERROR_CLIENT_INVALID_RESPONSE, result.toStyledString() );
}

Json::Value WebThreeStubClient::debug_getFutureTransactions() {
Json::Value p;
Json::Value result = this->CallMethod( "debug_getFutureTransactions", p );
if ( result.isArray() )
return result;
else
throw jsonrpc::JsonRpcException(
jsonrpc::Errors::ERROR_CLIENT_INVALID_RESPONSE, result.toStyledString() );

Check warning on line 1355 in test/unittests/libweb3jsonrpc/WebThreeStubClient.cpp

View check run for this annotation

Codecov / codecov/patch

test/unittests/libweb3jsonrpc/WebThreeStubClient.cpp#L1355

Added line #L1355 was not covered by tests
}
1 change: 1 addition & 0 deletions test/unittests/libweb3jsonrpc/WebThreeStubClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ class WebThreeStubClient : public jsonrpc::Client {
const Json::Value& param3 ) noexcept( false );
Json::Value debug_doStateDbCompaction() noexcept( false );
Json::Value debug_doBlocksDbCompaction() noexcept( false );
Json::Value debug_getFutureTransactions() noexcept( false );
};

#endif // JSONRPC_CPP_STUB_WEBTHREESTUBCLIENT_H_
17 changes: 17 additions & 0 deletions test/unittests/libweb3jsonrpc/jsonrpc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2878,23 +2878,40 @@ BOOST_AUTO_TEST_CASE( mtm_import_future_txs ) {
BOOST_REQUIRE( h1 );
BOOST_REQUIRE_EQUAL( tq->futureSize(), 1);

Json::Value call = fixture.rpcClient->debug_getFutureTransactions();
BOOST_REQUIRE_EQUAL( call.size(), 1);

h256 h2 = fixture.client->importTransaction( tx3 );
BOOST_REQUIRE( h2 );
BOOST_REQUIRE_EQUAL( tq->futureSize(), 2);

call = fixture.rpcClient->debug_getFutureTransactions();
BOOST_REQUIRE_EQUAL( call.size(), 2);
BOOST_REQUIRE_EQUAL( call[0]["from"], string("0x")+txJson["from"].asString() );

h256 h3 = fixture.client->importTransaction( tx2 );
BOOST_REQUIRE( h3 );
BOOST_REQUIRE_EQUAL( tq->futureSize(), 3);

call = fixture.rpcClient->debug_getFutureTransactions();
BOOST_REQUIRE_EQUAL( call.size(), 3);

h256 h4 = fixture.client->importTransaction( tx1 );
BOOST_REQUIRE( h4 );
BOOST_REQUIRE_EQUAL( tq->futureSize(), 1);
BOOST_REQUIRE_EQUAL( tq->status().current, 3);

call = fixture.rpcClient->debug_getFutureTransactions();
BOOST_REQUIRE_EQUAL( call.size(), 1);

h256 h5 = fixture.client->importTransaction( tx4 );
BOOST_REQUIRE( h5 );
BOOST_REQUIRE_EQUAL( tq->futureSize(), 0);
BOOST_REQUIRE_EQUAL( tq->status().current, 5);

call = fixture.rpcClient->debug_getFutureTransactions();
BOOST_REQUIRE_EQUAL( call.size(), 0);

fixture.client->skaleHost()->pauseConsensus( false );
}

Expand Down
Loading