27 #include <unordered_map> 39 struct ChainOperationParams;
41 class PrecompiledFace;
42 class TransactionBase;
50 virtual unsigned revision()
const {
return 0; }
62 bytes option(std::string
const& _name)
const {
Guard l(x_options);
return m_options.count(_name) ? m_options.at(_name) :
bytes(); }
63 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; }
66 virtual std::string
sealer()
const {
return "default"; }
91 mutable Mutex x_options;
92 std::unordered_map<std::string, bytes> m_options;
121 static SealEngineFace*
create(std::string
const& _name) {
if (!
get()->m_sealEngines.count(_name))
return nullptr;
return get()->m_sealEngines[_name](); }
129 std::unordered_map<std::string, SealEngineFactory> m_sealEngines;
130 static SealEngineRegistrar* s_this;
133 #define ETH_REGISTER_SEAL_ENGINE(Name) static SealEngineFactory __eth_registerSealEngineFactory ## Name = SealEngineRegistrar::registerSealEngine<Name>(#Name) 138 static std::string
name() {
return "NoProof"; }
146 ChainOperationParams
const& _chainParams, BlockHeader
const& _bi, BlockHeader
const& _parent);
virtual unsigned sealFields() const
u256 calculateEthashDifficulty(ChainOperationParams const &_chainParams, BlockHeader const &_bi, BlockHeader const &_parent)
virtual std::string sealer() const
u256 blockReward(u256 const &_blockNumber) const override
virtual EVMSchedule const & evmSchedule(u256 const &_blockNumber) const =0
virtual std::pair< bool, bytes > executePrecompiled(Address const &_a, bytesConstRef _in, u256 const &) const
std::function< SealEngineFace *()> SealEngineFactory
virtual StringHashMap jsInfo(BlockHeader const &) const
virtual void populateFromParent(BlockHeader &_bi, BlockHeader const &_parent) const
Don't forget to call Super::populateFromParent when subclassing & overriding.
virtual ~SealEngineFace()
virtual bool isPrecompiled(Address const &_a, u256 const &_blockNumber) const
virtual unsigned revision() const
virtual void generateSeal(BlockHeader const &_bi)=0
static SealEngineFace * create(std::string const &_name)
std::vector< std::string > strings
void generateSeal(BlockHeader const &_bi) override
virtual bytes sealRLP() const
SealEngineFace * withChainParams(ChainOperationParams const &_params)
boost::multiprecision::number< boost::multiprecision::cpp_int_backend<> > bigint
ChainOperationParams const & chainParams() const
EVMSchedule const & evmSchedule(u256 const &_blockNumber) const override
void populateFromParent(BlockHeader &_bi, BlockHeader const &_parent) const override
Don't forget to call Super::populateFromParent when subclassing & overriding.
std::lock_guard< std::mutex > Guard
bytes option(std::string const &_name) const
static void unregisterSealEngine(std::string const &_name)
void onSealGenerated(std::function< void(bytes const &)> const &_f) override
void verify(Strictness _s, BlockHeader const &_bi, BlockHeader const &_parent, bytesConstRef _block) const override
Don't forget to call Super::verify when subclassing & overriding.
u256 constexpr Invalid256
virtual void onSealGenerated(std::function< void(bytes const &s)> const &_f)=0
std::unordered_map< Address, PrecompiledContract > precompiled
Precompiled contracts as specified in the chain params.
std::vector< byte > bytes
vector_ref< byte const > bytesConstRef
virtual void verifyTransaction(ImportRequirements::value _ir, TransactionBase const &_t, BlockHeader const &_header, u256 const &_startGasUsed) const
Additional verification for transactions in blocks.
u256 calculateGasLimit(ChainOperationParams const &_chainParams, BlockHeader const &_bi, u256 const &_gasFloorTarget)
std::unordered_map< std::string, std::string > StringHashMap
Main API hub for interfacing with Ethereum.
static std::string name()
static SealEngineFace * create(ChainOperationParams const &_params)
virtual bigint costOfPrecompiled(Address const &_a, bytesConstRef _in, u256 const &) const
virtual void setSealer(std::string const &)
static SealEngineFactory registerSealEngine(std::string const &_name)
boost::multiprecision::number< boost::multiprecision::cpp_int_backend< 256, 256, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void > > u256
bool setOption(std::string const &_name, bytes const &_value)
std::function< void(bytes const &s)> m_onSealGenerated
void setChainParams(ChainOperationParams const &_params)
virtual bool shouldSeal(Interface *)
virtual strings sealers() const
virtual bool onOptionChanging(std::string const &, bytes const &)
virtual u256 blockReward(u256 const &_blockNumber) const =0
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.
Encodes a transaction, ready to be exported to or freshly imported from RLP.
virtual void cancelGeneration()