# platform specific defaults, if not overridden on command line
isEmpty(BOOST_LIB_SUFFIX) {
macx:BOOST_LIB_SUFFIX = -mt
- windows:BOOST_LIB_SUFFIX = -mgw44-mt-s-1_50
+ windows:BOOST_LIB_SUFFIX = -mgw44-mt-1_53
}
isEmpty(BOOST_THREAD_LIB_SUFFIX) {
{
unsigned char rand_pwd[32];
RAND_bytes(rand_pwd, 32);
- string strWhatAmI = "To use bitcoind";
+ string strWhatAmI = "To use novacoind";
if (mapArgs.count("-server"))
strWhatAmI = strprintf(_("To use the %s option"), "\"-server\"");
else if (mapArgs.count("-daemon"))
//
static MapCheckpoints mapCheckpoints =
boost::assign::map_list_of
- ( 0, hashGenesisBlockOfficial )
+ ( 0, hashGenesisBlock )
( 6000, uint256("0x000000000945e3c9d8e15df834e802521eb79f9ceb4191a27bdfadad4b777f4a"))
- ( 8700, uint256("0x00000000014270724837789c9a69859290f6bdee38556bc4561c21f17935a178"))
+ ( 9690, uint256("0x00000000026561450859c46868099e0df6068a538f038cb18988fd8d47dcdaf5"))
( 13560, uint256("0xa1591a0fcbf11f282d671581edb9f0aadcd06fee69761081e0a3245914c13729"))
( 14189, uint256("0x00000000020f76474d2522b19c7bfafc43ba6ecbabae54293bcd9546159c8c1d"))
+ ( 19600, uint256("0x252ae08d6df4bc7220c1dcdaed7b8a6e78bab05a60173511e8f565a3a38ce3c3"))
;
static MapCheckpoints mapCheckpointsTestnet =
boost::assign::map_list_of
- ( 0, hashGenesisBlockOfficial )
+ ( 0, hashGenesisBlockTestNet )
;
bool CheckHardened(int nHeight, const uint256& hash)
{
// Test signing a sync-checkpoint with genesis block
CSyncCheckpoint checkpoint;
- checkpoint.hashCheckpoint = hashGenesisBlock;
+ checkpoint.hashCheckpoint = !fTestNet ? hashGenesisBlock : hashGenesisBlockTestNet;
CDataStream sMsg(SER_NETWORK, PROTOCOL_VERSION);
sMsg << (CUnsignedSyncCheckpoint)checkpoint;
checkpoint.vchMsg = std::vector<unsigned char>(sMsg.begin(), sMsg.end());
pindexNew->nNonce = diskindex.nNonce;
// Watch for genesis block
- if (pindexGenesisBlock == NULL && diskindex.GetBlockHash() == hashGenesisBlock)
+ if (pindexGenesisBlock == NULL && diskindex.GetBlockHash() == (!fTestNet ? hashGenesisBlock : hashGenesisBlockTestNet))
pindexGenesisBlock = pindexNew;
if (!pindexNew->CheckIndex())
" -listen " + _("Accept connections from outside (default: 1 if no -proxy or -connect)") + "\n" +
" -bind=<addr> " + _("Bind to given address. Use [host]:port notation for IPv6") + "\n" +
" -dnsseed " + _("Find peers using DNS lookup (default: 0)") + "\n" +
+ " -nosynccheckpoints " + _("Disable sync checkpoints (default: 0)") + "\n" +
" -banscore=<n> " + _("Threshold for disconnecting misbehaving peers (default: 100)") + "\n" +
" -bantime=<n> " + _("Number of seconds to keep misbehaving peers from reconnecting (default: 86400)") + "\n" +
" -maxreceivebuffer=<n> " + _("Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000)") + "\n" +
}
if (fTestNet) {
- Send(hSocket, "JOIN #novacoinTEST\r");
- Send(hSocket, "WHO #novacoinTEST\r");
+ Send(hSocket, "JOIN #novacoinTEST2\r");
+ Send(hSocket, "WHO #novacoinTEST2\r");
} else {
// randomly join #novacoin00-#novacoin05
// int channel_number = GetRandInt(5);
extern int nStakeMaxAge;
extern int nStakeTargetSpacing;
-// Modifier interval: time to elapse before new modifier is computed
-// Set to 6-hour for production network and 20-minute for test network
-unsigned int nModifierInterval = MODIFIER_INTERVAL;
-
// Hard checkpoints of stake modifiers to ensure they are deterministic
static std::map<int, unsigned int> mapStakeModifierCheckpoints =
boost::assign::map_list_of
- ( 0, 0x0e00670bu )
- ( 6000, 0xb7cbc5d3u )
- ( 12661, 0x5d84115du )
+ ( 0, 0x0e00670bu )
+ ( 6000, 0xb7cbc5d3u )
+ ( 9690, 0x97dcdafau )
+ ( 12661, 0x5d84115du )
+ ( 19600, 0xdded1b8du )
;
// Get the last stake modifier and its generation time from a given block
// Get stake modifier checksum
unsigned int GetStakeModifierChecksum(const CBlockIndex* pindex)
{
- assert (pindex->pprev || pindex->GetBlockHash() == hashGenesisBlock);
+ assert (pindex->pprev || pindex->GetBlockHash() == (!fTestNet ? hashGenesisBlock : hashGenesisBlockTestNet));
// Hash previous checksum with flags, hashProofOfStake and nStakeModifier
CDataStream ss(SER_GETHASH, 0);
if (pindex->pprev)
#include "main.h"
// MODIFIER_INTERVAL: time to elapse before new modifier is computed
-static const unsigned int MODIFIER_INTERVAL = 6 * 60 * 60;
extern unsigned int nModifierInterval;
// MODIFIER_INTERVAL_RATIO:
map<uint256, CBlockIndex*> mapBlockIndex;
set<pair<COutPoint, unsigned int> > setStakeSeen;
-uint256 hashGenesisBlock = hashGenesisBlockOfficial;
+
static CBigNum bnProofOfWorkLimit(~uint256(0) >> 20);
static CBigNum bnProofOfStakeLimit(~uint256(0) >> 24);
-static CBigNum bnProofOfStakeHardLimit(~uint256(0) >> 30);
-static CBigNum bnInitialHashTarget(~uint256(0) >> 20);
+static CBigNum bnProofOfStakeHardLimit(~uint256(0) >> 30); // disabled temporarily, will be used in the future to fix minimum PoS difficulty at 0.25
+
+static CBigNum bnProofOfWorkLimitTestNet(~uint256(0) >> 16);
+static CBigNum bnProofOfStakeLimitTestNet(~uint256(0) >> 20);
+
unsigned int nStakeMinAge = 60 * 60 * 24 * 30; // minimum age for coin age
unsigned int nStakeMaxAge = 60 * 60 * 24 * 90; // stake age of full weight
unsigned int nStakeTargetSpacing = 10 * 60; // 10-minute block spacing
+unsigned int nModifierInterval = 6 * 60 * 60; // time to elapse before new modifier is computed
+
int nCoinbaseMaturity = 500;
CBlockIndex* pindexGenesisBlock = NULL;
int nBestHeight = -1;
const CTxOut& txout = vout[i];
if (txout.IsEmpty() && !IsCoinBase() && !IsCoinStake())
return DoS(100, error("CTransaction::CheckTransaction() : txout empty for user transaction"));
+
// ppcoin: enforce minimum output amount
if ((!txout.IsEmpty()) && txout.nValue < MIN_TXOUT_AMOUNT)
return DoS(100, error("CTransaction::CheckTransaction() : txout.nValue below minimum"));
+
if (txout.nValue > MAX_MONEY)
return DoS(100, error("CTransaction::CheckTransaction() : txout.nValue too high"));
nValueOut += txout.nValue;
unsigned int nNewBlockSize = nBlockSize + nBytes;
int64 nMinFee = (1 + (int64)nBytes / 1000) * nBaseFee;
- if (fAllowFree)
- {
- if (nBlockSize == 1)
- {
- // Transactions under 10K are free
- // (about 4500 BTC if made of 50 BTC inputs)
- if (nBytes < 10000)
- nMinFee = 0;
- }
- else
- {
- // Free transaction area
- if (nNewBlockSize < 27000)
- nMinFee = 0;
- }
- }
-
// To limit dust spam, require MIN_TX_FEE/MIN_RELAY_TX_FEE if any output is less than 0.01
if (nMinFee < nBaseFee)
{
return pblockOrphan->hashPrevBlock;
}
+// miner's coin base reward based on nBits
int64 GetProofOfWorkReward(unsigned int nBits)
{
CBigNum bnSubsidyLimit = MAX_MINT_PROOF_OF_WORK;
CBigNum bnTargetLimit = bnProofOfWorkLimit;
bnTargetLimit.SetCompact(bnTargetLimit.GetCompact());
- // ppcoin: subsidy is cut in half every 64x multiply of difficulty
+ // NovaCoin: subsidy is cut in half every 64x multiply of PoW difficulty
// A reasonably continuous curve is used to avoid shock to market
// (nSubsidyLimit / nSubsidy) ** 6 == bnProofOfWorkLimit / bnTarget
//
return min(nSubsidy, MAX_MINT_PROOF_OF_WORK);
}
-// ppcoin: miner's coin stake is rewarded based on coin age spent (coin-days)
-int64 GetProofOfStakeReward(int64 nCoinAge)
+// miner's coin stake reward based on nBits and coin age spent (coin-days)
+int64 GetProofOfStakeReward(int64 nCoinAge, unsigned int nBits, unsigned int nTime)
{
- static int64 nRewardCoinYear = 5 * CENT; // creation amount per coin-year
+ int64 nRewardCoinYear;
+
+ if(fTestNet || nTime > PROTOCOL_SWITCH_TIME)
+ {
+ // Stage 2 of emission process is PoS-based. It will be active on mainNet since 20 Jun 2013.
+
+ CBigNum bnRewardCoinYearLimit = MAX_MINT_PROOF_OF_STAKE; // Base stake mint rate, 100% year interest
+ CBigNum bnTarget;
+ bnTarget.SetCompact(nBits);
+ CBigNum bnTargetLimit = bnProofOfStakeLimit;
+ bnTargetLimit.SetCompact(bnTargetLimit.GetCompact());
+
+ // NovaCoin: reward for coin-year is cut in half every 64x multiply of PoS difficulty
+ // A reasonably continuous curve is used to avoid shock to market
+ // (nRewardCoinYearLimit / nRewardCoinYear) ** 6 == bnProofOfStakeLimit / bnTarget
+ //
+ // Human readable form:
+ //
+ // nRewardCoinYear = 1 / (posdiff ^ 1/6)
+
+ CBigNum bnLowerBound = 1 * CENT; // Lower interest bound is 1% per year
+ CBigNum bnUpperBound = bnRewardCoinYearLimit;
+ while (bnLowerBound + CENT <= bnUpperBound)
+ {
+ CBigNum bnMidValue = (bnLowerBound + bnUpperBound) / 2;
+ if (fDebug && GetBoolArg("-printcreation"))
+ printf("GetProofOfStakeReward() : lower=%"PRI64d" upper=%"PRI64d" mid=%"PRI64d"\n", bnLowerBound.getuint64(), bnUpperBound.getuint64(), bnMidValue.getuint64());
+ if (bnMidValue * bnMidValue * bnMidValue * bnMidValue * bnMidValue * bnMidValue * bnTargetLimit > bnRewardCoinYearLimit * bnRewardCoinYearLimit * bnRewardCoinYearLimit * bnRewardCoinYearLimit * bnRewardCoinYearLimit * bnRewardCoinYearLimit * bnTarget)
+ bnUpperBound = bnMidValue;
+ else
+ bnLowerBound = bnMidValue;
+ }
+
+ nRewardCoinYear = bnUpperBound.getuint64();
+ nRewardCoinYear = min((nRewardCoinYear / CENT) * CENT, MAX_MINT_PROOF_OF_STAKE);
+ }
+ else
+ {
+ // Old creation amount per coin-year, 5% fixed stake mint rate
+ nRewardCoinYear = 5 * CENT;
+ }
+
int64 nSubsidy = nCoinAge * 33 / (365 * 33 + 8) * nRewardCoinYear;
if (fDebug && GetBoolArg("-printcreation"))
- printf("GetProofOfStakeReward(): create=%s nCoinAge=%"PRI64d"\n", FormatMoney(nSubsidy).c_str(), nCoinAge);
+ printf("GetProofOfStakeReward(): create=%s nCoinAge=%"PRI64d" nBits=%d\n", FormatMoney(nSubsidy).c_str(), nCoinAge, nBits);
return nSubsidy;
}
{
// Proof-of-Stake blocks has own target limit since nVersion=3 supermajority on mainNet and always on testNet
if(fTestNet)
- bnTargetLimit = bnProofOfStakeHardLimit;
+ bnTargetLimit = bnProofOfStakeLimit;
else
{
- if(fTestNet || (pindexLast->nHeight + 1 > 15000))
+ if(pindexLast->nHeight + 1 > 15000)
bnTargetLimit = bnProofOfStakeLimit;
else if(pindexLast->nHeight + 1 > 14060)
bnTargetLimit = bnProofOfStakeHardLimit;
const CBlockIndex* pindexPrev = GetLastBlockIndex(pindexLast, fProofOfStake);
if (pindexPrev->pprev == NULL)
- return bnInitialHashTarget.GetCompact(); // first block
+ return bnTargetLimit.GetCompact(); // first block
const CBlockIndex* pindexPrevPrev = GetLastBlockIndex(pindexPrev->pprev, fProofOfStake);
if (pindexPrevPrev->pprev == NULL)
- return bnInitialHashTarget.GetCompact(); // second block
+ return bnTargetLimit.GetCompact(); // second block
int64 nActualSpacing = pindexPrev->GetBlockTime() - pindexPrevPrev->GetBlockTime();
if (!GetCoinAge(txdb, nCoinAge))
return error("ConnectInputs() : %s unable to get coin age for coinstake", GetHash().ToString().substr(0,10).c_str());
int64 nStakeReward = GetValueOut() - nValueIn;
- if (nStakeReward > GetProofOfStakeReward(nCoinAge) - GetMinFee() + MIN_TX_FEE)
+ if (nStakeReward > GetProofOfStakeReward(nCoinAge, pindexBlock->nBits, nTime) - GetMinFee() + MIN_TX_FEE)
return DoS(100, error("ConnectInputs() : %s stake reward exceeded", GetHash().ToString().substr(0,10).c_str()));
}
else
if (!txdb.TxnBegin())
return error("SetBestChain() : TxnBegin failed");
- if (pindexGenesisBlock == NULL && hash == hashGenesisBlock)
+ if (pindexGenesisBlock == NULL && hash == (!fTestNet ? hashGenesisBlock : hashGenesisBlockTestNet))
{
txdb.WriteHashBestChain(hash);
if (!txdb.TxnCommit())
// ppcoin: check that the block satisfies synchronized checkpoint
if (!Checkpoints::CheckSync(hash, pindexPrev))
- return error("AcceptBlock() : rejected by synchronized checkpoint");
+ {
+ if(!GetBoolArg("-nosynccheckpoints", false))
+ {
+ return error("AcceptBlock() : rejected by synchronized checkpoint");
+ }
+ else
+ {
+ strMiscWarning = _("WARNING: syncronized checkpoint violation detected, but skipped!");
+ }
+ }
// Reject block.nVersion < 3 blocks since 95% threshold on mainNet and always on testNet:
if (nVersion < 3 && ((!fTestNet && nHeight > 14060) || (fTestNet && nHeight > 0)))
// ppcoin: check block signature
bool CBlock::CheckBlockSignature() const
{
- if (GetHash() == hashGenesisBlock)
+ if (GetHash() == (!fTestNet ? hashGenesisBlock : hashGenesisBlockTestNet))
return vchBlockSig.empty();
vector<valtype> vSolutions;
pchMessageStart[2] = 0xc0;
pchMessageStart[3] = 0xef;
-
- hashGenesisBlock = hashGenesisBlockTestNet;
- nStakeMinAge = 60 * 60 * 24; // test net min age is 1 day
- nCoinbaseMaturity = 60;
+ bnProofOfStakeLimit = bnProofOfStakeLimitTestNet; // 0x00000fff PoS base target is fixed in testnet
+ bnProofOfWorkLimit = bnProofOfWorkLimitTestNet; // 0x0000ffff PoW base target is fixed in testnet
+ nStakeMinAge = 2 * 60 * 60; // test net min age is 2 hours
+ nModifierInterval = 20 * 60; // test modifier interval is 20 minutes
+ nCoinbaseMaturity = 10; // test maturity is 10 blocks
+ nStakeTargetSpacing = 3 * 60; // test block spacing is 3 minutes
}
//
block.nVersion = 1;
block.nTime = 1360105017;
block.nBits = bnProofOfWorkLimit.GetCompact();
- block.nNonce = 1575379;
+ block.nNonce = !fTestNet ? 1575379 : 46534;
//// debug print
assert(block.hashMerkleRoot == uint256("0x4cb33b3b6a861dcbc685d3e614a9cafb945738d6833f182855679f2fad02057b"));
block.print();
- assert(block.GetHash() == hashGenesisBlock);
+ assert(block.GetHash() == (!fTestNet ? hashGenesisBlock : hashGenesisBlockTestNet));
assert(block.CheckBlock());
// Start new block file
return error("LoadBlockIndex() : genesis block not accepted");
// ppcoin: initialize synchronized checkpoint
- if (!Checkpoints::WriteSyncCheckpoint(hashGenesisBlock))
+ if (!Checkpoints::WriteSyncCheckpoint((!fTestNet ? hashGenesisBlock : hashGenesisBlockTestNet)))
return error("LoadBlockIndex() : failed to init sync checkpoint");
}
if (GetBoolArg("-testsafemode"))
strRPC = "test";
-/*
+
// ppcoin: wallet lock warning for minting
if (strMintWarning != "")
{
nPriority = 0;
strStatusBar = strMintWarning;
}
-*/
// Misc warnings like out of disk space and clock is wrong
if (strMiscWarning != "")
// Add our coinbase tx as first transaction
pblock->vtx.push_back(txNew);
-
-
// Largest block you're willing to create:
unsigned int nBlockMaxSize = GetArg("-blockmaxsize", MAX_BLOCK_SIZE_GEN/2);
// Limit to betweeen 1K and MAX_BLOCK_SIZE-1K for sanity:
static int64 nLastCoinStakeSearchTime = GetAdjustedTime(); // only initialized at startup
CBlockIndex* pindexPrev = pindexBest;
- if (fProofOfStake) // attemp to find a coinstake
+ if (fProofOfStake) // attempt to find a coinstake
{
pblock->nBits = GetNextTargetRequired(pindexPrev, true);
CTransaction txCoinStake;
static const int64 MIN_RELAY_TX_FEE = CENT;
static const int64 MAX_MONEY = 2000000000 * COIN;
static const int64 MAX_MINT_PROOF_OF_WORK = 100 * COIN;
+static const int64 MAX_MINT_PROOF_OF_STAKE = 1 * COIN;
static const int64 MIN_TXOUT_AMOUNT = MIN_TX_FEE;
+static const unsigned int PROTOCOL_SWITCH_TIME = 1371686400; // 20 Jun 2013 00:00:00
+
inline bool MoneyRange(int64 nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); }
// Threshold for nLockTime: below this value it is interpreted as block number, otherwise as UNIX timestamp.
static const unsigned int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20 1985 UTC
static const int fHaveUPnP = false;
#endif
-static const uint256 hashGenesisBlockOfficial("0x00000a060336cbb72fe969666d337b87198b1add2abaa59cca226820b32933a4");
-static const uint256 hashGenesisBlockTestNet("0x00000a060336cbb72fe969666d337b87198b1add2abaa59cca226820b32933a4");
+static const uint256 hashGenesisBlock("0x00000a060336cbb72fe969666d337b87198b1add2abaa59cca226820b32933a4");
+static const uint256 hashGenesisBlockTestNet("0x000c763e402f2436da9ed36c7286f62c3f6e5dbafce9ff289bd43d7459327eb");
static const int64 nMaxClockDrift = 2 * 60 * 60; // two hours
extern CScript COINBASE_FLAGS;
-
-
-
-
extern CCriticalSection cs_main;
extern std::map<uint256, CBlockIndex*> mapBlockIndex;
extern std::set<std::pair<COutPoint, unsigned int> > setStakeSeen;
-extern uint256 hashGenesisBlock;
extern CBlockIndex* pindexGenesisBlock;
extern unsigned int nStakeMinAge;
extern int nCoinbaseMaturity;
bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey);
bool CheckProofOfWork(uint256 hash, unsigned int nBits);
int64 GetProofOfWorkReward(unsigned int nBits);
-int64 GetProofOfStakeReward(int64 nCoinAge);
+int64 GetProofOfStakeReward(int64 nCoinAge, unsigned int nBits, unsigned int nTime);
unsigned int ComputeMinWork(unsigned int nBase, int64 nTime);
int GetNumBlocksOfPeers();
bool IsInitialBlockDownload();
{
public:
// header
- static const int CURRENT_VERSION=3;
+ static const int CURRENT_VERSION=4;
int nVersion;
uint256 hashPrevBlock;
uint256 hashMerkleRoot;
unsigned int GetStakeEntropyBit(unsigned int nHeight) const
{
// Protocol switch to support p2pool at novacoin block #9689
- if (nHeight >= 9689)
+ if (nHeight >= 9689 || fTestNet)
{
// Take last bit of block hash as entropy bit
unsigned int nEntropyBit = ((GetHash().Get64()) & 1llu);
void print() const
{
printf("CBlock(hash=%s, ver=%d, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%"PRIszu", vchBlockSig=%s)\n",
- GetHash().ToString().substr(0,20).c_str(),
+ GetHash().ToString().c_str(),
nVersion,
- hashPrevBlock.ToString().substr(0,20).c_str(),
- hashMerkleRoot.ToString().substr(0,10).c_str(),
+ hashPrevBlock.ToString().c_str(),
+ hashMerkleRoot.ToString().c_str(),
nTime, nBits, nNonce,
vtx.size(),
HexStr(vchBlockSig.begin(), vchBlockSig.end()).c_str());
nStakeModifier, nStakeModifierChecksum,
hashProofOfStake.ToString().c_str(),
prevoutStake.ToString().c_str(), nStakeTime,
- hashMerkleRoot.ToString().substr(0,10).c_str(),
- GetBlockHash().ToString().substr(0,20).c_str());
+ hashMerkleRoot.ToString().c_str(),
+ GetBlockHash().ToString().c_str());
}
void print() const
str += CBlockIndex::ToString();
str += strprintf("\n hashBlock=%s, hashPrev=%s, hashNext=%s)",
GetBlockHash().ToString().c_str(),
- hashPrev.ToString().substr(0,20).c_str(),
- hashNext.ToString().substr(0,20).c_str());
+ hashPrev.ToString().c_str(),
+ hashNext.ToString().c_str());
return str;
}
if (vHave.size() > 10)
nStep *= 2;
}
- vHave.push_back(hashGenesisBlock);
+ vHave.push_back((!fTestNet ? hashGenesisBlock : hashGenesisBlockTestNet));
}
int GetDistanceBack()
return hash;
}
}
- return hashGenesisBlock;
+ return (!fTestNet ? hashGenesisBlock : hashGenesisBlockTestNet);
}
int GetHeight()
-L"C:\openssl-1.0.1c-mgw"
LIBS= \
- -l boost_system-mgw45-mt-s-1_50 \
- -l boost_filesystem-mgw45-mt-s-1_50 \
- -l boost_program_options-mgw45-mt-s-1_50 \
- -l boost_thread-mgw45-mt-s-1_50 \
- -l boost_chrono-mgw45-mt-s-1_50 \
+ -l boost_system-mgw44-mt-1_53 \
+ -l boost_filesystem-mgw44-mt-1_53 \
+ -l boost_program_options-mgw44-mt-1_53 \
+ -l boost_thread-mgw44-mt-1_53 \
+ -l boost_chrono-mgw44-mt-1_53 \
-l db_cxx \
-l ssl \
-l crypto
using namespace std;
using namespace boost;
-static const int MAX_OUTBOUND_CONNECTIONS = 8;
+static const int MAX_OUTBOUND_CONNECTIONS = 16;
void ThreadMessageHandler2(void* parg);
void ThreadSocketHandler2(void* parg);
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>SendCoinsEntry</class>
- <widget class="QFrame" name="SendCoinsEntry">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>729</width>
- <height>136</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Form</string>
- </property>
- <property name="frameShape">
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Sunken</enum>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <property name="spacing">
- <number>12</number>
- </property>
- <item row="5" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>A&mount:</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- <property name="buddy">
- <cstring>payAmount</cstring>
- </property>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Pay &To:</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- <property name="buddy">
- <cstring>payTo</cstring>
- </property>
- </widget>
- </item>
- <item row="5" column="1">
- <widget class="BitcoinAmountField" name="payAmount"/>
- </item>
- <item row="4" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <widget class="QValidatedLineEdit" name="addAsLabel">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="toolTip">
- <string>Enter a label for this address to add it to your address book</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>&Label:</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- <property name="buddy">
- <cstring>addAsLabel</cstring>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <layout class="QHBoxLayout" name="payToLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <widget class="QValidatedLineEdit" name="payTo">
- <property name="toolTip">
- <string>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</string>
- </property>
- <property name="maxLength">
- <number>34</number>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="addressBookButton">
- <property name="toolTip">
- <string>Choose address from address book</string>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="icon">
- <iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/address-book</normaloff>:/icons/address-book</iconset>
- </property>
- <property name="shortcut">
- <string>Alt+A</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="pasteButton">
- <property name="toolTip">
- <string>Paste address from clipboard</string>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="icon">
- <iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/editpaste</normaloff>:/icons/editpaste</iconset>
- </property>
- <property name="shortcut">
- <string>Alt+P</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="deleteButton">
- <property name="toolTip">
- <string>Remove this recipient</string>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="icon">
- <iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/remove</normaloff>:/icons/remove</iconset>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <customwidgets>
- <customwidget>
- <class>BitcoinAmountField</class>
- <extends>QLineEdit</extends>
- <header>bitcoinamountfield.h</header>
- <container>1</container>
- </customwidget>
- <customwidget>
- <class>QValidatedLineEdit</class>
- <extends>QLineEdit</extends>
- <header>qvalidatedlineedit.h</header>
- </customwidget>
- </customwidgets>
- <resources>
- <include location="../bitcoin.qrc"/>
- </resources>
- <connections/>
-</ui>
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ui version="4.0">\r
+ <class>SendCoinsEntry</class>\r
+ <widget class="QFrame" name="SendCoinsEntry">\r
+ <property name="geometry">\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>729</width>\r
+ <height>136</height>\r
+ </rect>\r
+ </property>\r
+ <property name="windowTitle">\r
+ <string>Form</string>\r
+ </property>\r
+ <property name="frameShape">\r
+ <enum>QFrame::StyledPanel</enum>\r
+ </property>\r
+ <property name="frameShadow">\r
+ <enum>QFrame::Sunken</enum>\r
+ </property>\r
+ <layout class="QGridLayout" name="gridLayout">\r
+ <property name="spacing">\r
+ <number>12</number>\r
+ </property>\r
+ <item row="5" column="0">\r
+ <widget class="QLabel" name="label">\r
+ <property name="text">\r
+ <string>A&mount:</string>\r
+ </property>\r
+ <property name="alignment">\r
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>\r
+ </property>\r
+ <property name="buddy">\r
+ <cstring>payAmount</cstring>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="3" column="0">\r
+ <widget class="QLabel" name="label_2">\r
+ <property name="text">\r
+ <string>Pay &To:</string>\r
+ </property>\r
+ <property name="alignment">\r
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>\r
+ </property>\r
+ <property name="buddy">\r
+ <cstring>payTo</cstring>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="5" column="1">\r
+ <widget class="BitcoinAmountField" name="payAmount"/>\r
+ </item>\r
+ <item row="4" column="1">\r
+ <layout class="QHBoxLayout" name="horizontalLayout_2">\r
+ <property name="spacing">\r
+ <number>0</number>\r
+ </property>\r
+ <item>\r
+ <widget class="QValidatedLineEdit" name="addAsLabel">\r
+ <property name="enabled">\r
+ <bool>true</bool>\r
+ </property>\r
+ <property name="toolTip">\r
+ <string>Enter a label for this address to add it to your address book</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ <item row="4" column="0">\r
+ <widget class="QLabel" name="label_4">\r
+ <property name="text">\r
+ <string>&Label:</string>\r
+ </property>\r
+ <property name="alignment">\r
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>\r
+ </property>\r
+ <property name="buddy">\r
+ <cstring>addAsLabel</cstring>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item row="3" column="1">\r
+ <layout class="QHBoxLayout" name="payToLayout">\r
+ <property name="spacing">\r
+ <number>0</number>\r
+ </property>\r
+ <item>\r
+ <widget class="QValidatedLineEdit" name="payTo">\r
+ <property name="toolTip">\r
+ <string>The address to send the payment to (e.g. 4Zo1ga6xuKuQ7JV7M9rGDoxdbYwV5zgQJ5)</string>\r
+ </property>\r
+ <property name="maxLength">\r
+ <number>34</number>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QToolButton" name="addressBookButton">\r
+ <property name="toolTip">\r
+ <string>Choose address from address book</string>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="icon">\r
+ <iconset resource="../bitcoin.qrc">\r
+ <normaloff>:/icons/address-book</normaloff>:/icons/address-book</iconset>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Alt+A</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QToolButton" name="pasteButton">\r
+ <property name="toolTip">\r
+ <string>Paste address from clipboard</string>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="icon">\r
+ <iconset resource="../bitcoin.qrc">\r
+ <normaloff>:/icons/editpaste</normaloff>:/icons/editpaste</iconset>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Alt+P</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QToolButton" name="deleteButton">\r
+ <property name="toolTip">\r
+ <string>Remove this recipient</string>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="icon">\r
+ <iconset resource="../bitcoin.qrc">\r
+ <normaloff>:/icons/remove</normaloff>:/icons/remove</iconset>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ </layout>\r
+ </widget>\r
+ <customwidgets>\r
+ <customwidget>\r
+ <class>QValidatedLineEdit</class>\r
+ <extends>QLineEdit</extends>\r
+ <header>qvalidatedlineedit.h</header>\r
+ </customwidget>\r
+ <customwidget>\r
+ <class>BitcoinAmountField</class>\r
+ <extends>QLineEdit</extends>\r
+ <header>bitcoinamountfield.h</header>\r
+ <container>1</container>\r
+ </customwidget>\r
+ </customwidgets>\r
+ <resources>\r
+ <include location="../bitcoin.qrc"/>\r
+ </resources>\r
+ <connections/>\r
+</ui>\r
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>SignVerifyMessageDialog</class>
- <widget class="QDialog" name="SignVerifyMessageDialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>700</width>
- <height>380</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Signatures - Sign / Verify a Message</string>
- </property>
- <property name="modal">
- <bool>true</bool>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="QTabWidget" name="tabWidget">
- <property name="currentIndex">
- <number>0</number>
- </property>
- <widget class="QWidget" name="tabSignMessage">
- <attribute name="title">
- <string>&Sign Message</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_SM">
- <item>
- <widget class="QLabel" name="infoLabel_SM">
- <property name="text">
- <string>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</string>
- </property>
- <property name="textFormat">
- <enum>Qt::PlainText</enum>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_1_SM">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <widget class="QValidatedLineEdit" name="addressIn_SM">
- <property name="toolTip">
- <string>The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</string>
- </property>
- <property name="maxLength">
- <number>34</number>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="addressBookButton_SM">
- <property name="toolTip">
- <string>Choose an address from the address book</string>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="icon">
- <iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/address-book</normaloff>:/icons/address-book</iconset>
- </property>
- <property name="shortcut">
- <string>Alt+A</string>
- </property>
- <property name="autoDefault">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="pasteButton_SM">
- <property name="toolTip">
- <string>Paste address from clipboard</string>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="icon">
- <iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/editpaste</normaloff>:/icons/editpaste</iconset>
- </property>
- <property name="shortcut">
- <string>Alt+P</string>
- </property>
- <property name="autoDefault">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QPlainTextEdit" name="messageIn_SM">
- <property name="toolTip">
- <string>Enter the message you want to sign here</string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2_SM">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <widget class="QLineEdit" name="signatureOut_SM">
- <property name="font">
- <font>
- <italic>true</italic>
- </font>
- </property>
- <property name="readOnly">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="copySignatureButton_SM">
- <property name="toolTip">
- <string>Copy the current signature to the system clipboard</string>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="icon">
- <iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/editcopy</normaloff>:/icons/editcopy</iconset>
- </property>
- <property name="autoDefault">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_3_SM">
- <item>
- <widget class="QPushButton" name="signMessageButton_SM">
- <property name="toolTip">
- <string>Sign the message to prove you own this NovaCoin address</string>
- </property>
- <property name="text">
- <string>&Sign Message</string>
- </property>
- <property name="icon">
- <iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/edit</normaloff>:/icons/edit</iconset>
- </property>
- <property name="autoDefault">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="clearButton_SM">
- <property name="toolTip">
- <string>Reset all sign message fields</string>
- </property>
- <property name="text">
- <string>Clear &All</string>
- </property>
- <property name="icon">
- <iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/remove</normaloff>:/icons/remove</iconset>
- </property>
- <property name="autoDefault">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_1_SM">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>48</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="statusLabel_SM">
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_2_SM">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>48</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tabVerifyMessage">
- <attribute name="title">
- <string>&Verify Message</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_VM">
- <item>
- <widget class="QLabel" name="infoLabel_VM">
- <property name="text">
- <string>Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack.</string>
- </property>
- <property name="textFormat">
- <enum>Qt::PlainText</enum>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_1_VM">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <widget class="QValidatedLineEdit" name="addressIn_VM">
- <property name="toolTip">
- <string>The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</string>
- </property>
- <property name="maxLength">
- <number>34</number>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="addressBookButton_VM">
- <property name="toolTip">
- <string>Choose an address from the address book</string>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="icon">
- <iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/address-book</normaloff>:/icons/address-book</iconset>
- </property>
- <property name="shortcut">
- <string>Alt+A</string>
- </property>
- <property name="autoDefault">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QPlainTextEdit" name="messageIn_VM"/>
- </item>
- <item>
- <widget class="QValidatedLineEdit" name="signatureIn_VM"/>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2_VM">
- <item>
- <widget class="QPushButton" name="verifyMessageButton_VM">
- <property name="toolTip">
- <string>Verify the message to ensure it was signed with the specified NovaCoin address</string>
- </property>
- <property name="text">
- <string>&Verify Message</string>
- </property>
- <property name="icon">
- <iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/transaction_0</normaloff>:/icons/transaction_0</iconset>
- </property>
- <property name="autoDefault">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="clearButton_VM">
- <property name="toolTip">
- <string>Reset all verify message fields</string>
- </property>
- <property name="text">
- <string>Clear &All</string>
- </property>
- <property name="icon">
- <iconset resource="../bitcoin.qrc">
- <normaloff>:/icons/remove</normaloff>:/icons/remove</iconset>
- </property>
- <property name="autoDefault">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_1_VM">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>48</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="statusLabel_VM">
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_2_VM">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>48</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- <customwidgets>
- <customwidget>
- <class>QValidatedLineEdit</class>
- <extends>QLineEdit</extends>
- <header>qvalidatedlineedit.h</header>
- </customwidget>
- </customwidgets>
- <resources>
- <include location="../bitcoin.qrc"/>
- </resources>
- <connections/>
-</ui>
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ui version="4.0">\r
+ <class>SignVerifyMessageDialog</class>\r
+ <widget class="QDialog" name="SignVerifyMessageDialog">\r
+ <property name="geometry">\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>700</width>\r
+ <height>380</height>\r
+ </rect>\r
+ </property>\r
+ <property name="windowTitle">\r
+ <string>Signatures - Sign / Verify a Message</string>\r
+ </property>\r
+ <property name="modal">\r
+ <bool>true</bool>\r
+ </property>\r
+ <layout class="QVBoxLayout" name="verticalLayout">\r
+ <item>\r
+ <widget class="QTabWidget" name="tabWidget">\r
+ <property name="currentIndex">\r
+ <number>1</number>\r
+ </property>\r
+ <widget class="QWidget" name="tabSignMessage">\r
+ <attribute name="title">\r
+ <string>&Sign Message</string>\r
+ </attribute>\r
+ <layout class="QVBoxLayout" name="verticalLayout_SM">\r
+ <item>\r
+ <widget class="QLabel" name="infoLabel_SM">\r
+ <property name="text">\r
+ <string>You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</string>\r
+ </property>\r
+ <property name="textFormat">\r
+ <enum>Qt::PlainText</enum>\r
+ </property>\r
+ <property name="wordWrap">\r
+ <bool>true</bool>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <layout class="QHBoxLayout" name="horizontalLayout_1_SM">\r
+ <property name="spacing">\r
+ <number>0</number>\r
+ </property>\r
+ <item>\r
+ <widget class="QValidatedLineEdit" name="addressIn_SM">\r
+ <property name="toolTip">\r
+ <string>The address to sign the message with (e.g. 4Zo1ga6xuKuQ7JV7M9rGDoxdbYwV5zgQJ5)</string>\r
+ </property>\r
+ <property name="maxLength">\r
+ <number>34</number>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QPushButton" name="addressBookButton_SM">\r
+ <property name="toolTip">\r
+ <string>Choose an address from the address book</string>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="icon">\r
+ <iconset resource="../bitcoin.qrc">\r
+ <normaloff>:/icons/address-book</normaloff>:/icons/address-book</iconset>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Alt+A</string>\r
+ </property>\r
+ <property name="autoDefault">\r
+ <bool>false</bool>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QPushButton" name="pasteButton_SM">\r
+ <property name="toolTip">\r
+ <string>Paste address from clipboard</string>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="icon">\r
+ <iconset resource="../bitcoin.qrc">\r
+ <normaloff>:/icons/editpaste</normaloff>:/icons/editpaste</iconset>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Alt+P</string>\r
+ </property>\r
+ <property name="autoDefault">\r
+ <bool>false</bool>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ <item>\r
+ <widget class="QPlainTextEdit" name="messageIn_SM">\r
+ <property name="toolTip">\r
+ <string>Enter the message you want to sign here</string>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <layout class="QHBoxLayout" name="horizontalLayout_2_SM">\r
+ <property name="spacing">\r
+ <number>0</number>\r
+ </property>\r
+ <item>\r
+ <widget class="QLineEdit" name="signatureOut_SM">\r
+ <property name="font">\r
+ <font>\r
+ <italic>true</italic>\r
+ </font>\r
+ </property>\r
+ <property name="readOnly">\r
+ <bool>true</bool>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QPushButton" name="copySignatureButton_SM">\r
+ <property name="toolTip">\r
+ <string>Copy the current signature to the system clipboard</string>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="icon">\r
+ <iconset resource="../bitcoin.qrc">\r
+ <normaloff>:/icons/editcopy</normaloff>:/icons/editcopy</iconset>\r
+ </property>\r
+ <property name="autoDefault">\r
+ <bool>false</bool>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ <item>\r
+ <layout class="QHBoxLayout" name="horizontalLayout_3_SM">\r
+ <item>\r
+ <widget class="QPushButton" name="signMessageButton_SM">\r
+ <property name="toolTip">\r
+ <string>Sign the message to prove you own this NovaCoin address</string>\r
+ </property>\r
+ <property name="text">\r
+ <string>&Sign Message</string>\r
+ </property>\r
+ <property name="icon">\r
+ <iconset resource="../bitcoin.qrc">\r
+ <normaloff>:/icons/edit</normaloff>:/icons/edit</iconset>\r
+ </property>\r
+ <property name="autoDefault">\r
+ <bool>false</bool>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QPushButton" name="clearButton_SM">\r
+ <property name="toolTip">\r
+ <string>Reset all sign message fields</string>\r
+ </property>\r
+ <property name="text">\r
+ <string>Clear &All</string>\r
+ </property>\r
+ <property name="icon">\r
+ <iconset resource="../bitcoin.qrc">\r
+ <normaloff>:/icons/remove</normaloff>:/icons/remove</iconset>\r
+ </property>\r
+ <property name="autoDefault">\r
+ <bool>false</bool>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <spacer name="horizontalSpacer_1_SM">\r
+ <property name="orientation">\r
+ <enum>Qt::Horizontal</enum>\r
+ </property>\r
+ <property name="sizeHint" stdset="0">\r
+ <size>\r
+ <width>40</width>\r
+ <height>48</height>\r
+ </size>\r
+ </property>\r
+ </spacer>\r
+ </item>\r
+ <item>\r
+ <widget class="QLabel" name="statusLabel_SM">\r
+ <property name="font">\r
+ <font>\r
+ <weight>75</weight>\r
+ <bold>true</bold>\r
+ </font>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="wordWrap">\r
+ <bool>true</bool>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <spacer name="horizontalSpacer_2_SM">\r
+ <property name="orientation">\r
+ <enum>Qt::Horizontal</enum>\r
+ </property>\r
+ <property name="sizeHint" stdset="0">\r
+ <size>\r
+ <width>40</width>\r
+ <height>48</height>\r
+ </size>\r
+ </property>\r
+ </spacer>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ </layout>\r
+ </widget>\r
+ <widget class="QWidget" name="tabVerifyMessage">\r
+ <attribute name="title">\r
+ <string>&Verify Message</string>\r
+ </attribute>\r
+ <layout class="QVBoxLayout" name="verticalLayout_VM">\r
+ <item>\r
+ <widget class="QLabel" name="infoLabel_VM">\r
+ <property name="text">\r
+ <string>Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack.</string>\r
+ </property>\r
+ <property name="textFormat">\r
+ <enum>Qt::PlainText</enum>\r
+ </property>\r
+ <property name="alignment">\r
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>\r
+ </property>\r
+ <property name="wordWrap">\r
+ <bool>true</bool>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <layout class="QHBoxLayout" name="horizontalLayout_1_VM">\r
+ <property name="spacing">\r
+ <number>0</number>\r
+ </property>\r
+ <item>\r
+ <widget class="QValidatedLineEdit" name="addressIn_VM">\r
+ <property name="toolTip">\r
+ <string>The address the message was signed with (e.g. 4Zo1ga6xuKuQ7JV7M9rGDoxdbYwV5zgQJ5)</string>\r
+ </property>\r
+ <property name="maxLength">\r
+ <number>34</number>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QPushButton" name="addressBookButton_VM">\r
+ <property name="toolTip">\r
+ <string>Choose an address from the address book</string>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="icon">\r
+ <iconset resource="../bitcoin.qrc">\r
+ <normaloff>:/icons/address-book</normaloff>:/icons/address-book</iconset>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Alt+A</string>\r
+ </property>\r
+ <property name="autoDefault">\r
+ <bool>false</bool>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ <item>\r
+ <widget class="QPlainTextEdit" name="messageIn_VM"/>\r
+ </item>\r
+ <item>\r
+ <widget class="QValidatedLineEdit" name="signatureIn_VM"/>\r
+ </item>\r
+ <item>\r
+ <layout class="QHBoxLayout" name="horizontalLayout_2_VM">\r
+ <item>\r
+ <widget class="QPushButton" name="verifyMessageButton_VM">\r
+ <property name="toolTip">\r
+ <string>Verify the message to ensure it was signed with the specified NovaCoin address</string>\r
+ </property>\r
+ <property name="text">\r
+ <string>&Verify Message</string>\r
+ </property>\r
+ <property name="icon">\r
+ <iconset resource="../bitcoin.qrc">\r
+ <normaloff>:/icons/transaction_0</normaloff>:/icons/transaction_0</iconset>\r
+ </property>\r
+ <property name="autoDefault">\r
+ <bool>false</bool>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <widget class="QPushButton" name="clearButton_VM">\r
+ <property name="toolTip">\r
+ <string>Reset all verify message fields</string>\r
+ </property>\r
+ <property name="text">\r
+ <string>Clear &All</string>\r
+ </property>\r
+ <property name="icon">\r
+ <iconset resource="../bitcoin.qrc">\r
+ <normaloff>:/icons/remove</normaloff>:/icons/remove</iconset>\r
+ </property>\r
+ <property name="autoDefault">\r
+ <bool>false</bool>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <spacer name="horizontalSpacer_1_VM">\r
+ <property name="orientation">\r
+ <enum>Qt::Horizontal</enum>\r
+ </property>\r
+ <property name="sizeHint" stdset="0">\r
+ <size>\r
+ <width>40</width>\r
+ <height>48</height>\r
+ </size>\r
+ </property>\r
+ </spacer>\r
+ </item>\r
+ <item>\r
+ <widget class="QLabel" name="statusLabel_VM">\r
+ <property name="font">\r
+ <font>\r
+ <weight>75</weight>\r
+ <bold>true</bold>\r
+ </font>\r
+ </property>\r
+ <property name="text">\r
+ <string/>\r
+ </property>\r
+ <property name="wordWrap">\r
+ <bool>true</bool>\r
+ </property>\r
+ </widget>\r
+ </item>\r
+ <item>\r
+ <spacer name="horizontalSpacer_2_VM">\r
+ <property name="orientation">\r
+ <enum>Qt::Horizontal</enum>\r
+ </property>\r
+ <property name="sizeHint" stdset="0">\r
+ <size>\r
+ <width>40</width>\r
+ <height>48</height>\r
+ </size>\r
+ </property>\r
+ </spacer>\r
+ </item>\r
+ </layout>\r
+ </item>\r
+ </layout>\r
+ </widget>\r
+ </widget>\r
+ </item>\r
+ </layout>\r
+ </widget>\r
+ <customwidgets>\r
+ <customwidget>\r
+ <class>QValidatedLineEdit</class>\r
+ <extends>QLineEdit</extends>\r
+ <header>qvalidatedlineedit.h</header>\r
+ </customwidget>\r
+ </customwidgets>\r
+ <resources>\r
+ <include location="../bitcoin.qrc"/>\r
+ </resources>\r
+ <connections/>\r
+</ui>\r
strHTML += "<b>" + tr("Transaction ID") + ":</b> " + wtx.GetHash().ToString().c_str() + "<br>";
- if (wtx.IsCoinBase())
+ if (wtx.IsCoinBase() || wtx.IsCoinStake())
strHTML += "<br>" + tr("Generated coins must mature 520 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to \"not accepted\" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.") + "<br>";
- if (wtx.IsCoinStake())
- strHTML += QString("<br>") + tr("Staked coins must wait 520 blocks before they can return to balance and be spent. When you generated this proof-of-stake block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, it will change to \"not accepted\" and not be a valid stake. This may occasionally happen if another node generates a proof-of-stake block within a few seconds of yours.") + "<br>";
//
// Debug view
uint256 hash = wtx.GetHash();
std::map<std::string, std::string> mapValue = wtx.mapValue;
- if (nNet > 0 || wtx.IsCoinBase())
+ if (wtx.IsCoinStake())
+ {
+ // Stake generation
+ parts.append(TransactionRecord(hash, nTime, TransactionRecord::StakeMint, "", -nDebit, wtx.GetValueOut()));
+ }
+ else if (nNet > 0 || wtx.IsCoinBase())
{
//
// Credit
}
// For generated transactions, determine maturity
- if(type == TransactionRecord::Generated)
+ if(type == TransactionRecord::Generated || type == TransactionRecord::StakeMint)
{
int64 nCredit = wtx.GetCredit(true);
if (nCredit == 0)
SendToOther,
RecvWithAddress,
RecvFromOther,
- SendToSelf
+ SendToSelf,
+ StakeMint
};
/** Number of confirmation needed for transaction */
status = tr("Confirmed (%1 confirmations)").arg(wtx->status.depth);
break;
}
- if(wtx->type == TransactionRecord::Generated)
+ if(wtx->type == TransactionRecord::Generated || wtx->type == TransactionRecord::StakeMint)
{
switch(wtx->status.maturity)
{
return tr("Sent to");
case TransactionRecord::SendToSelf:
return tr("Payment to yourself");
+ case TransactionRecord::StakeMint:
case TransactionRecord::Generated:
return tr("Mined");
default:
switch(wtx->type)
{
case TransactionRecord::Generated:
+ case TransactionRecord::StakeMint:
return QIcon(":/icons/tx_mined");
case TransactionRecord::RecvWithAddress:
case TransactionRecord::RecvFromOther:
QVariant TransactionTableModel::txStatusDecoration(const TransactionRecord *wtx) const
{
- if(wtx->type == TransactionRecord::Generated)
+ if(wtx->type == TransactionRecord::Generated || wtx->type == TransactionRecord::StakeMint)
{
switch(wtx->status.maturity)
{
return QString::fromStdString(rec->getTxID());
case ConfirmedRole:
// Return True if transaction counts for balance
- return rec->status.confirmed && !(rec->type == TransactionRecord::Generated &&
+ return rec->status.confirmed && !((rec->type == TransactionRecord::Generated || rec->type == TransactionRecord::StakeMint) &&
rec->status.maturity != TransactionStatus::Mature);
case FormattedAmountRole:
return formatTxAmount(rec, false);
typeWidget->addItem(tr("Sent to"), TransactionFilterProxy::TYPE(TransactionRecord::SendToAddress) |
TransactionFilterProxy::TYPE(TransactionRecord::SendToOther));
typeWidget->addItem(tr("To yourself"), TransactionFilterProxy::TYPE(TransactionRecord::SendToSelf));
+ typeWidget->addItem(tr("Mined"), TransactionFilterProxy::TYPE(TransactionRecord::StakeMint));
typeWidget->addItem(tr("Mined"), TransactionFilterProxy::TYPE(TransactionRecord::Generated));
typeWidget->addItem(tr("Other"), TransactionFilterProxy::TYPE(TransactionRecord::Other));
path = GetDefaultDataDir();
}
if (fNetSpecific && GetBoolArg("-testnet", false))
- path /= "testnet";
+ path /= "testnet2";
fs::create_directory(path);
// network protocol versioning
//
-static const int PROTOCOL_VERSION = 60005;
+static const int PROTOCOL_VERSION = 60006;
// earlier versions not supported as of Feb 2012, and are disconnected
static const int MIN_PROTO_VERSION = 209;
#define DISPLAY_VERSION_MAJOR 0
#define DISPLAY_VERSION_MINOR 4
-#define DISPLAY_VERSION_REVISION 0
+#define DISPLAY_VERSION_REVISION 1
#define DISPLAY_VERSION_BUILD 0
#endif
CTxDB txdb("r");
if (!txNew.GetCoinAge(txdb, nCoinAge))
return error("CreateCoinStake : failed to calculate coin age");
- nCredit += GetProofOfStakeReward(nCoinAge);
+ nCredit += GetProofOfStakeReward(nCoinAge, nBits, txNew.nTime);
}
int64 nMinFee = 0;
CWalletDB walletdb(strWalletFile);
walletdb.ErasePool(nIndex);
}
- printf("keypool keep %"PRI64d"\n", nIndex);
+ if(fDebug)
+ printf("keypool keep %"PRI64d"\n", nIndex);
}
void CWallet::ReturnKey(int64 nIndex)
LOCK(cs_wallet);
setKeyPool.insert(nIndex);
}
- printf("keypool return %"PRI64d"\n", nIndex);
+ if(fDebug)
+ printf("keypool return %"PRI64d"\n", nIndex);
}
bool CWallet::GetKeyFromPool(CPubKey& result, bool fAllowReuse)