48 lines
1.6 KiB
C++
48 lines
1.6 KiB
C++
// ethash: C/C++ implementation of Ethash, the Ethereum Proof of Work algorithm.
|
|
// Copyright 2018 Pawel Bylica.
|
|
// Licensed under the Apache License, Version 2.0. See the LICENSE file.
|
|
|
|
/// @file
|
|
///
|
|
/// ProgPoW API
|
|
///
|
|
/// This file provides the public API for ProgPoW as the Ethash API extension.
|
|
|
|
#include <ethash/ethash.hpp>
|
|
|
|
namespace progpow
|
|
{
|
|
using namespace ethash; // Include ethash namespace.
|
|
|
|
|
|
/// The ProgPoW algorithm revision implemented as specified in the spec
|
|
/// https://github.com/ifdefelse/ProgPOW#change-history.
|
|
constexpr auto revision = "0.9.2";
|
|
|
|
constexpr int period_length = 50;
|
|
constexpr uint32_t num_regs = 32;
|
|
constexpr size_t num_lanes = 16;
|
|
constexpr int num_cache_accesses = 12;
|
|
constexpr int num_math_operations = 20;
|
|
constexpr size_t l1_cache_size = 16 * 1024;
|
|
constexpr size_t l1_cache_num_items = l1_cache_size / sizeof(uint32_t);
|
|
|
|
result hash(const epoch_context& context, int block_number, const hash256& header_hash,
|
|
uint64_t nonce) noexcept;
|
|
|
|
result hash(const epoch_context_full& context, int block_number, const hash256& header_hash,
|
|
uint64_t nonce) noexcept;
|
|
|
|
bool verify(const epoch_context& context, int block_number, const hash256& header_hash,
|
|
const hash256& mix_hash, uint64_t nonce, const hash256& boundary) noexcept;
|
|
|
|
search_result search_light(const epoch_context& context, int block_number,
|
|
const hash256& header_hash, const hash256& boundary, uint64_t start_nonce,
|
|
size_t iterations) noexcept;
|
|
|
|
search_result search(const epoch_context_full& context, int block_number,
|
|
const hash256& header_hash, const hash256& boundary, uint64_t start_nonce,
|
|
size_t iterations) noexcept;
|
|
|
|
} // namespace progpow
|