]> git.mxchange.org Git - hub.git/commitdiff
Better name for the miner: It "mines" for Hubcoins.
authorRoland Haeder <roland@mxchange.org>
Wed, 27 May 2015 02:16:46 +0000 (04:16 +0200)
committerRoland Haeder <roland@mxchange.org>
Wed, 27 May 2015 02:16:46 +0000 (04:16 +0200)
Signed-off-by: Roland Haeder <roland@mxchange.org>
application/hub/config.php
application/hub/main/feature/hubcoin_reward/class_HubcoinRewardFeature.php
application/hub/main/filter/miner/class_MinerPhpRequirementsFilter.php
application/hub/main/filter/node/class_NodePhpRequirementsFilter.php
application/hub/main/miner/chash/class_HubChashMiner.php [deleted file]
application/hub/main/miner/chash/class_HubCoinMiner.php [new file with mode: 0644]
application/hub/main/package/class_NetworkPackage.php
core

index f1fd5793e3ae90eee31c2563ced1064ef1d4942c..b4c67a00e9bcc0f44d5fbca371e3c2120e94965e 100644 (file)
@@ -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');
index d1607ac8cd51ddf2cb3c50dfb889b038b4c5f5c0..f868dd949e65facc13426387311c14c00c26f384 100644 (file)
@@ -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]
index dc490d2ee2b9d075d171a056c934cae4dd8bdd1c..918568833787a07daa0b41bd4524f78ed605e38d 100644 (file)
@@ -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
index bea3c86621d8b5783e78b091fb1a527fdf38f3c6..7cba2b5ca371859eaff41ae81f319f4712d60b8e 100644 (file)
@@ -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 (file)
index 7e9f207..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-/**
- * A hub-mcrypt miner class
- *
- * @author             Roland Haeder <webmaster@shipsimu.org>
- * @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 <http://www.gnu.org/licenses/>.
- */
-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 (file)
index 0000000..2b9ddb1
--- /dev/null
@@ -0,0 +1,147 @@
+<?php
+/**
+ * A hub-mcrypt miner class
+ *
+ * @author             Roland Haeder <webmaster@shipsimu.org>
+ * @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 <http://www.gnu.org/licenses/>.
+ */
+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]
+?>
index df534cd3ac01a7c8131d5537e538b26792dc0547..4c5dc1b10defb8e8738e9543ffe4444e48040118 100644 (file)
@@ -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 a0551c30b2e11aadba3f0513ef67c36ca7e60552..d320e14f5d1103c513e20acad9ce80f79719485c 160000 (submodule)
--- a/core
+++ b/core
@@ -1 +1 @@
-Subproject commit a0551c30b2e11aadba3f0513ef67c36ca7e60552
+Subproject commit d320e14f5d1103c513e20acad9ce80f79719485c