Implementation of Overwinter transaction format ZIP 202.

This commit is contained in:
Simon
2018-02-15 22:19:36 -08:00
parent d527116d46
commit 072099d788
25 changed files with 1125 additions and 66 deletions

View File

@@ -7,6 +7,7 @@
#include "base58.h"
#include "netbase.h"
#include "utilstrencodings.h"
#include "test/test_bitcoin.h"
@@ -295,4 +296,44 @@ BOOST_AUTO_TEST_CASE(rpc_ban)
BOOST_CHECK_EQUAL(adr.get_str(), "2001:4d48:ac57:400:cacf:e9ff:fe1d:9c63/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
}
BOOST_AUTO_TEST_CASE(rpc_raw_create_overwinter_v3)
{
SelectParams(CBaseChainParams::REGTEST);
UpdateNetworkUpgradeParameters(Consensus::UPGRADE_OVERWINTER, Consensus::NetworkUpgrade::ALWAYS_ACTIVE);
// Sample regtest address:
// public: tmHU5HLMu3yS8eoNvbrU1NWeJaGf6jxehru
// private: cW1G4SxEm5rui2RQtBcSUZrERTVYPtyZXKbSi5MCwBqzbn5kqwbN
UniValue r;
std::string prevout =
"[{\"txid\":\"b4cc287e58f87cdae59417329f710f3ecd75a4ee1d2872b7248f50977c8493f3\","
"\"vout\":1}]";
r = CallRPC(string("createrawtransaction ") + prevout + " " +
"{\"tmHU5HLMu3yS8eoNvbrU1NWeJaGf6jxehru\":11}");
std::string rawhex = r.get_str();
BOOST_CHECK_NO_THROW(r = CallRPC(string("decoderawtransaction ") + rawhex));
BOOST_CHECK_EQUAL(find_value(r.get_obj(), "overwintered").get_bool(), true);
BOOST_CHECK_EQUAL(find_value(r.get_obj(), "version").get_int(), 3);
BOOST_CHECK_EQUAL(find_value(r.get_obj(), "expiryheight").get_int(), 0);
BOOST_CHECK_EQUAL(
ParseHexToUInt32(find_value(r.get_obj(), "versiongroupid").get_str()),
OVERWINTER_VERSION_GROUP_ID);
// Sanity check we can deserialize the raw hex
// 030000807082c40301f393847c97508f24b772281deea475cd3e0f719f321794e5da7cf8587e28ccb40100000000ffffffff0100ab9041000000001976a914550dc92d3ff8d1f0cb6499fddf2fe43b745330cd88ac000000000000000000
CDataStream ss(ParseHex(rawhex), SER_DISK, PROTOCOL_VERSION);
CTransaction tx;
ss >> tx;
CDataStream ss2(ParseHex(rawhex), SER_DISK, PROTOCOL_VERSION);
CMutableTransaction mtx;
ss2 >> mtx;
BOOST_CHECK_EQUAL(tx.GetHash().GetHex(), CTransaction(mtx).GetHash().GetHex());
// Revert to default
UpdateNetworkUpgradeParameters(Consensus::UPGRADE_OVERWINTER, Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT);
}
BOOST_AUTO_TEST_SUITE_END()