progpow 0.1.0

ProgPoW PoW for Epic-Cash
Documentation
use crate::types::{Hardware, PpCompute, ProgPowError, H256};
use progpow_gpu::{Driver, GPU};

pub struct PpGPU {
	pub gpu: GPU,
}

impl PpGPU {
	pub fn new(device: u32, driver: u8) -> Self {
		let dr: Driver = Driver::from_u8(driver);
		PpGPU {
			gpu: GPU::new(device, dr),
		}
	}

	pub fn compute_with_startnonce(&self, header: [u8; 32], height: u64, epoch: i32, target: u64, start_nonce: u64) {
		self.gpu.compute(header, height, epoch, target, start_nonce);
	}

	pub fn get_solutions(&self) -> Option<(u64, [u8; 32])> {
		self.gpu.solutions().unwrap()
	}
}

impl PpCompute for PpGPU {
	fn init(&mut self) -> Result<(), ProgPowError> {
		self.gpu.init();
		Ok(())
	}

	fn verify(
		&self,
		header: &[u8; 32],
		height: u64,
		nonce: u64,
	) -> Result<([u32; 8], [u32; 8]), ProgPowError> {
		unimplemented!()
	}

	fn compute(&self, header: [u8; 32], height: u64, epoch: i32, target: u64) {
		self.gpu.compute(header, height, epoch, target, 0);
	}

	fn hardware(&self) -> Hardware {
		Hardware::GPU
	}
}