 |
Ethereum
PoC-8
The C++ Implementation of Ethereum
|
Go to the documentation of this file.
27 #include <unordered_map>
39 struct ChainOperationParams;
41 class PrecompiledFace;
42 class TransactionBase;
53 return std::tuple<h256, h256, h256>{};
55 virtual bool isMining()
const {
return false; }
56 virtual unsigned revision()
const {
return 0; }
68 bytes option(std::string
const& _name)
const {
Guard l(x_options);
return m_options.count(_name) ? m_options.at(_name) :
bytes(); }
69 bool setOption(std::string
const& _name,
bytes const& _value) {
Guard l(x_options);
try {
if (
onOptionChanging(_name, _value)) { m_options[_name] = _value;
return true; } }
catch (...) {}
return false; }
72 virtual std::string
sealer()
const {
return "default"; }
97 mutable Mutex x_options;
98 std::unordered_map<std::string, bytes> m_options;
127 static SealEngineFace*
create(std::string
const& _name) {
if (!get()->m_sealEngines.count(_name))
return nullptr;
return get()->m_sealEngines[_name](); }
135 std::unordered_map<std::string, SealEngineFactory> m_sealEngines;
136 static SealEngineRegistrar* s_this;
139 #define ETH_REGISTER_SEAL_ENGINE(Name) static SealEngineFactory __eth_registerSealEngineFactory ## Name = SealEngineRegistrar::registerSealEngine<Name>(#Name)
144 static std::string
name() {
return "NoProof"; }
153 ChainOperationParams
const& _chainParams, BlockHeader
const& _bi, BlockHeader
const& _parent);
virtual std::tuple< h256, h256, h256 > getWork(BlockHeader const &)
virtual std::string sealer() const
std::function< void(bytes const &s)> m_onSealGenerated
virtual bytes sealRLP() const
static SealEngineFace * create(std::string const &_name)
virtual void verify(Strictness _s, BlockHeader const &_bi, BlockHeader const &_parent=BlockHeader(), bytesConstRef _block=bytesConstRef()) const
Don't forget to call Super::verify when subclassing & overriding.
std::function< SealEngineFace *()> SealEngineFactory
virtual bool isMining() const
void setChainParams(ChainOperationParams const &_params)
std::lock_guard< std::mutex > Guard
Encodes a transaction, ready to be exported to or freshly imported from RLP.
void generateSeal(BlockHeader const &_bi) override
virtual void setSealer(std::string const &)
ChainOperationParams const & chainParams() const
EVMSchedule const & evmSchedule(u256 const &_blockNumber) const override
static void unregisterSealEngine(std::string const &_name)
bytes option(std::string const &_name) const
virtual void verifyTransaction(ImportRequirements::value _ir, TransactionBase const &_t, BlockHeader const &_header, u256 const &_startGasUsed) const
Additional verification for transactions in blocks.
virtual unsigned sealFields() const
virtual u256 blockReward(u256 const &_blockNumber) const =0
static SealEngineFace * create(ChainOperationParams const &_params)
static SealEngineFactory registerSealEngine(std::string const &_name)
void populateFromParent(BlockHeader &_bi, BlockHeader const &_parent) const override
Don't forget to call Super::populateFromParent when subclassing & overriding.
virtual bigint costOfPrecompiled(Address const &_a, bytesConstRef _in, u256 const &) const
std::vector< byte > bytes
virtual StringHashMap jsInfo(BlockHeader const &) const
void verify(Strictness _s, BlockHeader const &_bi, BlockHeader const &_parent, bytesConstRef _block) const override
Don't forget to call Super::verify when subclassing & overriding.
vector_ref< byte const > bytesConstRef
virtual void populateFromParent(BlockHeader &_bi, BlockHeader const &_parent) const
Don't forget to call Super::populateFromParent when subclassing & overriding.
virtual void cancelGeneration()
u256 calculateEthashDifficulty(ChainOperationParams const &_chainParams, BlockHeader const &_bi, BlockHeader const &_parent)
virtual void generateSeal(BlockHeader const &_bi)=0
virtual unsigned revision() const
virtual bool isPrecompiled(Address const &_a, u256 const &_blockNumber) const
Main API hub for interfacing with Ethereum.
constexpr u256 Invalid256
virtual bool shouldSeal(Interface *)
static std::string name()
std::vector< std::string > strings
boost::multiprecision::number< boost::multiprecision::cpp_int_backend<> > bigint
virtual std::pair< bool, bytes > executePrecompiled(Address const &_a, bytesConstRef _in, u256 const &) const
StringHashMap jsInfo(BlockHeader const &_bi) const override
virtual strings sealers() const
virtual bool onOptionChanging(std::string const &, bytes const &)
std::unordered_map< Address, PrecompiledContract > precompiled
Precompiled contracts as specified in the chain params.
virtual void onSealGenerated(std::function< void(bytes const &s)> const &_f)=0
boost::multiprecision::number< boost::multiprecision::cpp_int_backend< 256, 256, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void > > u256
virtual ~SealEngineFace()
SealEngineFace * withChainParams(ChainOperationParams const &_params)
std::unordered_map< std::string, std::string > StringHashMap
bool setOption(std::string const &_name, bytes const &_value)
virtual EVMSchedule const & evmSchedule(u256 const &_blockNumber) const =0
void onSealGenerated(std::function< void(bytes const &)> const &_f) override
u256 blockReward(u256 const &_blockNumber) const override
u256 calculateGasLimit(ChainOperationParams const &_chainParams, BlockHeader const &_bi, u256 const &_gasFloorTarget)