mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
TransactionTest
Incorrect receiver address ength
This commit is contained in:
parent
4d76086860
commit
b8a07a22be
104
transaction.cpp
104
transaction.cpp
@ -28,31 +28,48 @@ using namespace dev::eth;
|
|||||||
|
|
||||||
namespace dev { namespace test {
|
namespace dev { namespace test {
|
||||||
|
|
||||||
Transaction createTransactionFromFields(mObject& _tObj)
|
RLPStream createRLPStreamFromTransactionFields(mObject& _tObj)
|
||||||
{
|
{
|
||||||
BOOST_REQUIRE(_tObj.count("data") > 0);
|
|
||||||
BOOST_REQUIRE(_tObj.count("value") > 0);
|
|
||||||
BOOST_REQUIRE(_tObj.count("gasPrice") > 0);
|
|
||||||
BOOST_REQUIRE(_tObj.count("gasLimit") > 0);
|
|
||||||
BOOST_REQUIRE(_tObj.count("nonce")> 0);
|
|
||||||
BOOST_REQUIRE(_tObj.count("to") > 0);
|
|
||||||
|
|
||||||
BOOST_REQUIRE(_tObj.count("v") > 0);
|
|
||||||
BOOST_REQUIRE(_tObj.count("r") > 0);
|
|
||||||
BOOST_REQUIRE(_tObj.count("s") > 0);
|
|
||||||
|
|
||||||
//Construct Rlp of the given transaction
|
//Construct Rlp of the given transaction
|
||||||
RLPStream rlpStream;
|
RLPStream rlpStream;
|
||||||
rlpStream.appendList(9);
|
rlpStream.appendList(_tObj.size());
|
||||||
rlpStream << bigint(_tObj["nonce"].get_str()) << bigint(_tObj["gasPrice"].get_str()) << bigint(_tObj["gasLimit"].get_str());
|
|
||||||
if (_tObj["to"].get_str().empty())
|
|
||||||
rlpStream << "";
|
|
||||||
else
|
|
||||||
rlpStream << Address(_tObj["to"].get_str());
|
|
||||||
rlpStream << bigint(_tObj["value"].get_str()) << importData(_tObj);
|
|
||||||
rlpStream << bigint(_tObj["v"].get_str()) << bigint(_tObj["r"].get_str()) << bigint(_tObj["s"].get_str());
|
|
||||||
|
|
||||||
return Transaction(rlpStream.out(), CheckSignature::Sender);
|
if (_tObj.count("nonce") > 0)
|
||||||
|
rlpStream << bigint(_tObj["nonce"].get_str());
|
||||||
|
|
||||||
|
if (_tObj.count("gasPrice") > 0)
|
||||||
|
rlpStream << bigint(_tObj["gasPrice"].get_str());
|
||||||
|
|
||||||
|
if (_tObj.count("gasLimit") > 0)
|
||||||
|
rlpStream << bigint(_tObj["gasLimit"].get_str());
|
||||||
|
|
||||||
|
if (_tObj.count("to") > 0)
|
||||||
|
{
|
||||||
|
if (_tObj["to"].get_str().empty())
|
||||||
|
rlpStream << "";
|
||||||
|
else
|
||||||
|
rlpStream << importByteArray(_tObj["to"].get_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_tObj.count("value") > 0)
|
||||||
|
rlpStream << bigint(_tObj["value"].get_str());
|
||||||
|
|
||||||
|
if (_tObj.count("data") > 0)
|
||||||
|
rlpStream << importData(_tObj);
|
||||||
|
|
||||||
|
if (_tObj.count("v") > 0)
|
||||||
|
rlpStream << bigint(_tObj["v"].get_str());
|
||||||
|
|
||||||
|
if (_tObj.count("r") > 0)
|
||||||
|
rlpStream << bigint(_tObj["r"].get_str());
|
||||||
|
|
||||||
|
if (_tObj.count("s") > 0)
|
||||||
|
rlpStream << bigint(_tObj["s"].get_str());
|
||||||
|
|
||||||
|
if (_tObj.count("extrafield") > 0)
|
||||||
|
rlpStream << bigint(_tObj["extrafield"].get_str());
|
||||||
|
|
||||||
|
return rlpStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
void doTransactionTests(json_spirit::mValue& _v, bool _fillin)
|
void doTransactionTests(json_spirit::mValue& _v, bool _fillin)
|
||||||
@ -83,7 +100,7 @@ void doTransactionTests(json_spirit::mValue& _v, bool _fillin)
|
|||||||
BOOST_REQUIRE(o.count("transaction") > 0);
|
BOOST_REQUIRE(o.count("transaction") > 0);
|
||||||
|
|
||||||
mObject tObj = o["transaction"].get_obj();
|
mObject tObj = o["transaction"].get_obj();
|
||||||
Transaction txFromFields = createTransactionFromFields(tObj);
|
Transaction txFromFields(createRLPStreamFromTransactionFields(tObj).out(),CheckSignature::Sender);
|
||||||
|
|
||||||
//Check the fields restored from RLP to original fields
|
//Check the fields restored from RLP to original fields
|
||||||
BOOST_CHECK_MESSAGE(txFromFields.data() == txFromRlp.data(), "Data in given RLP not matching the Transaction data!");
|
BOOST_CHECK_MESSAGE(txFromFields.data() == txFromRlp.data(), "Data in given RLP not matching the Transaction data!");
|
||||||
@ -105,44 +122,7 @@ void doTransactionTests(json_spirit::mValue& _v, bool _fillin)
|
|||||||
mObject tObj = o["transaction"].get_obj();
|
mObject tObj = o["transaction"].get_obj();
|
||||||
|
|
||||||
//Construct Rlp of the given transaction
|
//Construct Rlp of the given transaction
|
||||||
RLPStream rlpStream;
|
RLPStream rlpStream = createRLPStreamFromTransactionFields(tObj);
|
||||||
rlpStream.appendList(tObj.size());
|
|
||||||
|
|
||||||
if (tObj.count("nonce") > 0)
|
|
||||||
rlpStream << bigint(tObj["nonce"].get_str());
|
|
||||||
|
|
||||||
if (tObj.count("gasPrice") > 0)
|
|
||||||
rlpStream << bigint(tObj["gasPrice"].get_str());
|
|
||||||
|
|
||||||
if (tObj.count("gasLimit") > 0)
|
|
||||||
rlpStream << bigint(tObj["gasLimit"].get_str());
|
|
||||||
|
|
||||||
if (tObj.count("to") > 0)
|
|
||||||
{
|
|
||||||
if (tObj["to"].get_str().empty())
|
|
||||||
rlpStream << "";
|
|
||||||
else
|
|
||||||
rlpStream << Address(tObj["to"].get_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tObj.count("value") > 0)
|
|
||||||
rlpStream << bigint(tObj["value"].get_str());
|
|
||||||
|
|
||||||
if (tObj.count("data") > 0)
|
|
||||||
rlpStream << importData(tObj);
|
|
||||||
|
|
||||||
if (tObj.count("v") > 0)
|
|
||||||
rlpStream << bigint(tObj["v"].get_str());
|
|
||||||
|
|
||||||
if (tObj.count("r") > 0)
|
|
||||||
rlpStream << bigint(tObj["r"].get_str());
|
|
||||||
|
|
||||||
if (tObj.count("s") > 0)
|
|
||||||
rlpStream << bigint(tObj["s"].get_str());
|
|
||||||
|
|
||||||
if (tObj.count("extrafield") > 0)
|
|
||||||
rlpStream << bigint(tObj["extrafield"].get_str());
|
|
||||||
|
|
||||||
o["rlp"] = "0x" + toHex(rlpStream.out());
|
o["rlp"] = "0x" + toHex(rlpStream.out());
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -151,9 +131,6 @@ void doTransactionTests(json_spirit::mValue& _v, bool _fillin)
|
|||||||
if (!txFromFields.signature().isValid())
|
if (!txFromFields.signature().isValid())
|
||||||
BOOST_THROW_EXCEPTION(Exception() << errinfo_comment("transaction from RLP signature is invalid") );
|
BOOST_THROW_EXCEPTION(Exception() << errinfo_comment("transaction from RLP signature is invalid") );
|
||||||
|
|
||||||
//cause Address is length20 array, when trying to create address from sting of another length, field "to" would be diffrent from RLP encoded Address
|
|
||||||
BOOST_CHECK_MESSAGE(Address(tObj["to"].get_str()) == txFromFields.receiveAddress(), "seems that transaction 'to' address has wrong format");
|
|
||||||
|
|
||||||
o["sender"] = toString(txFromFields.sender());
|
o["sender"] = toString(txFromFields.sender());
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
@ -163,7 +140,6 @@ void doTransactionTests(json_spirit::mValue& _v, bool _fillin)
|
|||||||
}
|
}
|
||||||
}//for
|
}//for
|
||||||
}//doTransactionTests
|
}//doTransactionTests
|
||||||
|
|
||||||
} }// Namespace Close
|
} }// Namespace Close
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,8 +10,7 @@
|
|||||||
"value" : "10",
|
"value" : "10",
|
||||||
"v" : "28",
|
"v" : "28",
|
||||||
"r" : "0x98ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4a",
|
"r" : "0x98ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4a",
|
||||||
"s" : "0x8887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3"
|
"s" : "0x8887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3"
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -255,6 +254,50 @@
|
|||||||
"r" : "0x48b55bfa915ac795c431978d8a6a992b628d557da5ff759b307d495a36649353",
|
"r" : "0x48b55bfa915ac795c431978d8a6a992b628d557da5ff759b307d495a36649353",
|
||||||
"s" : "0xefffd310ac743f371de3b9f7f9cb56c0b28ad43601b4ab949f53faa07bd2c804"
|
"s" : "0xefffd310ac743f371de3b9f7f9cb56c0b28ad43601b4ab949f53faa07bd2c804"
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
|
||||||
|
"AddressMoreThan20" : {
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "2000",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "0",
|
||||||
|
"to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b1c",
|
||||||
|
"value" : "10",
|
||||||
|
"v" : "28",
|
||||||
|
"r" : "0x98ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4a",
|
||||||
|
"s" : "0x8887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"AddressLessThan20" : {
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "2000",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "0",
|
||||||
|
"to" : "b9331677e6ebf",
|
||||||
|
"value" : "10",
|
||||||
|
"v" : "28",
|
||||||
|
"r" : "0x98ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4a",
|
||||||
|
"s" : "0x8887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"AddressLessThan20Prefixed0" : {
|
||||||
|
"transaction" :
|
||||||
|
{
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "2000",
|
||||||
|
"gasPrice" : "1",
|
||||||
|
"nonce" : "0",
|
||||||
|
"to" : "0x000000000000000000000000000b9331677e6ebf",
|
||||||
|
"value" : "10",
|
||||||
|
"v" : "28",
|
||||||
|
"r" : "0x98ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4a",
|
||||||
|
"s" : "0x8887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user