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 <cstdlib> | ||||||
| 
 | 
 | ||||||
|  | #include <chrono> | ||||||
|  | #include <thread> | ||||||
|  | 
 | ||||||
| using namespace std; | using namespace std; | ||||||
| using namespace dev; | using namespace dev; | ||||||
| using namespace dev::test; | using namespace dev::test; | ||||||
| @ -137,6 +140,7 @@ void ExecutionFramework::sendMessage(bytes const& _data, bool _isCreation, u256 | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	string txHash = m_rpc.eth_sendTransaction(d); | 	string txHash = m_rpc.eth_sendTransaction(d); | ||||||
|  | 	waitForTransaction(txHash); | ||||||
| 	m_rpc.test_mineBlocks(1); | 	m_rpc.test_mineBlocks(1); | ||||||
| 	RPCSession::TransactionReceipt receipt(m_rpc.eth_getTransactionReceipt(txHash)); | 	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); | 		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) | void ExecutionFramework::sendEther(Address const& _to, u256 const& _value) | ||||||
| { | { | ||||||
| 	RPCSession::TransactionData d; | 	RPCSession::TransactionData d; | ||||||
|  | |||||||
| @ -247,6 +247,7 @@ private: | |||||||
| protected: | protected: | ||||||
| 	void sendMessage(bytes const& _data, bool _isCreation, u256 const& _value = 0); | 	void sendMessage(bytes const& _data, bool _isCreation, u256 const& _value = 0); | ||||||
| 	void sendEther(Address const& _to, u256 const& _value); | 	void sendEther(Address const& _to, u256 const& _value); | ||||||
|  | 	void waitForTransaction(std::string const& _txHash) const; | ||||||
| 	size_t currentTimestamp(); | 	size_t currentTimestamp(); | ||||||
| 	size_t blockTimestamp(u256 _number); | 	size_t blockTimestamp(u256 _number); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user