From: Roland Haeder Date: Wed, 27 May 2015 02:16:46 +0000 (+0200) Subject: Better name for the miner: It "mines" for Hubcoins. X-Git-Url: https://git.mxchange.org/?p=hub.git;a=commitdiff_plain;h=2eeb79458f7c3704f9e1919bb0b0f57e0a07cf57 Better name for the miner: It "mines" for Hubcoins. Signed-off-by: Roland Haeder --- diff --git a/application/hub/config.php b/application/hub/config.php index f1fd5793e..b4c67a00e 100644 --- a/application/hub/config.php +++ b/application/hub/config.php @@ -920,8 +920,8 @@ $cfg->setConfigEntry('upper_recipient_class', 'UpperRecipient'); // Miner configuration /////////////////////////////////////////////////////////////////////////////// -// CFG: MINER-DEFAULT-MODE (can be only 'chash' at the moment) -$cfg->setConfigEntry('miner_default_mode', 'chash'); +// CFG: MINER-DEFAULT-MODE (can be only 'coin' at the moment) +$cfg->setConfigEntry('miner_default_mode', 'coin'); // CFG: MINER-BUFFER-STACKER-CLASS $cfg->setConfigEntry('miner_buffer_stacker_class', 'FiFoStacker'); diff --git a/application/hub/main/feature/hubcoin_reward/class_HubcoinRewardFeature.php b/application/hub/main/feature/hubcoin_reward/class_HubcoinRewardFeature.php index d1607ac8c..f868dd949 100644 --- a/application/hub/main/feature/hubcoin_reward/class_HubcoinRewardFeature.php +++ b/application/hub/main/feature/hubcoin_reward/class_HubcoinRewardFeature.php @@ -35,10 +35,9 @@ class HubcoinRewardFeature extends BaseFeature implements Feature { /** * Creates an instance of this Feature class and prepares it for usage * - * @param $appInstance A manageable application * @return $featureInstance An instance of this Feature class */ - public final static function createHubcoinRewardFeature (ManageableApplication $appInstance) { + public final static function createHubcoinRewardFeature () { // Get a new instance $featureInstance = new HubcoinRewardFeature(); @@ -52,8 +51,14 @@ class HubcoinRewardFeature extends BaseFeature implements Feature { * @return $isAvailable Whether this feature is available */ public function isFeatureAvailable () { + // Debug message + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d]: CALLED!', __METHOD__, __LINE__)); + // Testing this feature is pretty simple: - $isAvailable = (($this->getConfigInstance()->getConfigEntry('extension_scrypt_loaded') === 'Y') && (extension_loaded('scrypt')) && (is_callable('scrypt'))); + $isAvailable = (($this->getConfigInstance()->getConfigEntry('extension_scrypt_loaded') === TRUE) && (extension_loaded('scrypt')) && (is_callable('scrypt'))); + + // Debug message + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d]: isAvailable=%d - EXIT!', __METHOD__, __LINE__, intval($isAvailable))); // Return status return $isAvailable; @@ -62,7 +67,49 @@ class HubcoinRewardFeature extends BaseFeature implements Feature { /** * Feature method 'generateHash' * - * @param + * @param $data Data to hash + * @return $hash Finished hash + */ + public function featureMethodGenerateHash ($data) { + // Debug message + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d]: data()=%d - CALLED!', __METHOD__, __LINE__, strlen($data))); + + // Make sure the feature is available + assert(FrameworkFeature::isFeatureAvailable('hubcoin_reward')); + + // Call inner class + $hash = Scrypt::hashScrypt($data); + + // Debug message + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d]: hash=%s - EXIT!', __METHOD__, __LINE__, $hash)); + + // Return generated hash + return $hash; + } + + /** + * Feature method 'checkHash' + * + * @param $data Data to check hash for + * @param $hash Previously generated hash for valdiation + * @return $isValid Whether the given hash matches a new one from given data + */ + public function featureMethodCheckHash ($data, $hash) { + // Debug message + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d]: data()=%d,hash=%s - CALLED!', __METHOD__, __LINE__, strlen($data), $hash)); + + // Make sure the feature is available + assert(FrameworkFeature::isFeatureAvailable('hubcoin_reward')); + + // Determine it + $isValid = Scrypt::checkScrypt($data, $hash); + + // Debug message + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d]: isValid=%d - EXIT!', __METHOD__, __LINE__, intval($isValid))); + + // Return status + return $isValid; + } } // [EOF] diff --git a/application/hub/main/filter/miner/class_MinerPhpRequirementsFilter.php b/application/hub/main/filter/miner/class_MinerPhpRequirementsFilter.php index dc490d2ee..918568833 100644 --- a/application/hub/main/filter/miner/class_MinerPhpRequirementsFilter.php +++ b/application/hub/main/filter/miner/class_MinerPhpRequirementsFilter.php @@ -69,7 +69,7 @@ class MinerPhpRequirementsFilter extends BaseMinerFilter implements Filterable { // If scrypt() is not found (ext-scrypt) then the "Hubcoins reward" is not working if ((extension_loaded('scrypt')) && (is_callable('scrypt'))) { // Mark it as working - self::createDebugInstance(__CLASS__)->debugOutput('FILTER[' . __METHOD__ . ':' . __LINE__ . '] ext-scrypt and a callable scrypt() function found. "Hubcoin reward" feature enabled.'); + self::createDebugInstance(__CLASS__)->debugOutput('FILTER[' . __METHOD__ . ':' . __LINE__ . '] ext-scrypt and a callable scrypt() function found. "Hubcoin reward" feature possible.'); $this->getConfigInstance()->setConfigEntry('extension_scrypt_loaded', TRUE); } else { // Not working (not all have ext-scrypt installed diff --git a/application/hub/main/filter/node/class_NodePhpRequirementsFilter.php b/application/hub/main/filter/node/class_NodePhpRequirementsFilter.php index bea3c8662..7cba2b5ca 100644 --- a/application/hub/main/filter/node/class_NodePhpRequirementsFilter.php +++ b/application/hub/main/filter/node/class_NodePhpRequirementsFilter.php @@ -69,7 +69,7 @@ class NodePhpRequirementsFilter extends BaseNodeFilter implements Filterable { // If scrypt() is not found (ext-scrypt) then the "Hubcoins reward" is not working if ((extension_loaded('scrypt')) && (is_callable('scrypt'))) { // Mark it as working - self::createDebugInstance(__CLASS__)->debugOutput('FILTER[' . __METHOD__ . ':' . __LINE__ . '] ext-scrypt and a callable scrypt() function found. "Hubcoin reward" feature enabled.'); + self::createDebugInstance(__CLASS__)->debugOutput('FILTER[' . __METHOD__ . ':' . __LINE__ . '] ext-scrypt and a callable scrypt() function found. "Hubcoin reward" feature possible.'); $this->getConfigInstance()->setConfigEntry('extension_scrypt_loaded', TRUE); } else { // Not working (not all have ext-scrypt installed diff --git a/application/hub/main/miner/chash/class_HubChashMiner.php b/application/hub/main/miner/chash/class_HubChashMiner.php deleted file mode 100644 index 7e9f207b6..000000000 --- a/application/hub/main/miner/chash/class_HubChashMiner.php +++ /dev/null @@ -1,147 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2014 Miner Developer Team - * @license GNU GPL 3.0 or any newer version - * @link http://www.shipsimu.org - * - * This program 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. - * - * This program 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 this program. If not, see . - */ -class HubChashMiner extends BaseHubMiner implements MinerHelper, Registerable { - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - - // Set version number - $this->setVersion('0.0.0'); - } - - /** - * Creates an instance of this hub-miner class - * - * @return $minerInstance An instance of this hub-miner class - */ - public final static function createHubChashMiner () { - // Get a new instance - $minerInstance = new HubChashMiner(); - - // Return the instance - return $minerInstance; - } - - /** - * This method fills the in-buffer with (a) test unit(s) which are mainly - * used for development of the crunching part. They must be enabled in - * configuration, or else your miner runs out of WUs and waits for more - * to show up. - * - * In this method we already know that the in-buffer is going depleted so - * no need to double-check it here. - * - * @return void - */ - protected function fillInBufferQueueWithTestUnits () { - // Are test units enabled? - if ($this->getConfigInstance()->getConfigEntry('miner_test_units_enabled') == 'N') { - // They are disabled, so skip any further steps - return; - } elseif ($this->getStateInstance()->isMinerStateVirgin()) { - // No virgin miners please, because they usually have no test units ready for crunching - return; - } - - // Get a test-unit generator instance - $generatorInstance = ObjectFactory::createObjectByConfiguredName('miner_test_unit_generator_class'); - - // We don't need an iterator here because we just need to generate some test units - for ($idx = 0; $idx < $this->getConfigInstance()->getConfigEntry('miner_max_text_unit_amount'); $idx++) { - // Get a test unit from it - $unitInstance = $generatorInstance->generateNextUnitInstance(); - - // ... and finally queue it to the in-buffer queue - $this->queueUnitInstanceToInBuffer($unitInstance); - } // END - for - } - - /** - * This method fills the in-buffer with (real) WUs which will be crunched - * and the result be sent back to the key producer instance. - * - * @return void - */ - protected function fillInBufferQueueWithWorkUnits () { - // This miner's state must not be one of these: 'virgin' - if ($this->getStateInstance()->isMinerStateVirgin()) { - // We can silently skip here, until the generation is finished - return; - } // END - if - - // @TODO Implement this method - $this->partialStub('Please implement this method.'); - } - - /** - * Method to "bootstrap" the miner. This step does also apply provided - * command-line arguments stored in the request instance. No buffer queue - * will be initialized here, we only do "general" things here. - * - * @return void - * @todo Implement this method - */ - public function doBootstrapping () { - $this->partialStub('Please implement this method.'); - } - - /** - * Outputs the console teaser. This should only be executed on startup or - * full restarts. This method generates some space around the teaser. - * - * @return void - */ - public function outputConsoleTeaser () { - // Output all lines - self::createDebugInstance(__CLASS__)->debugOutput(' '); - self::createDebugInstance(__CLASS__)->debugOutput('Continued Hashing Miner v' . $this->getVersion() . ' is starting ...'); - self::createDebugInstance(__CLASS__)->debugOutput('Copyright (c) 2014 Miner Developer Team'); - self::createDebugInstance(__CLASS__)->debugOutput(' '); - self::createDebugInstance(__CLASS__)->debugOutput('This program comes with ABSOLUTELY NO WARRANTY; for details see docs/COPYING.'); - self::createDebugInstance(__CLASS__)->debugOutput('This is free software, and you are welcome to redistribute it under certain'); - self::createDebugInstance(__CLASS__)->debugOutput('conditions; see docs/COPYING for details.'); - self::createDebugInstance(__CLASS__)->debugOutput(' '); - } - - /** - * Add some miner-specific filters - * - * @param $controllerInstance An object of a Controller instance - * @param $responseInstance An object of a Responseable instance - * @return void - * @todo 0% done - */ - public function addExtraFilters (Controller $controllerInstance, Responseable $responseInstance) { - // Add some filters here - $this->partialStub('Please add some miner-specific filters, if required.'); - } -} - -// [EOF] -?> diff --git a/application/hub/main/miner/chash/class_HubCoinMiner.php b/application/hub/main/miner/chash/class_HubCoinMiner.php new file mode 100644 index 000000000..2b9ddb1d7 --- /dev/null +++ b/application/hub/main/miner/chash/class_HubCoinMiner.php @@ -0,0 +1,147 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2014 Miner Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.shipsimu.org + * + * This program 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. + * + * This program 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 this program. If not, see . + */ +class HubCoinMiner extends BaseHubMiner implements MinerHelper, Registerable { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + + // Set version number + $this->setVersion('0.0.0'); + } + + /** + * Creates an instance of this hub-miner class + * + * @return $minerInstance An instance of this hub-miner class + */ + public final static function createHubCoinMiner () { + // Get a new instance + $minerInstance = new HubCoinMiner(); + + // Return the instance + return $minerInstance; + } + + /** + * This method fills the in-buffer with (a) test unit(s) which are mainly + * used for development of the crunching part. They must be enabled in + * configuration, or else your miner runs out of WUs and waits for more + * to show up. + * + * In this method we already know that the in-buffer is going depleted so + * no need to double-check it here. + * + * @return void + */ + protected function fillInBufferQueueWithTestUnits () { + // Are test units enabled? + if ($this->getConfigInstance()->getConfigEntry('miner_test_units_enabled') == 'N') { + // They are disabled, so skip any further steps + return; + } elseif ($this->getStateInstance()->isMinerStateVirgin()) { + // No virgin miners please, because they usually have no test units ready for crunching + return; + } + + // Get a test-unit generator instance + $generatorInstance = ObjectFactory::createObjectByConfiguredName('miner_test_unit_generator_class'); + + // We don't need an iterator here because we just need to generate some test units + for ($idx = 0; $idx < $this->getConfigInstance()->getConfigEntry('miner_max_text_unit_amount'); $idx++) { + // Get a test unit from it + $unitInstance = $generatorInstance->generateNextUnitInstance(); + + // ... and finally queue it to the in-buffer queue + $this->queueUnitInstanceToInBuffer($unitInstance); + } // END - for + } + + /** + * This method fills the in-buffer with (real) WUs which will be crunched + * and the result be sent back to the key producer instance. + * + * @return void + */ + protected function fillInBufferQueueWithWorkUnits () { + // This miner's state must not be one of these: 'virgin' + if ($this->getStateInstance()->isMinerStateVirgin()) { + // We can silently skip here, until the generation is finished + return; + } // END - if + + // @TODO Implement this method + $this->partialStub('Please implement this method.'); + } + + /** + * Method to "bootstrap" the miner. This step does also apply provided + * command-line arguments stored in the request instance. No buffer queue + * will be initialized here, we only do "general" things here. + * + * @return void + * @todo Implement this method + */ + public function doBootstrapping () { + $this->partialStub('Please implement this method.'); + } + + /** + * Outputs the console teaser. This should only be executed on startup or + * full restarts. This method generates some space around the teaser. + * + * @return void + */ + public function outputConsoleTeaser () { + // Output all lines + self::createDebugInstance(__CLASS__)->debugOutput(' '); + self::createDebugInstance(__CLASS__)->debugOutput('Hubcoin miner v' . $this->getVersion() . ' is starting ...'); + self::createDebugInstance(__CLASS__)->debugOutput('Copyright (c) 2014 Miner Developer Team'); + self::createDebugInstance(__CLASS__)->debugOutput(' '); + self::createDebugInstance(__CLASS__)->debugOutput('This program comes with ABSOLUTELY NO WARRANTY; for details see docs/COPYING.'); + self::createDebugInstance(__CLASS__)->debugOutput('This is free software, and you are welcome to redistribute it under certain'); + self::createDebugInstance(__CLASS__)->debugOutput('conditions; see docs/COPYING for details.'); + self::createDebugInstance(__CLASS__)->debugOutput(' '); + } + + /** + * Add some miner-specific filters + * + * @param $controllerInstance An object of a Controller instance + * @param $responseInstance An object of a Responseable instance + * @return void + * @todo 0% done + */ + public function addExtraFilters (Controller $controllerInstance, Responseable $responseInstance) { + // Add some filters here + $this->partialStub('Please add some miner-specific filters, if required.'); + } +} + +// [EOF] +?> diff --git a/application/hub/main/package/class_NetworkPackage.php b/application/hub/main/package/class_NetworkPackage.php index df534cd3a..4c5dc1b10 100644 --- a/application/hub/main/package/class_NetworkPackage.php +++ b/application/hub/main/package/class_NetworkPackage.php @@ -657,11 +657,12 @@ class NetworkPackage extends BaseHubSystem implements Deliverable, Receivable, R */ private function generatePackageHash ($content, $senderId) { // Debug message - /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NETWORK-PACKAGE[' . __METHOD__ . ':' . __LINE__ . ']: isFeatureAvailable(hubcoin_reward)=' . intval(FrameworkFeature::isFeatureAvailable('hubcoin_reward')) . ' - CALLED!'); + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NETWORK-PACKAGE[' . __METHOD__ . ':' . __LINE__ . ']: content()=' . strlen($content) . ',senderId=' . $senderId . ' - CALLED!'); // Is the feature enabled? if (!FrameworkFeature::isFeatureAvailable('hubcoin_reward')) { // Feature is not enabled + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NETWORK-PACKAGE[' . __METHOD__ . ':' . __LINE__ . ']: Feature "hubcoin_reward" not available, not generating package hash. Returning NULL ...'); return NULL; } // END - if @@ -692,19 +693,28 @@ class NetworkPackage extends BaseHubSystem implements Deliverable, Receivable, R * @todo Unfinished area, hashes are currently NOT fully supported */ private function isPackageHashValid (array $decodedArray) { + // Debug message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NETWORK-PACKAGE[' . __METHOD__ . ':' . __LINE__ . ']: decodedArray=' . print_r($decodedArray, TRUE) . ' - CALLED!'); + + // Make sure the required array elements are there + assert(isset($decodedArray[self::PACKAGE_CONTENT_SENDER])); + assert(isset($decodedArray[self::PACKAGE_CONTENT_MESSAGE])); + assert(isset($decodedArray[self::PACKAGE_CONTENT_HASH])); + // Is the feature enabled? if (!FrameworkFeature::isFeatureAvailable('hubcoin_reward')) { // Feature is not enabled, so hashes are always valid + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NETWORK-PACKAGE[' . __METHOD__ . ':' . __LINE__ . ']: Feature "hubcoin_reward" not available, not checking hash. Returning TRUE ...'); return TRUE; } // END - if // Check validity - /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NETWORK-PACKAGE[' . __METHOD__ . ':' . __LINE__ . ']: senderId=' . $decodedArray[self::PACKAGE_CONTENT_SENDER] . ',decodedArray=' . print_r($decodedArray, TRUE)); + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NETWORK-PACKAGE[' . __METHOD__ . ':' . __LINE__ . ']: senderId=' . $decodedArray[self::PACKAGE_CONTENT_SENDER] . ',message()=' . strlen($decodedArray[self::PACKAGE_CONTENT_MESSAGE]) . '),hash=' . $decodedArray[self::PACKAGE_CONTENT_HASH]); //* DEBUG-DIE: */ die(__METHOD__ . ': decodedArray=' . print_r($decodedArray, TRUE)); $isHashValid = FrameworkFeature::callFeature('hubcoin_reward', 'checkHash', array($decodedArray[self::PACKAGE_CONTENT_SENDER] . ':' . $decodedArray[self::PACKAGE_CONTENT_MESSAGE] . ':' . $this->determineSenderPrivateKeyHash($decodedArray), $decodedArray[self::PACKAGE_CONTENT_HASH])); // Return it - //* DEBUG-DIE: */ die(__METHOD__ . ': isHashValid=' . intval($isHashValid) . ',decodedArray=' . print_r($decodedArray, TRUE)); + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NETWORK-PACKAGE[' . __METHOD__ . ':' . __LINE__ . ']: isHashValid=' . intval($isHashValid) . ' - EXIT!'); return $isHashValid; } diff --git a/core b/core index a0551c30b..d320e14f5 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit a0551c30b2e11aadba3f0513ef67c36ca7e60552 +Subproject commit d320e14f5d1103c513e20acad9ce80f79719485c