- NotInChain will be very bad for new peers - it'll run through until the genesis.
- Check how many it has first.
- Crypto on network - use id as public key?
- Make work with IPv6
- Peers rated.
- Useful/useless - new blocks/transactions or useful peers?
- Solid communications?
- Strategy for peer suggestion?
Cleanups & caching
- All caches should flush unused data (I'm looking at you, BlockChain) to avoid memory overload.
- State DB should keep only last few N blocks worth of nodes (except for restore points - configurable, defaults to every 30000th block - all blocks that are restore points should be stored so their stateRoots are known good).
THREAD-SAFETY
- BlockChain
- TransactionQueue
- State
General:
- Better logging.
- Colours.
- Move over to new system.
- Remove block chain on protocol change (i.e. store protocol with block chain).
Robustness
- Remove aborts
- Recover from all exceptions.
- Store version alongside BC DB.
- Better handling of corrupt blocks.
- Kill DB & restart.
GUI
- Make address/block chain list model-based, JIT populated.
- Make everything else model-based
- Qt/QML class.
- Turn on/off debug channels.
For PoC3:
- Shared contract acceptence tests.
### Marko
Ubuntu builds
- Raring (branch, local, x64 only :-( )
- Quantal (branch) (Launchpad)
- Saucy (master) (Launchpad)
### Alex
Mac build.
Mac build instructions.
### Eric
Windows XC build.
Windows XC build instructions.
### Tim/Harv
Windows MSVC build.
Windows MSVC build instructions.
LATER:
Trie on DB.
- Move the restore point stuff into block restore points
- i.e. keep all nodes from last 127 blocks with counter, at 128, kill but keep every (60*24*7)th or so i.e. one per week as a restore point.
QMessageBox::about(this,"About AlethZero PoC-3","AlethZero/v"ADD_QUOTES(ETH_VERSION)"/"ADD_QUOTES(ETH_BUILD_TYPE)"/"ADD_QUOTES(ETH_BUILD_PLATFORM)"\nBy Gav Wood, 2014.\nBased on a design by Vitalik Buterin.\n\nTeam Ethereum++ includes: Eric Lombrozo, Marko Simovic, Alex Leverington, Tim Hughes and several others.");
QMessageBox::about(this,"About AlethZero PoC-"+QString(ETH_QUOTED(ETH_VERSION)).section('.',1,1),QString("AlethZero/v"ETH_QUOTED(ETH_VERSION)"/"ETH_QUOTED(ETH_BUILD_TYPE)"/"ETH_QUOTED(ETH_BUILD_PLATFORM)"\n"ETH_QUOTED(ETH_COMMIT_HASH))+(ETH_CLEAN_REPO?"\nCLEAN":"\n+ LOCAL CHANGES")+"\n\nBy Gav Wood, 2014.\nBased on a design by Vitalik Buterin.\n\nTeam Ethereum++ includes: Eric Lombrozo, Marko Simovic, Alex Leverington, Tim Hughes and several others.");
@ -31,7 +31,7 @@ class NoSuchContract: public Exception {};
classContractAddressCollision:publicException{};
classContractAddressCollision:publicException{};
classFeeTooSmall:publicException{};
classFeeTooSmall:publicException{};
classInvalidSignature:publicException{};
classInvalidSignature:publicException{};
classInvalidTransactionFormat:publicException{};
classInvalidTransactionFormat:publicException{public:InvalidTransactionFormat(int_f,bytesConstRef_d):m_f(_f),m_d(_d.toBytes()){}intm_f;bytesm_d;virtualstd::stringdescription()const{return"Invalid transaction format: Bad field "+toString(m_f)+" ("+asHex(m_d)+")";}};
classInvalidBlockFormat:publicException{public:InvalidBlockFormat(int_f,bytesConstRef_d):m_f(_f),m_d(_d.toBytes()){}intm_f;bytesm_d;virtualstd::stringdescription()const{return"Invalid block format: Bad field "+toString(m_f)+" ("+asHex(m_d)+")";}};
classInvalidBlockFormat:publicException{public:InvalidBlockFormat(int_f,bytesConstRef_d):m_f(_f),m_d(_d.toBytes()){}intm_f;bytesm_d;virtualstd::stringdescription()const{return"Invalid block format: Bad field "+toString(m_f)+" ("+asHex(m_d)+")";}};
classInvalidBlockHeaderFormat:publicException{public:InvalidBlockHeaderFormat(int_f,bytesConstRef_d):m_f(_f),m_d(_d.toBytes()){}intm_f;bytesm_d;virtualstd::stringdescription()const{return"Invalid block header format: Bad field "+toString(m_f)+" ("+asHex(m_d)+")";}};
classInvalidBlockHeaderFormat:publicException{public:InvalidBlockHeaderFormat(int_f,bytesConstRef_d):m_f(_f),m_d(_d.toBytes()){}intm_f;bytesm_d;virtualstd::stringdescription()const{return"Invalid block header format: Bad field "+toString(m_f)+" ("+asHex(m_d)+")";}};
staticconsteth::uintc_maxHashes=32;///< Maximum number of hashes GetChain will ever send.
staticconsteth::uintc_maxHashes=32;///< Maximum number of hashes GetChain will ever send.
staticconsteth::uintc_maxBlocks=32;///< Maximum number of blocks Blocks will ever send. BUG: if this gets too big (e.g. 2048) stuff starts going wrong.
staticconsteth::uintc_maxBlocks=32;///< Maximum number of blocks Blocks will ever send. BUG: if this gets too big (e.g. 2048) stuff starts going wrong.
std::map<h256,bytes>m_data;///< Map of SHA3(tx) to tx.
Transactionsm_interestQueue;
Transactionsm_interestQueue;
std::map<Address,int>m_interest;
std::map<Address,int>m_interest;
std::multimap<Address,std::pair<h256,bytes>>m_future;///< For transactions that have a future nonce; we map their sender address to the tx stuff, and insert once the sender has a valid TX.
assert(RLP("\xb8\x38""Lorem ipsum dolor sit amet, consectetur adipisicing elit")=="Lorem ipsum dolor sit amet, consectetur adipisicing elit");
assert(asString(rlp("Lorem ipsum dolor sit amet, consectetur adipisicing elit"))=="\xb8\x38""Lorem ipsum dolor sit amet, consectetur adipisicing elit");