@ -33,9 +33,11 @@ using namespace dev;
using namespace dev : : eth ;
OurWebThreeStubServer : : OurWebThreeStubServer ( jsonrpc : : AbstractServerConnector & _conn , WebThreeDirect & _web3 ,
vector < KeyPair > const & _accounts , Main * main ) :
WebThreeStubServer ( _conn , _web3 , _accounts ) , m_web3 ( & _web3 ) , m_main ( main )
{ }
vector < KeyPair > const & _accounts , Main * _main ) :
WebThreeStubServer ( _conn , _web3 , _accounts ) , m_web3 ( & _web3 ) , m_main ( _main )
{
connect ( _main , SIGNAL ( poll ( ) ) , this , SLOT ( doValidations ( ) ) ) ;
}
string OurWebThreeStubServer : : shh_newIdentity ( )
{
@ -44,7 +46,7 @@ string OurWebThreeStubServer::shh_newIdentity()
return toJS ( kp . pub ( ) ) ;
}
bool OurWebThreeStubServer : : showAuthenticationPopup ( string const & _title , string const & _text ) const
bool OurWebThreeStubServer : : showAuthenticationPopup ( string const & _title , string const & _text )
{
if ( ! m_main - > confirm ( ) )
{
@ -52,23 +54,30 @@ bool OurWebThreeStubServer::showAuthenticationPopup(string const& _title, string
return true ;
}
int button ;
QMetaObject : : invokeMethod ( m_main , " authenticate " , Qt : : BlockingQueuedConnection , Q_RETURN_ARG ( int , button ) , Q_ARG ( QString , QString : : fromStdString ( _title ) ) , Q_ARG ( QString , QString : : fromStdString ( _text ) ) ) ;
return button = = QMessageBox : : Ok ;
QMessageBox userInput ;
userInput . setText ( QString : : fromStdString ( _title ) ) ;
userInput . setInformativeText ( QString : : fromStdString ( _text ) ) ;
userInput . setStandardButtons ( QMessageBox : : Ok | QMessageBox : : Cancel ) ;
userInput . button ( QMessageBox : : Ok ) - > setText ( " Allow " ) ;
userInput . button ( QMessageBox : : Cancel ) - > setText ( " Reject " ) ;
userInput . setDefaultButton ( QMessageBox : : Cancel ) ;
return userInput . exec ( ) = = QMessageBox : : Ok ;
//QMetaObject::invokeMethod(m_main, "authenticate", Qt::BlockingQueuedConnection, Q_RETURN_ARG(int, button), Q_ARG(QString, QString::fromStdString(_title)), Q_ARG(QString, QString::fromStdString(_text)));
//return button == QMessageBox::Ok;
}
bool OurWebThreeStubServer : : showCreationNotice ( TransactionSkeleton const & _t , bool _toProxy ) const
bool OurWebThreeStubServer : : showCreationNotice ( TransactionSkeleton const & _t , bool _toProxy )
{
return showAuthenticationPopup ( " Contract Creation Transaction " , string ( " ÐApp is attemping to create a contract; " ) + ( _toProxy ? " (this transaction is not executed directly, but forwarded to another ÐApp) " : " " ) + " to be endowed with " + formatBalance ( _t . value ) + " , with additional network fees of up to " + formatBalance ( _t . gas * _t . gasPrice ) + " . \n \n Maximum total cost is <b> " + formatBalance ( _t . value + _t . gas * _t . gasPrice ) + " </b>. " ) ;
return showAuthenticationPopup ( " Contract Creation Transaction " , string ( " ÐApp is attemping to create a contract; " ) + ( _toProxy ? " (this transaction is not executed directly, but forwarded to another ÐApp) " : " " ) + " to be endowed with " + formatBalance ( _t . value ) + " , with additional network fees of up to " + formatBalance ( _t . gas * _t . gasPrice ) + " . \n \n Maximum total cost is " + formatBalance ( _t . value + _t . gas * _t . gasPrice ) + " . " ) ;
}
bool OurWebThreeStubServer : : showSendNotice ( TransactionSkeleton const & _t , bool _toProxy ) const
bool OurWebThreeStubServer : : showSendNotice ( TransactionSkeleton const & _t , bool _toProxy )
{
return showAuthenticationPopup ( " Fund Transfer Transaction " , " ÐApp is attempting to send " + formatBalance ( _t . value ) + " to a recipient " + m_main - > pretty ( _t . to ) . toStdString ( ) + ( _toProxy ? " (this transaction is not executed directly, but forwarded to another ÐApp) " : " " ) +
" , with additional network fees of up to " + formatBalance ( _t . gas * _t . gasPrice ) + " . \n \n Maximum total cost is <b> " + formatBalance ( _t . value + _t . gas * _t . gasPrice ) + " </b> ." ) ;
" , with additional network fees of up to " + formatBalance ( _t . gas * _t . gasPrice ) + " . \n \n Maximum total cost is " + formatBalance ( _t . value + _t . gas * _t . gasPrice ) + " . " ) ;
}
bool OurWebThreeStubServer : : showUnknownCallNotice ( TransactionSkeleton const & _t , bool _toProxy ) const
bool OurWebThreeStubServer : : showUnknownCallNotice ( TransactionSkeleton const & _t , bool _toProxy )
{
return showAuthenticationPopup ( " DANGEROUS! Unknown Contract Transaction! " ,
" ÐApp is attempting to call into an unknown contract at address " +
@ -84,11 +93,29 @@ bool OurWebThreeStubServer::showUnknownCallNotice(TransactionSkeleton const& _t,
" REJECT UNLESS YOU REALLY KNOW WHAT YOU ARE DOING! " ) ;
}
bool OurWebThreeStubServer : : authenticate ( TransactionSkeleton const & _t , bool _toProxy )
void OurWebThreeStubServer : : authenticate ( TransactionSkeleton const & _t , bool _toProxy )
{
Guard l ( x_queued ) ;
m_queued . push ( make_pair ( _t , _toProxy ) ) ;
}
void OurWebThreeStubServer : : doValidations ( )
{
Guard l ( x_queued ) ;
while ( ! m_queued . empty ( ) )
{
auto q = m_queued . front ( ) ;
m_queued . pop ( ) ;
if ( validateTransaction ( q . first , q . second ) )
WebThreeStubServerBase : : authenticate ( q . first , q . second ) ;
}
}
bool OurWebThreeStubServer : : validateTransaction ( TransactionSkeleton const & _t , bool _toProxy )
{
if ( _t . creation )
{
// recipient has no code - nothing special about this transaction, show basic value transfer info
// show notice concerning the creation code. TODO: this needs entering into natspec.
return showCreationNotice ( _t , _toProxy ) ;
}
@ -116,8 +143,8 @@ bool OurWebThreeStubServer::authenticate(TransactionSkeleton const& _t, bool _to
( _t . value > 0 ?
" In addition, ÐApp is attempting to send " +
formatBalance ( _t . value ) + " to said recipient, with additional network fees of up to " +
formatBalance ( _t . gas * _t . gasPrice ) + " = <b> " +
formatBalance ( _t . value + _t . gas * _t . gasPrice ) + " </b> ."
formatBalance ( _t . gas * _t . gasPrice ) + " = " +
formatBalance ( _t . value + _t . gas * _t . gasPrice ) + " . "
:
" Additional network fees are at most " +
formatBalance ( _t . gas * _t . gasPrice ) + " . " )