mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
TestFramework: Use getBlockByNumber and eth_flush to get transaction confirmation
This commit is contained in:
parent
58a3148ffb
commit
a83e54cfd3
@ -29,6 +29,9 @@
|
||||
|
||||
#include <cstdlib>
|
||||
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
|
||||
using namespace std;
|
||||
using namespace dev;
|
||||
using namespace dev::test;
|
||||
@ -137,6 +140,7 @@ void ExecutionFramework::sendMessage(bytes const& _data, bool _isCreation, u256
|
||||
}
|
||||
|
||||
string txHash = m_rpc.eth_sendTransaction(d);
|
||||
waitForTransaction(txHash);
|
||||
m_rpc.test_mineBlocks(1);
|
||||
RPCSession::TransactionReceipt receipt(m_rpc.eth_getTransactionReceipt(txHash));
|
||||
|
||||
@ -174,6 +178,27 @@ void ExecutionFramework::sendMessage(bytes const& _data, bool _isCreation, u256
|
||||
m_transactionSuccessful = (m_gas != m_gasUsed);
|
||||
}
|
||||
|
||||
void ExecutionFramework::waitForTransaction(std::string const& _txHash) const
|
||||
{
|
||||
for (int polls = 0; polls < 3000; polls++)
|
||||
{
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
auto pendingBlock = m_rpc.eth_getBlockByNumber("pending", false);
|
||||
|
||||
if (!pendingBlock["transactions"].empty())
|
||||
{
|
||||
BOOST_REQUIRE_EQUAL(pendingBlock["transactions"][0].asString(), _txHash);
|
||||
return;
|
||||
}
|
||||
|
||||
if (polls == 200)
|
||||
{
|
||||
cerr << "Note: Already used 200 iterations while waiting for transaction confirmation. Issuing an eth_flush request." << endl;
|
||||
m_rpc.rpcCall("eth_flush");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ExecutionFramework::sendEther(Address const& _to, u256 const& _value)
|
||||
{
|
||||
RPCSession::TransactionData d;
|
||||
|
@ -247,6 +247,7 @@ private:
|
||||
protected:
|
||||
void sendMessage(bytes const& _data, bool _isCreation, u256 const& _value = 0);
|
||||
void sendEther(Address const& _to, u256 const& _value);
|
||||
void waitForTransaction(std::string const& _txHash) const;
|
||||
size_t currentTimestamp();
|
||||
size_t blockTimestamp(u256 _number);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user