Gav Wood
10 years ago
7 changed files with 2 additions and 162 deletions
@ -1,81 +0,0 @@ |
|||
/*
|
|||
This file is part of cpp-ethereum. |
|||
|
|||
cpp-ethereum is free software: you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation, either version 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
cpp-ethereum is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
/** @file MessageFilter.cpp
|
|||
* @author Gav Wood <i@gavwood.com> |
|||
* @date 2014 |
|||
*/ |
|||
|
|||
#include "MessageFilter.h" |
|||
|
|||
#include <libdevcrypto/SHA3.h> |
|||
#include "State.h" |
|||
using namespace std; |
|||
using namespace dev; |
|||
using namespace dev::eth; |
|||
|
|||
void LogFilter::streamRLP(RLPStream& _s) const |
|||
{ |
|||
_s.appendList(6) << m_addresses << m_topics << m_earliest << m_latest << m_max << m_skip; |
|||
} |
|||
|
|||
h256 LogFilter::sha3() const |
|||
{ |
|||
RLPStream s; |
|||
streamRLP(s); |
|||
return dev::sha3(s.out()); |
|||
} |
|||
|
|||
bool LogFilter::matches(LogBloom _bloom) const |
|||
{ |
|||
if (m_addresses.size()) |
|||
{ |
|||
for (auto i: m_addresses) |
|||
if (_bloom.containsBloom<3>(dev::sha3(i))) |
|||
goto OK1; |
|||
return false; |
|||
} |
|||
OK1: |
|||
if (m_topics.size()) |
|||
{ |
|||
for (auto i: m_topics) |
|||
if (_bloom.containsBloom<3>(dev::sha3(i))) |
|||
goto OK2; |
|||
return false; |
|||
} |
|||
OK2: |
|||
return true; |
|||
} |
|||
|
|||
bool LogFilter::matches(State const& _s, unsigned _i) const |
|||
{ |
|||
return matches(_s.receipt(_i)).size() > 0; |
|||
} |
|||
|
|||
LogEntries LogFilter::matches(TransactionReceipt const& _m) const |
|||
{ |
|||
LogEntries ret; |
|||
for (LogEntry const& e: _m.log()) |
|||
{ |
|||
if (!m_addresses.empty() && !m_addresses.count(e.address)) |
|||
continue; |
|||
for (auto const& t: m_topics) |
|||
if (!std::count(e.topics.begin(), e.topics.end(), t)) |
|||
continue; |
|||
ret.push_back(e); |
|||
} |
|||
return ret; |
|||
} |
@ -1,69 +0,0 @@ |
|||
/*
|
|||
This file is part of cpp-ethereum. |
|||
|
|||
cpp-ethereum is free software: you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation, either version 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
cpp-ethereum is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
/** @file MessageFilter.h
|
|||
* @author Gav Wood <i@gavwood.com> |
|||
* @date 2014 |
|||
*/ |
|||
|
|||
#pragma once |
|||
|
|||
#include <libdevcore/Common.h> |
|||
#include <libdevcore/RLP.h> |
|||
#include <libethcore/CommonEth.h> |
|||
#include "TransactionReceipt.h" |
|||
|
|||
namespace dev |
|||
{ |
|||
namespace eth |
|||
{ |
|||
|
|||
class State; |
|||
|
|||
class LogFilter |
|||
{ |
|||
public: |
|||
LogFilter(int _earliest = 0, int _latest = -1, unsigned _max = 10, unsigned _skip = 0): m_earliest(_earliest), m_latest(_latest), m_max(_max), m_skip(_skip) {} |
|||
|
|||
void streamRLP(RLPStream& _s) const; |
|||
h256 sha3() const; |
|||
|
|||
int earliest() const { return m_earliest; } |
|||
int latest() const { return m_latest; } |
|||
unsigned max() const { return m_max; } |
|||
unsigned skip() const { return m_skip; } |
|||
bool matches(LogBloom _bloom) const; |
|||
bool matches(State const& _s, unsigned _i) const; |
|||
LogEntries matches(TransactionReceipt const& _r) const; |
|||
|
|||
LogFilter address(Address _a) { m_addresses.insert(_a); return *this; } |
|||
LogFilter topic(h256 const& _t) { m_topics.insert(_t); return *this; } |
|||
LogFilter withMax(unsigned _m) { m_max = _m; return *this; } |
|||
LogFilter withSkip(unsigned _m) { m_skip = _m; return *this; } |
|||
LogFilter withEarliest(int _e) { m_earliest = _e; return *this; } |
|||
LogFilter withLatest(int _e) { m_latest = _e; return *this; } |
|||
|
|||
private: |
|||
AddressSet m_addresses; |
|||
h256Set m_topics; |
|||
int m_earliest = 0; |
|||
int m_latest = -1; |
|||
unsigned m_max; |
|||
unsigned m_skip; |
|||
}; |
|||
|
|||
} |
|||
} |
Loading…
Reference in new issue