mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-20 11:05:54 +00:00
.
This commit is contained in:
@@ -35,6 +35,7 @@ Application::Application()
|
|||||||
void Application::run()
|
void Application::run()
|
||||||
{
|
{
|
||||||
theApp->setDB(new SqliteDatabase("data.db"));
|
theApp->setDB(new SqliteDatabase("data.db"));
|
||||||
|
mDatabase->connect();
|
||||||
|
|
||||||
if(theConfig.PEER_PORT)
|
if(theConfig.PEER_PORT)
|
||||||
{
|
{
|
||||||
|
|||||||
42
Convertion.cpp
Normal file
42
Convertion.cpp
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
#include "Convertion.h"
|
||||||
|
#include "base58.h"
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
uint160 protobufTo160(const std::string& buf)
|
||||||
|
{
|
||||||
|
uint160 ret;
|
||||||
|
// TODO:
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint256 protobufTo256(const std::string& hash)
|
||||||
|
{
|
||||||
|
uint256 ret;
|
||||||
|
// TODO:
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint160 humanTo160(const std::string& buf)
|
||||||
|
{
|
||||||
|
vector<unsigned char> retVec;
|
||||||
|
DecodeBase58(buf,retVec);
|
||||||
|
uint160 ret;
|
||||||
|
for(unsigned int n=0; n<retVec.size(); n++)
|
||||||
|
{
|
||||||
|
if(n>=ret.GetSerializeSize()) break;
|
||||||
|
ret.begin()[n]=retVec[n];
|
||||||
|
}
|
||||||
|
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool humanToPK(const std::string& buf,std::vector<unsigned char>& retVec)
|
||||||
|
{
|
||||||
|
return(DecodeBase58(buf,retVec));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool u160ToHuman(uint160& buf, std::string& retStr)
|
||||||
|
{
|
||||||
|
retStr=EncodeBase58(buf.begin(),buf.end());
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
11
Convertion.h
Normal file
11
Convertion.h
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#include "uint256.h"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
extern uint160 protobufTo160(const std::string& buf);
|
||||||
|
extern uint256 protobufTo256(const std::string& hash);
|
||||||
|
extern uint160 humanTo160(const std::string& buf);
|
||||||
|
extern bool humanToPK(const std::string& buf,std::vector<unsigned char>& retVec);
|
||||||
|
|
||||||
|
|
||||||
|
extern bool u160ToHuman(uint160& buf, std::string& retStr);
|
||||||
|
|
||||||
23
Ledger.cpp
23
Ledger.cpp
@@ -3,6 +3,7 @@
|
|||||||
#include "PackedMessage.h"
|
#include "PackedMessage.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
|
#include "Convertion.h"
|
||||||
#include "BitcoinUtil.h"
|
#include "BitcoinUtil.h"
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@@ -70,13 +71,13 @@ void Ledger::setTo(newcoin::FullLedger& ledger)
|
|||||||
mValidSig=false;
|
mValidSig=false;
|
||||||
mValidHash=false;
|
mValidHash=false;
|
||||||
|
|
||||||
mParentHash=Transaction::protobufToInternalHash(ledger.parenthash());
|
mParentHash=protobufTo256(ledger.parenthash());
|
||||||
|
|
||||||
int numAccounts=ledger.accounts_size();
|
int numAccounts=ledger.accounts_size();
|
||||||
for(int n=0; n<numAccounts; n++)
|
for(int n=0; n<numAccounts; n++)
|
||||||
{
|
{
|
||||||
const newcoin::Account& account=ledger.accounts(n);
|
const newcoin::Account& account=ledger.accounts(n);
|
||||||
mAccounts[ NewcoinAddress::protobufToInternal(account.address()) ] = Account(account.amount(),account.seqnum());
|
mAccounts[ protobufTo160(account.address()) ] = Account(account.amount(),account.seqnum());
|
||||||
}
|
}
|
||||||
|
|
||||||
int numTrans=ledger.transactions_size();
|
int numTrans=ledger.transactions_size();
|
||||||
@@ -297,7 +298,7 @@ bool Ledger::addTransaction(TransactionPtr trans,bool checkDuplicate)
|
|||||||
|
|
||||||
if(mParent)
|
if(mParent)
|
||||||
{ // check the lineage of the from addresses
|
{ // check the lineage of the from addresses
|
||||||
uint160 address=NewcoinAddress::protobufToInternal(trans->from());
|
uint160 address=protobufTo160(trans->from());
|
||||||
if(mAccounts.count(address))
|
if(mAccounts.count(address))
|
||||||
{
|
{
|
||||||
pair<uint64,uint32> account=mAccounts[address];
|
pair<uint64,uint32> account=mAccounts[address];
|
||||||
@@ -309,7 +310,7 @@ bool Ledger::addTransaction(TransactionPtr trans,bool checkDuplicate)
|
|||||||
mAccounts[address]=account;
|
mAccounts[address]=account;
|
||||||
|
|
||||||
|
|
||||||
uint160 destAddress=NewcoinAddress::protobufToInternal(trans->dest());
|
uint160 destAddress=protobufTo160(trans->dest());
|
||||||
|
|
||||||
Account destAccount=mAccounts[destAddress];
|
Account destAccount=mAccounts[destAddress];
|
||||||
destAccount.first += trans->amount();
|
destAccount.first += trans->amount();
|
||||||
@@ -347,7 +348,7 @@ bool Ledger::addTransaction(TransactionPtr trans,bool checkDuplicate)
|
|||||||
// Don't check the amounts. We will do this at the end.
|
// Don't check the amounts. We will do this at the end.
|
||||||
void Ledger::addTransactionAllowNeg(TransactionPtr trans)
|
void Ledger::addTransactionAllowNeg(TransactionPtr trans)
|
||||||
{
|
{
|
||||||
uint160 fromAddress=NewcoinAddress::protobufToInternal(trans->from());
|
uint160 fromAddress=protobufTo160(trans->from());
|
||||||
|
|
||||||
if(mAccounts.count(fromAddress))
|
if(mAccounts.count(fromAddress))
|
||||||
{
|
{
|
||||||
@@ -358,7 +359,7 @@ void Ledger::addTransactionAllowNeg(TransactionPtr trans)
|
|||||||
fromAccount.second++;
|
fromAccount.second++;
|
||||||
mAccounts[fromAddress]=fromAccount;
|
mAccounts[fromAddress]=fromAccount;
|
||||||
|
|
||||||
uint160 destAddress=NewcoinAddress::protobufToInternal(trans->dest());
|
uint160 destAddress=protobufTo160(trans->dest());
|
||||||
|
|
||||||
Account destAccount=mAccounts[destAddress];
|
Account destAccount=mAccounts[destAddress];
|
||||||
destAccount.first += trans->amount();
|
destAccount.first += trans->amount();
|
||||||
@@ -377,7 +378,7 @@ void Ledger::addTransactionAllowNeg(TransactionPtr trans)
|
|||||||
|
|
||||||
mAccounts[fromAddress]=Account(-((int64)trans->amount()),1);
|
mAccounts[fromAddress]=Account(-((int64)trans->amount()),1);
|
||||||
|
|
||||||
uint160 destAddress=NewcoinAddress::protobufToInternal(trans->dest());
|
uint160 destAddress=protobufTo160(trans->dest());
|
||||||
|
|
||||||
Account destAccount=mAccounts[destAddress];
|
Account destAccount=mAccounts[destAddress];
|
||||||
destAccount.first += trans->amount();
|
destAccount.first += trans->amount();
|
||||||
@@ -452,8 +453,8 @@ void Ledger::parentAddedTransaction(TransactionPtr cause)
|
|||||||
// an account to now be negative so we have to discard one
|
// an account to now be negative so we have to discard one
|
||||||
// a discarded transaction to be pulled back in
|
// a discarded transaction to be pulled back in
|
||||||
// seqnum invalidation
|
// seqnum invalidation
|
||||||
uint160 fromAddress=NewcoinAddress::protobufToInternal(cause->from());
|
uint160 fromAddress=protobufTo160(cause->from());
|
||||||
uint160 destAddress=NewcoinAddress::protobufToInternal(cause->dest());
|
uint160 destAddress=protobufTo160(cause->dest());
|
||||||
|
|
||||||
Account* fromAccount=getAccount(fromAddress);
|
Account* fromAccount=getAccount(fromAddress);
|
||||||
Account* destAccount=getAccount(destAddress);
|
Account* destAccount=getAccount(destAddress);
|
||||||
@@ -549,7 +550,7 @@ void Ledger::correctAccount(uint160& address)
|
|||||||
for( list<TransactionPtr>::reverse_iterator iter=mTransactions.rbegin(); iter != mTransactions.rend(); )
|
for( list<TransactionPtr>::reverse_iterator iter=mTransactions.rbegin(); iter != mTransactions.rend(); )
|
||||||
{
|
{
|
||||||
TransactionPtr trans= *iter;
|
TransactionPtr trans= *iter;
|
||||||
if(NewcoinAddress::protobufToInternal(trans->from()) == address)
|
if(protobufTo160(trans->from()) == address)
|
||||||
{
|
{
|
||||||
Account fromAccount=mAccounts[address];
|
Account fromAccount=mAccounts[address];
|
||||||
assert(fromAccount.second==trans->seqnum()+1);
|
assert(fromAccount.second==trans->seqnum()+1);
|
||||||
@@ -560,7 +561,7 @@ void Ledger::correctAccount(uint160& address)
|
|||||||
|
|
||||||
mAccounts[address]=fromAccount;
|
mAccounts[address]=fromAccount;
|
||||||
|
|
||||||
uint160 destAddress=NewcoinAddress::protobufToInternal(trans->dest());
|
uint160 destAddress=protobufTo160(trans->dest());
|
||||||
Account destAccount=mAccounts[destAddress];
|
Account destAccount=mAccounts[destAddress];
|
||||||
destAccount.first -= trans->amount();
|
destAccount.first -= trans->amount();
|
||||||
mAccounts[destAddress]=destAccount;
|
mAccounts[destAddress]=destAccount;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "LedgerMaster.h"
|
#include "LedgerMaster.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include "NewcoinAddress.h"
|
#include "NewcoinAddress.h"
|
||||||
|
#include "Convertion.h"
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@@ -32,7 +33,7 @@ int64 LedgerMaster::getAmountHeld(uint160& addr)
|
|||||||
|
|
||||||
int64 LedgerMaster::getAmountHeld(std::string& addr)
|
int64 LedgerMaster::getAmountHeld(std::string& addr)
|
||||||
{
|
{
|
||||||
return(mCurrentLedger->getAmountHeld(NewcoinAddress::humanToInternal(addr)));
|
return(mCurrentLedger->getAmountHeld(humanTo160(addr)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -59,7 +60,7 @@ bool LedgerMaster::isValidTransaction(TransactionPtr trans)
|
|||||||
if(trans->from()==trans->dest()) return(false);
|
if(trans->from()==trans->dest()) return(false);
|
||||||
if(trans->amount()==0) return(false);
|
if(trans->amount()==0) return(false);
|
||||||
if(!Transaction::isSigValid(trans)) return(false);
|
if(!Transaction::isSigValid(trans)) return(false);
|
||||||
Ledger::Account* account=mCurrentLedger->getAccount( NewcoinAddress::protobufToInternal(trans->from()) );
|
Ledger::Account* account=mCurrentLedger->getAccount( protobufTo160(trans->from()) );
|
||||||
if(!account) return(false);
|
if(!account) return(false);
|
||||||
if(trans->seqnum() != (account->second+1) ) return(false); // TODO: do we need to save these?
|
if(trans->seqnum() != (account->second+1) ) return(false); // TODO: do we need to save these?
|
||||||
|
|
||||||
@@ -128,7 +129,7 @@ void LedgerMaster::addFullLedger(newcoin::FullLedger& ledger)
|
|||||||
{
|
{
|
||||||
// check if we already have this ledger
|
// check if we already have this ledger
|
||||||
// check that the hash is correct
|
// check that the hash is correct
|
||||||
uint256 inHash=Transaction::protobufToInternalHash(ledger.hash());
|
uint256 inHash=protobufTo256(ledger.hash());
|
||||||
Ledger::pointer existingLedger=mLedgerHistory.getLedger( inHash );
|
Ledger::pointer existingLedger=mLedgerHistory.getLedger( inHash );
|
||||||
if(existingLedger) return;
|
if(existingLedger) return;
|
||||||
|
|
||||||
@@ -214,7 +215,7 @@ void LedgerMaster::checkLedgerProposal(Peer::pointer peer, newcoin::ProposeLedge
|
|||||||
Ledger::pointer oldLedger=mLedgerHistory.getAcceptedLedger(otherLedger.ledgerindex());
|
Ledger::pointer oldLedger=mLedgerHistory.getAcceptedLedger(otherLedger.ledgerindex());
|
||||||
if(oldLedger)
|
if(oldLedger)
|
||||||
{
|
{
|
||||||
if( (oldLedger->getHash()!=Transaction::protobufToInternalHash(otherLedger.hash())) &&
|
if( (oldLedger->getHash()!=protobufTo256(otherLedger.hash())) &&
|
||||||
(oldLedger->getNumTransactions()>=otherLedger.numtransactions()))
|
(oldLedger->getNumTransactions()>=otherLedger.numtransactions()))
|
||||||
{
|
{
|
||||||
peer->sendLedgerProposal(oldLedger);
|
peer->sendLedgerProposal(oldLedger);
|
||||||
@@ -225,7 +226,7 @@ void LedgerMaster::checkLedgerProposal(Peer::pointer peer, newcoin::ProposeLedge
|
|||||||
addFutureProposal(peer,otherLedger);
|
addFutureProposal(peer,otherLedger);
|
||||||
}else
|
}else
|
||||||
{ // you guys are on the same page
|
{ // you guys are on the same page
|
||||||
uint256 otherHash=Transaction::protobufToInternalHash(otherLedger.hash());
|
uint256 otherHash=protobufTo256(otherLedger.hash());
|
||||||
if(mFinalizingLedger->getHash()!= otherHash)
|
if(mFinalizingLedger->getHash()!= otherHash)
|
||||||
{
|
{
|
||||||
if( mFinalizingLedger->getNumTransactions()>=otherLedger.numtransactions())
|
if( mFinalizingLedger->getNumTransactions()>=otherLedger.numtransactions())
|
||||||
|
|||||||
@@ -5,20 +5,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint160 NewcoinAddress::protobufToInternal(const std::string& buf)
|
|
||||||
{
|
|
||||||
uint160 ret;
|
|
||||||
// TODO:
|
|
||||||
return(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint160 NewcoinAddress::humanToInternal(const std::string& buf)
|
|
||||||
{
|
|
||||||
uint160 ret;
|
|
||||||
// TODO:
|
|
||||||
return(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool NewcoinAddress::SetHash160(const uint160& hash160)
|
bool NewcoinAddress::SetHash160(const uint160& hash160)
|
||||||
{
|
{
|
||||||
SetData(theConfig.TEST_NET ? 112 : 1, &hash160, 20);
|
SetData(theConfig.TEST_NET ? 112 : 1, &hash160, 20);
|
||||||
|
|||||||
@@ -21,8 +21,7 @@ public:
|
|||||||
|
|
||||||
uint160 GetHash160();
|
uint160 GetHash160();
|
||||||
|
|
||||||
static uint160 protobufToInternal(const std::string& buf);
|
|
||||||
static uint160 humanToInternal(const std::string& buf);
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
3
Peer.cpp
3
Peer.cpp
@@ -6,6 +6,7 @@
|
|||||||
//#include <boost/log/trivial.hpp>
|
//#include <boost/log/trivial.hpp>
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include "Convertion.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace boost;
|
using namespace boost;
|
||||||
@@ -279,7 +280,7 @@ void Peer::receiveHello(newcoin::Hello& packet)
|
|||||||
|
|
||||||
void Peer::receiveGetFullLedger(newcoin::GetFullLedger& gfl)
|
void Peer::receiveGetFullLedger(newcoin::GetFullLedger& gfl)
|
||||||
{
|
{
|
||||||
sendFullLedger(theApp->getLedgerMaster().getLedger(Transaction::protobufToInternalHash(gfl.hash())));
|
sendFullLedger(theApp->getLedgerMaster().getLedger(protobufTo256(gfl.hash())));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Peer::receiveValidation(newcoin::Validation& validation)
|
void Peer::receiveValidation(newcoin::Validation& validation)
|
||||||
|
|||||||
@@ -4,12 +4,12 @@
|
|||||||
#include "HttpReply.h"
|
#include "HttpReply.h"
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
//#include <boost/log/trivial.hpp>
|
//#include <boost/log/trivial.hpp>
|
||||||
|
#include "Application.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "json/json_spirit_reader_template.h"
|
#include "json/json_spirit_reader_template.h"
|
||||||
#include "json/json_spirit_writer_template.h"
|
#include "json/json_spirit_writer_template.h"
|
||||||
#include "RPC.h"
|
#include "RPC.h"
|
||||||
|
#include "Convertion.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace json_spirit;
|
using namespace json_spirit;
|
||||||
@@ -119,6 +119,23 @@ Value RPCServer::doCommand(std::string& command, Array& params)
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if(command== "addUNL")
|
||||||
|
{
|
||||||
|
if(params.size()==2)
|
||||||
|
{
|
||||||
|
uint160 hanko=humanTo160(params[0].get_str());
|
||||||
|
vector<unsigned char> pubKey;
|
||||||
|
humanToPK(params[1].get_str(),pubKey);
|
||||||
|
theApp->getUNL().addNode(hanko,pubKey);
|
||||||
|
return "adding node";
|
||||||
|
}else return "invalid params";
|
||||||
|
}
|
||||||
|
if(command=="getUNL")
|
||||||
|
{
|
||||||
|
string str;
|
||||||
|
theApp->getUNL().dumpUNL(str);
|
||||||
|
return(str.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
return "unknown command";
|
return "unknown command";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,12 +34,6 @@ uint256 Transaction::calcHash(TransactionPtr trans)
|
|||||||
return Hash(buffer.begin(), buffer.end());
|
return Hash(buffer.begin(), buffer.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
uint256 Transaction::protobufToInternalHash(const std::string& hash)
|
|
||||||
{
|
|
||||||
uint256 ret;
|
|
||||||
// TODO:
|
|
||||||
return(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Transaction::isSigValid(TransactionPtr trans)
|
bool Transaction::isSigValid(TransactionPtr trans)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public:
|
|||||||
static bool isEqual(TransactionPtr t1, TransactionPtr t2);
|
static bool isEqual(TransactionPtr t1, TransactionPtr t2);
|
||||||
static uint256 calcHash(TransactionPtr trans);
|
static uint256 calcHash(TransactionPtr trans);
|
||||||
|
|
||||||
static uint256 protobufToInternalHash(const std::string& hash);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#include "UniqueNodeList.h"
|
#include "UniqueNodeList.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
#include "Convertion.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
void UniqueNodeList::addNode(uint160& hanko, vector<unsigned char>& publicKey)
|
void UniqueNodeList::addNode(uint160& hanko, vector<unsigned char>& publicKey)
|
||||||
@@ -54,3 +56,25 @@ int UniqueNodeList::checkValid(newcoin::Validation& valid)
|
|||||||
return(0); // not on our list
|
return(0); // not on our list
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UniqueNodeList::dumpUNL(std::string& retStr)
|
||||||
|
{
|
||||||
|
Database* db=theApp->getDB();
|
||||||
|
string sql="SELECT * FROM UNL";
|
||||||
|
if( db->executeSQL(sql.c_str()) )
|
||||||
|
{
|
||||||
|
db->startIterRows();
|
||||||
|
while(db->getNextRow())
|
||||||
|
{
|
||||||
|
uint160 hanko;
|
||||||
|
int size=db->getBinary("Hanko",hanko.begin(),hanko.GetSerializeSize());
|
||||||
|
string tstr;
|
||||||
|
u160ToHuman(hanko,tstr);
|
||||||
|
|
||||||
|
retStr.append(tstr);
|
||||||
|
retStr.append("\n");
|
||||||
|
}
|
||||||
|
db->endIterRows();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ public:
|
|||||||
// 0- we don't care, 1- we care and is valid, 2-invalid signature
|
// 0- we don't care, 1- we care and is valid, 2-invalid signature
|
||||||
int checkValid(newcoin::Validation& valid);
|
int checkValid(newcoin::Validation& valid);
|
||||||
|
|
||||||
|
void dumpUNL(std::string& retStr);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include "NewcoinAddress.h"
|
#include "NewcoinAddress.h"
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
|
#include "Convertion.h"
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ bool ValidationCollection::hasValidation(uint256& ledgerHash,uint160& hanko,uint
|
|||||||
BOOST_FOREACH(newcoin::Validation& valid,mValidations[ledgerHash])
|
BOOST_FOREACH(newcoin::Validation& valid,mValidations[ledgerHash])
|
||||||
{
|
{
|
||||||
if( valid.seqnum()==seqnum &&
|
if( valid.seqnum()==seqnum &&
|
||||||
NewcoinAddress::protobufToInternal(valid.hanko()) == hanko) return(true);
|
protobufTo160(valid.hanko()) == hanko) return(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ bool ValidationCollection::hasValidation(uint256& ledgerHash,uint160& hanko,uint
|
|||||||
BOOST_FOREACH(newcoin::Validation& valid,mIgnoredValidations[ledgerHash])
|
BOOST_FOREACH(newcoin::Validation& valid,mIgnoredValidations[ledgerHash])
|
||||||
{
|
{
|
||||||
if( valid.seqnum()==seqnum &&
|
if( valid.seqnum()==seqnum &&
|
||||||
NewcoinAddress::protobufToInternal(valid.hanko()) == hanko) return(true);
|
protobufTo160(valid.hanko()) == hanko) return(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return(false);
|
return(false);
|
||||||
@@ -56,8 +56,8 @@ void ValidationCollection::addValidation(newcoin::Validation& valid)
|
|||||||
{
|
{
|
||||||
// TODO: make sure the validation is valid
|
// TODO: make sure the validation is valid
|
||||||
|
|
||||||
uint256 hash=Transaction::protobufToInternalHash(valid.hash());
|
uint256 hash=protobufTo256(valid.hash());
|
||||||
uint160 hanko=NewcoinAddress::protobufToInternal(valid.hanko());
|
uint160 hanko=protobufTo160(valid.hanko());
|
||||||
|
|
||||||
// make sure we don't already have this validation
|
// make sure we don't already have this validation
|
||||||
if(hasValidation(hash,hanko,valid.seqnum())) return;
|
if(hasValidation(hash,hanko,valid.seqnum())) return;
|
||||||
@@ -121,7 +121,7 @@ void ValidationCollection::addToGroup(newcoin::Validation& newValid)
|
|||||||
if(canReturn) return;
|
if(canReturn) return;
|
||||||
// this is a validation of a new ledger hash
|
// this is a validation of a new ledger hash
|
||||||
|
|
||||||
uint256 newHash=Transaction::protobufToInternalHash(newValid.hash());
|
uint256 newHash=protobufTo256(newValid.hash());
|
||||||
Ledger::pointer newLedger=theApp->getLedgerMaster().getLedger(newHash);
|
Ledger::pointer newLedger=theApp->getLedgerMaster().getLedger(newHash);
|
||||||
if(newLedger)
|
if(newLedger)
|
||||||
{ // see if this ledger is compatible with any groups
|
{ // see if this ledger is compatible with any groups
|
||||||
@@ -141,7 +141,7 @@ void ValidationCollection::addToGroup(newcoin::Validation& newValid)
|
|||||||
|
|
||||||
BOOST_FOREACH(newcoin::Validation& valid,mIndexValidations[newValid.ledgerindex()])
|
BOOST_FOREACH(newcoin::Validation& valid,mIndexValidations[newValid.ledgerindex()])
|
||||||
{
|
{
|
||||||
uint256 hash=Transaction::protobufToInternalHash(valid.hash());
|
uint256 hash=protobufTo256(valid.hash());
|
||||||
Ledger::pointer ledger=theApp->getLedgerMaster().getLedger(hash);
|
Ledger::pointer ledger=theApp->getLedgerMaster().getLedger(hash);
|
||||||
newGroup.addIfCompatible(ledger,valid);
|
newGroup.addIfCompatible(ledger,valid);
|
||||||
}
|
}
|
||||||
@@ -155,7 +155,7 @@ void ValidationCollection::addToGroup(newcoin::Validation& newValid)
|
|||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
{ // this is the first validation of this ledgerindex
|
{ // this is the first validation of this ledgerindex
|
||||||
uint256 newHash=Transaction::protobufToInternalHash(newValid.hash());
|
uint256 newHash=protobufTo256(newValid.hash());
|
||||||
mIndexGroups[newValid.ledgerindex()][0].mValidations.push_back(newValid);
|
mIndexGroups[newValid.ledgerindex()][0].mValidations.push_back(newValid);
|
||||||
mIndexGroups[newValid.ledgerindex()][0].mSuperLedger=theApp->getLedgerMaster().getLedger(newHash);
|
mIndexGroups[newValid.ledgerindex()][0].mSuperLedger=theApp->getLedgerMaster().getLedger(newHash);
|
||||||
}
|
}
|
||||||
@@ -191,7 +191,7 @@ bool ValidationCollection::getConsensusLedger(uint32 ledgerIndex, uint256& ourHa
|
|||||||
maxVotes=group.mValidations.size();
|
maxVotes=group.mValidations.size();
|
||||||
retLedger=group.mSuperLedger;
|
retLedger=group.mSuperLedger;
|
||||||
maxGroup=group;
|
maxGroup=group;
|
||||||
if(!retLedger) retHash=Transaction::protobufToInternalHash(group.mValidations[0].hash());
|
if(!retLedger) retHash=protobufTo256(group.mValidations[0].hash());
|
||||||
ret=true;
|
ret=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -200,7 +200,7 @@ bool ValidationCollection::getConsensusLedger(uint32 ledgerIndex, uint256& ourHa
|
|||||||
// should also return false if we are in the consensus
|
// should also return false if we are in the consensus
|
||||||
BOOST_FOREACH(newcoin::Validation& valid, maxGroup.mValidations)
|
BOOST_FOREACH(newcoin::Validation& valid, maxGroup.mValidations)
|
||||||
{
|
{
|
||||||
if(Transaction::protobufToInternalHash(valid.hash()) == ourHash) return(false);
|
if(protobufTo256(valid.hash()) == ourHash) return(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#include "Wallet.h"
|
#include "Wallet.h"
|
||||||
#include "NewcoinAddress.h"
|
#include "NewcoinAddress.h"
|
||||||
|
#include "Convertion.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include "LedgerMaster.h"
|
#include "LedgerMaster.h"
|
||||||
//#include "script.h"
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@@ -55,8 +55,8 @@ void Wallet::transactionChanged(TransactionPtr trans)
|
|||||||
|
|
||||||
BOOST_FOREACH(Account& account, mYourAccounts)
|
BOOST_FOREACH(Account& account, mYourAccounts)
|
||||||
{
|
{
|
||||||
if( account.mAddress == NewcoinAddress::protobufToInternal(trans->from()) ||
|
if( account.mAddress == protobufTo160(trans->from()) ||
|
||||||
account.mAddress == NewcoinAddress::protobufToInternal(trans->dest()) )
|
account.mAddress == protobufTo160(trans->dest()) )
|
||||||
{
|
{
|
||||||
Ledger::Account* ledgerAccount=theApp->getLedgerMaster().getAccount(account.mAddress);
|
Ledger::Account* ledgerAccount=theApp->getLedgerMaster().getAccount(account.mAddress);
|
||||||
if(ledgerAccount)
|
if(ledgerAccount)
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ int SqliteDatabase::getLastInsertID()
|
|||||||
// returns false if there are no results
|
// returns false if there are no results
|
||||||
bool SqliteDatabase::startIterRows()
|
bool SqliteDatabase::startIterRows()
|
||||||
{
|
{
|
||||||
|
needs to fill out the column table
|
||||||
return(mMoreRows);
|
return(mMoreRows);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,14 +121,15 @@ bool SqliteDatabase::getBool(int colIndex)
|
|||||||
return(sqlite3_column_int(mCurrentStmt, colIndex));
|
return(sqlite3_column_int(mCurrentStmt, colIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SqliteDatabase::getBinary(int colIndex,unsigned char* buf,int maxSize)
|
int SqliteDatabase::getBinary(int colIndex,unsigned char* buf,int maxSize)
|
||||||
{
|
{
|
||||||
const void* blob=sqlite3_column_blob(mCurrentStmt, colIndex);
|
const void* blob=sqlite3_column_blob(mCurrentStmt, colIndex);
|
||||||
int size=sqlite3_column_bytes(mCurrentStmt, colIndex);
|
int size=sqlite3_column_bytes(mCurrentStmt, colIndex);
|
||||||
if(maxSize<size) size=maxSize;
|
if(maxSize<size) size=maxSize;
|
||||||
memcpy(buf,blob,size);
|
memcpy(buf,blob,size);
|
||||||
return(true);
|
return(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64 SqliteDatabase::getBigInt(int colIndex)
|
uint64 SqliteDatabase::getBigInt(int colIndex)
|
||||||
{
|
{
|
||||||
return(sqlite3_column_int64(mCurrentStmt, colIndex));
|
return(sqlite3_column_int64(mCurrentStmt, colIndex));
|
||||||
@@ -146,7 +148,13 @@ void SqliteDatabase::escape(unsigned char* start,int size,std::string& retStr)
|
|||||||
retStr.append("X'");
|
retStr.append("X'");
|
||||||
for(int n=0; n<size; n++)
|
for(int n=0; n<size; n++)
|
||||||
{
|
{
|
||||||
retStr.append( itoa(*start,buf,16) );
|
itoa(start[n],buf,16);
|
||||||
|
if(buf[1]==0)
|
||||||
|
{
|
||||||
|
retStr.append("0");
|
||||||
|
retStr.append(buf);
|
||||||
|
}else retStr.append(buf);
|
||||||
|
|
||||||
}
|
}
|
||||||
retStr.push_back('\'');
|
retStr.push_back('\'');
|
||||||
}
|
}
|
||||||
@@ -33,7 +33,8 @@ public:
|
|||||||
int32 getInt(int colIndex);
|
int32 getInt(int colIndex);
|
||||||
float getFloat(int colIndex);
|
float getFloat(int colIndex);
|
||||||
bool getBool(int colIndex);
|
bool getBool(int colIndex);
|
||||||
bool getBinary(int colIndex,unsigned char* buf,int maxSize);
|
// returns amount stored in buf
|
||||||
|
int getBinary(int colIndex,unsigned char* buf,int maxSize);
|
||||||
uint64 getBigInt(int colIndex);
|
uint64 getBigInt(int colIndex);
|
||||||
|
|
||||||
void escape(unsigned char* start,int size,std::string& retStr);
|
void escape(unsigned char* start,int size,std::string& retStr);
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ bool Database::getBool(const char* colName)
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Database::getBinary(const char* colName,unsigned char* buf,int maxSize)
|
int Database::getBinary(const char* colName,unsigned char* buf,int maxSize)
|
||||||
{
|
{
|
||||||
int index;
|
int index;
|
||||||
if(getColNumber(colName,&index))
|
if(getColNumber(colName,&index))
|
||||||
|
|||||||
@@ -50,14 +50,15 @@ public:
|
|||||||
int32 getInt(const char* colName);
|
int32 getInt(const char* colName);
|
||||||
float getFloat(const char* colName);
|
float getFloat(const char* colName);
|
||||||
bool getBool(const char* colName);
|
bool getBool(const char* colName);
|
||||||
bool getBinary(const char* colName,unsigned char* buf,int maxSize);
|
// returns amount stored in buf
|
||||||
|
int getBinary(const char* colName,unsigned char* buf,int maxSize);
|
||||||
uint64 getBigInt(const char* colName);
|
uint64 getBigInt(const char* colName);
|
||||||
|
|
||||||
virtual char* getStr(int colIndex,std::string& retStr)=0;
|
virtual char* getStr(int colIndex,std::string& retStr)=0;
|
||||||
virtual int32 getInt(int colIndex)=0;
|
virtual int32 getInt(int colIndex)=0;
|
||||||
virtual float getFloat(int colIndex)=0;
|
virtual float getFloat(int colIndex)=0;
|
||||||
virtual bool getBool(int colIndex)=0;
|
virtual bool getBool(int colIndex)=0;
|
||||||
virtual bool getBinary(int colIndex,unsigned char* buf,int maxSize)=0;
|
virtual int getBinary(int colIndex,unsigned char* buf,int maxSize)=0;
|
||||||
virtual uint64 getBigInt(int colIndex)=0;
|
virtual uint64 getBigInt(int colIndex)=0;
|
||||||
|
|
||||||
int getSingleDBValueInt(const char* sql);
|
int getSingleDBValueInt(const char* sql);
|
||||||
|
|||||||
@@ -89,6 +89,7 @@
|
|||||||
<ClCompile Include="CallRPC.cpp" />
|
<ClCompile Include="CallRPC.cpp" />
|
||||||
<ClCompile Include="Config.cpp" />
|
<ClCompile Include="Config.cpp" />
|
||||||
<ClCompile Include="ConnectionPool.cpp" />
|
<ClCompile Include="ConnectionPool.cpp" />
|
||||||
|
<ClCompile Include="Convertion.cpp" />
|
||||||
<ClCompile Include="cryptopp\cpu.cpp" />
|
<ClCompile Include="cryptopp\cpu.cpp" />
|
||||||
<ClCompile Include="cryptopp\sha.cpp" />
|
<ClCompile Include="cryptopp\sha.cpp" />
|
||||||
<ClCompile Include="database\database.cpp" />
|
<ClCompile Include="database\database.cpp" />
|
||||||
@@ -133,6 +134,7 @@
|
|||||||
<ClInclude Include="CallRPC.h" />
|
<ClInclude Include="CallRPC.h" />
|
||||||
<ClInclude Include="Config.h" />
|
<ClInclude Include="Config.h" />
|
||||||
<ClInclude Include="ConnectionPool.h" />
|
<ClInclude Include="ConnectionPool.h" />
|
||||||
|
<ClInclude Include="Convertion.h" />
|
||||||
<ClInclude Include="cryptopp\config.h" />
|
<ClInclude Include="cryptopp\config.h" />
|
||||||
<ClInclude Include="cryptopp\cpu.h" />
|
<ClInclude Include="cryptopp\cpu.h" />
|
||||||
<ClInclude Include="cryptopp\cryptlib.h" />
|
<ClInclude Include="cryptopp\cryptlib.h" />
|
||||||
|
|||||||
@@ -147,6 +147,9 @@
|
|||||||
<ClCompile Include="database\sqlite3.c">
|
<ClCompile Include="database\sqlite3.c">
|
||||||
<Filter>Header Files\util</Filter>
|
<Filter>Header Files\util</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="Convertion.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Application.h">
|
<ClInclude Include="Application.h">
|
||||||
@@ -341,6 +344,9 @@
|
|||||||
<ClInclude Include="database\sqlite3ext.h">
|
<ClInclude Include="database\sqlite3ext.h">
|
||||||
<Filter>Header Files\util</Filter>
|
<Filter>Header Files\util</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="Convertion.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="nodes.xml" />
|
<None Include="nodes.xml" />
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
copy C:\code\newcoin\Release\newcoin.exe C:\code\newcoin\tests\client1
|
REM copy C:\code\newcoin\Release\newcoin.exe C:\code\newcoin\tests\client1
|
||||||
copy C:\code\newcoin\Release\newcoin.exe C:\code\newcoin\tests\client2
|
REM copy C:\code\newcoin\Release\newcoin.exe C:\code\newcoin\tests\client2
|
||||||
|
|
||||||
|
copy d:\code\newcoin\Debug\newcoin.exe d:\code\newcoin\tests\client1
|
||||||
|
copy d:\code\newcoin\Debug\newcoin.exe d:\code\newcoin\tests\client2
|
||||||
|
|
||||||
pause
|
pause
|
||||||
Reference in New Issue
Block a user