diff --git a/composer.json b/composer.json index 3c5ff0d58..cc75b73d8 100644 --- a/composer.json +++ b/composer.json @@ -9,9 +9,11 @@ "cakephp/cakephp": "3.8.*", "cakephp/migrations": "^2.0.0", "cakephp/plugin-installer": "^1.0", + "datto/json-rpc": "^6.0", + "google/protobuf": "v3.10.*", "mobiledetect/mobiledetectlib": "2.*", "paragonie/sodium_compat": "^1.11", - "google/protobuf": "v3.10.*" + "tuupola/base58": "^2.0" }, "require-dev": { "cakephp/bake": "^1.9.0", diff --git a/composer.lock b/composer.lock index 30608f63e..afe7a7683 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "de9b091bfb2ef9e30a63a154a97b5d9f", + "content-hash": "7f922dda80856a46c7b637afb52338ab", "packages": [ { "name": "aura/intl", @@ -54,16 +54,16 @@ }, { "name": "cakephp/cakephp", - "version": "3.8.8", + "version": "3.8.9", "source": { "type": "git", "url": "https://github.com/cakephp/cakephp.git", - "reference": "d01515c90646590183e34bc40cf8d9911f88ef5c" + "reference": "1e5da0893ecf89baa2fd3cce2862c24d9fb9b9b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/cakephp/zipball/d01515c90646590183e34bc40cf8d9911f88ef5c", - "reference": "d01515c90646590183e34bc40cf8d9911f88ef5c", + "url": "https://api.github.com/repos/cakephp/cakephp/zipball/1e5da0893ecf89baa2fd3cce2862c24d9fb9b9b3", + "reference": "1e5da0893ecf89baa2fd3cce2862c24d9fb9b9b3", "shasum": "" }, "require": { @@ -139,7 +139,7 @@ "rapid-development", "validation" ], - "time": "2019-12-29T02:09:22+00:00" + "time": "2020-01-25T01:41:07+00:00" }, { "name": "cakephp/chronos", @@ -291,6 +291,56 @@ "description": "A composer installer for CakePHP 3.0+ plugins.", "time": "2019-11-12T10:21:19+00:00" }, + { + "name": "datto/json-rpc", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/datto/php-json-rpc.git", + "reference": "77edbb6fde5424665c12f8b3a91b778b2b4c9ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/datto/php-json-rpc/zipball/77edbb6fde5424665c12f8b3a91b778b2b4c9ea7", + "reference": "77edbb6fde5424665c12f8b3a91b778b2b4c9ea7", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Datto\\JsonRpc\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0+" + ], + "authors": [ + { + "name": "Spencer Mortensen", + "email": "smortensen@datto.com", + "homepage": "http://spencermortensen.com", + "role": "Developer" + } + ], + "description": "Fully unit-tested JSON-RPC 2.0 for PHP", + "homepage": "http://datto.com", + "keywords": [ + "json", + "json-rpc", + "jsonrpc", + "php", + "php-json-rpc", + "rpc" + ], + "time": "2019-07-26T20:20:13+00:00" + }, { "name": "google/protobuf", "version": "v3.10.0", @@ -782,16 +832,16 @@ }, { "name": "symfony/config", - "version": "v5.0.2", + "version": "v5.0.4", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "7f930484966350906185ba0a604728f7898b7ba0" + "reference": "7640c6704f56bf64045066bc5d93fd9d664baa63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/7f930484966350906185ba0a604728f7898b7ba0", - "reference": "7f930484966350906185ba0a604728f7898b7ba0", + "url": "https://api.github.com/repos/symfony/config/zipball/7640c6704f56bf64045066bc5d93fd9d664baa63", + "reference": "7640c6704f56bf64045066bc5d93fd9d664baa63", "shasum": "" }, "require": { @@ -842,20 +892,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2019-12-18T13:50:31+00:00" + "time": "2020-01-04T14:08:26+00:00" }, { "name": "symfony/console", - "version": "v4.4.2", + "version": "v4.4.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "82437719dab1e6bdd28726af14cb345c2ec816d0" + "reference": "f512001679f37e6a042b51897ed24a2f05eba656" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/82437719dab1e6bdd28726af14cb345c2ec816d0", - "reference": "82437719dab1e6bdd28726af14cb345c2ec816d0", + "url": "https://api.github.com/repos/symfony/console/zipball/f512001679f37e6a042b51897ed24a2f05eba656", + "reference": "f512001679f37e6a042b51897ed24a2f05eba656", "shasum": "" }, "require": { @@ -918,20 +968,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-12-17T10:32:23+00:00" + "time": "2020-01-25T12:44:29+00:00" }, { "name": "symfony/filesystem", - "version": "v4.4.2", + "version": "v4.4.4", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "40c2606131d56eff6f193b6e2ceb92414653b591" + "reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/40c2606131d56eff6f193b6e2ceb92414653b591", - "reference": "40c2606131d56eff6f193b6e2ceb92414653b591", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/266c9540b475f26122b61ef8b23dd9198f5d1cfd", + "reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd", "shasum": "" }, "require": { @@ -968,7 +1018,7 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-11-26T23:16:41+00:00" + "time": "2020-01-21T08:20:44+00:00" }, { "name": "symfony/polyfill-ctype", @@ -1205,16 +1255,16 @@ }, { "name": "symfony/yaml", - "version": "v5.0.2", + "version": "v5.0.4", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "847661e77afa48d99ecfa508e8b60f0b029a19c0" + "reference": "69b44e3b8f90949aee2eb3aa9b86ceeb01cbf62a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/847661e77afa48d99ecfa508e8b60f0b029a19c0", - "reference": "847661e77afa48d99ecfa508e8b60f0b029a19c0", + "url": "https://api.github.com/repos/symfony/yaml/zipball/69b44e3b8f90949aee2eb3aa9b86ceeb01cbf62a", + "reference": "69b44e3b8f90949aee2eb3aa9b86ceeb01cbf62a", "shasum": "" }, "require": { @@ -1260,7 +1310,59 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-12-10T11:06:55+00:00" + "time": "2020-01-21T11:12:28+00:00" + }, + { + "name": "tuupola/base58", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/tuupola/base58.git", + "reference": "9e9cb3b1a8e1b6a540de4a1b1a6d61193756d09a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tuupola/base58/zipball/9e9cb3b1a8e1b6a540de4a1b1a6d61193756d09a", + "reference": "9e9cb3b1a8e1b6a540de4a1b1a6d61193756d09a", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "overtrue/phplint": "^1.0.0", + "phpbench/phpbench": "^0.13.0", + "phpstan/phpstan": "^0.11.1", + "phpunit/phpunit": "^5.0|^6.0|^7.0", + "squizlabs/php_codesniffer": "^3.0" + }, + "suggest": { + "ext-gmp": "GMP extension provides the fastest encoding and decoding." + }, + "type": "library", + "autoload": { + "psr-4": { + "Tuupola\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mika Tuupola", + "email": "tuupola@appelsiini.net", + "homepage": "https://appelsiini.net/", + "role": "Developer" + } + ], + "description": "Base58 encoder and decoder for arbitrary data", + "homepage": "https://github.com/tuupola/base58", + "keywords": [ + "base58" + ], + "time": "2019-03-31T07:33:09+00:00" }, { "name": "zendframework/zend-diactoros", @@ -1594,16 +1696,16 @@ }, { "name": "cakephp/debug_kit", - "version": "3.21.0", + "version": "3.21.1", "source": { "type": "git", "url": "https://github.com/cakephp/debug_kit.git", - "reference": "74c289cbd9ee07a531ce813dec744c9f2f472e14" + "reference": "beb1f551e6cf4282a9236d72d78aad94fb334d11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/74c289cbd9ee07a531ce813dec744c9f2f472e14", - "reference": "74c289cbd9ee07a531ce813dec744c9f2f472e14", + "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/beb1f551e6cf4282a9236d72d78aad94fb334d11", + "reference": "beb1f551e6cf4282a9236d72d78aad94fb334d11", "shasum": "" }, "require": { @@ -1650,7 +1752,7 @@ "debug", "kit" ], - "time": "2019-11-10T02:41:02+00:00" + "time": "2020-01-27T16:15:08+00:00" }, { "name": "composer/ca-bundle", @@ -2419,16 +2521,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.9.4", + "version": "1.9.5", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "579bb7356d91f9456ccd505f24ca8b667966a0a7" + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/579bb7356d91f9456ccd505f24ca8b667966a0a7", - "reference": "579bb7356d91f9456ccd505f24ca8b667966a0a7", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", "shasum": "" }, "require": { @@ -2463,7 +2565,7 @@ "object", "object graph" ], - "time": "2019-12-15T19:12:40+00:00" + "time": "2020-01-17T21:11:47+00:00" }, { "name": "nikic/php-parser", @@ -2772,24 +2874,24 @@ }, { "name": "phpspec/prophecy", - "version": "1.10.1", + "version": "v1.10.2", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "cbe1df668b3fe136bcc909126a0f529a78d4cbbc" + "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/cbe1df668b3fe136bcc909126a0f529a78d4cbbc", - "reference": "cbe1df668b3fe136bcc909126a0f529a78d4cbbc", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b4400efc9d206e83138e2bb97ed7f5b14b831cd9", + "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" }, "require-dev": { "phpspec/phpspec": "^2.5 || ^3.2", @@ -2831,7 +2933,7 @@ "spy", "stub" ], - "time": "2019-12-22T21:05:45+00:00" + "time": "2020-01-20T15:57:02+00:00" }, { "name": "phpunit/php-code-coverage", @@ -3954,16 +4056,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.5.3", + "version": "3.5.4", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "557a1fc7ac702c66b0bbfe16ab3d55839ef724cb" + "reference": "dceec07328401de6211037abbb18bda423677e26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/557a1fc7ac702c66b0bbfe16ab3d55839ef724cb", - "reference": "557a1fc7ac702c66b0bbfe16ab3d55839ef724cb", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dceec07328401de6211037abbb18bda423677e26", + "reference": "dceec07328401de6211037abbb18bda423677e26", "shasum": "" }, "require": { @@ -4001,20 +4103,20 @@ "phpcs", "standards" ], - "time": "2019-12-04T04:46:47+00:00" + "time": "2020-01-30T22:20:29+00:00" }, { "name": "symfony/finder", - "version": "v4.4.2", + "version": "v4.4.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "ce8743441da64c41e2a667b8eb66070444ed911e" + "reference": "3a50be43515590faf812fbd7708200aabc327ec3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ce8743441da64c41e2a667b8eb66070444ed911e", - "reference": "ce8743441da64c41e2a667b8eb66070444ed911e", + "url": "https://api.github.com/repos/symfony/finder/zipball/3a50be43515590faf812fbd7708200aabc327ec3", + "reference": "3a50be43515590faf812fbd7708200aabc327ec3", "shasum": "" }, "require": { @@ -4050,20 +4152,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-11-17T21:56:56+00:00" + "time": "2020-01-04T13:00:46+00:00" }, { "name": "symfony/process", - "version": "v4.4.2", + "version": "v4.4.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "b84501ad50adb72a94fb460a5b5c91f693e99c9b" + "reference": "f5697ab4cb14a5deed7473819e63141bf5352c36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/b84501ad50adb72a94fb460a5b5c91f693e99c9b", - "reference": "b84501ad50adb72a94fb460a5b5c91f693e99c9b", + "url": "https://api.github.com/repos/symfony/process/zipball/f5697ab4cb14a5deed7473819e63141bf5352c36", + "reference": "f5697ab4cb14a5deed7473819e63141bf5352c36", "shasum": "" }, "require": { @@ -4099,20 +4201,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-12-06T10:06:46+00:00" + "time": "2020-01-09T09:50:08+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.0.2", + "version": "v5.0.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "d7bc61d5d335fa9b1b91e14bb16861e8ca50f53a" + "reference": "923591cfb78a935f0c98968fedfad05bfda9d01f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d7bc61d5d335fa9b1b91e14bb16861e8ca50f53a", - "reference": "d7bc61d5d335fa9b1b91e14bb16861e8ca50f53a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/923591cfb78a935f0c98968fedfad05bfda9d01f", + "reference": "923591cfb78a935f0c98968fedfad05bfda9d01f", "shasum": "" }, "require": { @@ -4174,7 +4276,7 @@ "debug", "dump" ], - "time": "2019-12-18T13:50:31+00:00" + "time": "2020-01-25T15:56:29+00:00" }, { "name": "theseer/tokenizer", diff --git a/src/Controller/TransactionsController.php b/src/Controller/TransactionsController.php index 3443f1dbc..9600e77f0 100644 --- a/src/Controller/TransactionsController.php +++ b/src/Controller/TransactionsController.php @@ -6,6 +6,8 @@ use App\Controller\AppController; use Model\Transactions\Transaction; use Model\Transactions\TransactionBody; +use Cake\Core\Configure; + /** * Transactions Controller * @@ -20,6 +22,7 @@ class TransactionsController extends AppController { parent::initialize(); $this->loadComponent('GradidoNumber'); + $this->loadComponent('JsonRpcRequestClient'); $this->Auth->allow(['decode']); } @@ -86,6 +89,99 @@ class TransactionsController extends AppController } } + + public function sendToNode() { + $this->viewBuilder()->setLayout('frontend'); + $startTime = microtime(true); + + //$loginServer = Configure::read('LoginServer'); + + $jsonRpcResult = $this->JsonRpcRequestClient->request('getlasttransaction', []); + $result = $jsonRpcResult['result']; + //var_dump($result); + if($result['state'] != 'success') { + $this->Flash->error(__('error retriving last saved transaction from gradido node.')); + $timeUsed = microtime(true) - $startTime; + $this->set('timeUsed', $timeUsed); + return; + } + + $firstId = 1; + if($result['transaction'] != '') { + $lastKnowTransaction = new Transaction($result['transaction']); + $firstId = $lastKnowTransaction->getId()+1; + } + + $transactionIDEntities = $this->Transactions + ->find('all') + ->select(['id']) + ->where(['id >=' => $firstId]) + ; + $transactionIDs = []; + foreach($transactionIDEntities as $entity) { + array_push($transactionIDs, $entity->id); + } + + $csfr_token = $this->request->getParam('_csrfToken'); + $this->set('csfr_token', $csfr_token); + $this->set('transactionIds', $transactionIDs); + + $timeUsed = microtime(true) - $startTime; + $this->set('timeUsed', $timeUsed); + + if ($this->request->is('post')) { + $host = $this->request->getData('host'); + $port = $this->request->getData('port'); + //$gradidod = new JsonRpcClient($host . ':' . $port); + + + //var_dump($transactionIDs); + + //$result = $this->JsonRpcRequestClient->request('puttransaction', ['group' => 'Hallo', 'transaction' => 'Hallo2' ]); + + //$result = $gradidod->putTransaction(['group' => 'Hallo', 'transaction' => 'Hallo2' ]); + //var_dump($result); + + $timeUsed = microtime(true) - $startTime; + $this->set('timeUsed', $timeUsed); + } + } + + public function ajaxPutTransactionToGradidoNode() + { + $startTime = microtime(true); + if($this->request->is('post')) { + //$jsonData = $this->request->input('json_decode', true); + $data = $this->request->getData(); + //$user = $jsonData['user']; + //var_dump($data); + $transactionId = $data['transaction_id']; + if($transactionId == null || $transactionId < 1) { + $timeUsed = microtime(true) - $startTime; + return $this->returnJson(['state' => 'error', 'msg' => 'invalid transaction id', 'timeUsed' => $timeUsed]); + } + try { + $transaction = Transaction::fromTable($transactionId); + } catch(Exception $e) { + echo "exception: "; + var_dump($e); + } + $transactionBase64 = base64_encode($transaction->serializeToString()); + //echo "base64:
$transactionBase64
"; + + $result = $this->JsonRpcRequestClient->request('puttransaction', [ + 'group' => 'd502c4254defe1842d71c484dc35f56983ce938e3c22058795c7520b62ab9123', + 'transaction' => $transactionBase64 + ]); + + $timeUsed = microtime(true) - $startTime; + $result['timeUsed'] = $timeUsed; + return $this->returnJson($result); + //return $this->returnJson(['state' => 'success', 'timeUsed' => $timeUsed]); + } + $timeUsed = microtime(true) - $startTime; + return $this->returnJson(['state' => 'error', 'msg' => 'no post request', 'timeUsed' => $timeUsed]); + } /** * Add method diff --git a/src/Model/Transactions/Transaction.php b/src/Model/Transactions/Transaction.php index 23f381131..220d20287 100644 --- a/src/Model/Transactions/Transaction.php +++ b/src/Model/Transactions/Transaction.php @@ -17,6 +17,8 @@ class Transaction extends TransactionBase { private $mProtoTransaction = null; private $mTransactionBody = null; + + public function __construct($base64Data) { //$transactionBin = base64_decode($base64Data, true); @@ -69,6 +71,10 @@ class Transaction extends TransactionBase { return $sigPairs[0]->getPubKey(); } + public function getId() { + return $this->mProtoTransaction->getId(); + } + public function validate() { $sigMap = $this->mProtoTransaction->getSigMap(); if(!$sigMap) { @@ -151,9 +157,42 @@ class Transaction extends TransactionBase { return true; } - + static public function fromTable($id) + { + $transactionsTable = TableRegistry::getTableLocator()->get('transactions'); + $transactionEntry = $transactionsTable + ->find('all') + ->where(['id' => $id]) + ->contain([ + 'TransactionCreations', + 'TransactionSendCoins', + 'TransactionSignatures']) + ->first(); + //var_dump($transactionEntry->toArray()); + $protoTransaction = new \Model\Messages\Gradido\Transaction(); + + + + $protoTransaction->setId($transactionEntry->id); + + + $recevied = new \Model\Messages\Gradido\TimestampSeconds(); + $recevied->setSeconds($transactionEntry->received->getTimestamp()); + $protoTransaction->setReceived($recevied); + + + $sigMap = SignatureMap::fromEntity($transactionEntry->transaction_signatures); + $protoTransaction->setSigMap($sigMap->getProto()); + + //echo "sig map: check
"; + $protoTransaction->setTxHash(stream_get_contents($transactionEntry->tx_hash)); + + $body = TransactionBody::fromEntity($transactionEntry->memo, $transactionEntry); + if(is_array($body)) { + return ['state' => 'error', 'msg' => 'error creating body transaction', 'details' => $body]; + } + //$protoTransaction->setBodyBytes($body->serializeToString()); + return $protoTransaction; + } - - - } \ No newline at end of file diff --git a/src/Model/Transactions/TransactionBody.php b/src/Model/Transactions/TransactionBody.php index ce66fe1b5..5025aec08 100644 --- a/src/Model/Transactions/TransactionBody.php +++ b/src/Model/Transactions/TransactionBody.php @@ -136,4 +136,22 @@ class TransactionBody extends TransactionBase { return $this->transactionTypeId; } + static public function fromEntity($memo, $transaction) + { + $protoBody = new \Model\Messages\Gradido\TransactionBody(); + $protoBody->setMemo($memo); + if(count($transaction->transaction_creations) == 1) { + //echo "is creation
"; + $protoBody->setCreation(TransactionCreation::fromEntity($transaction->transaction_creations[0])->getProto()); + } + else if(count($transaction->transaction_send_coins) == 1) { + echo "is transfer"; + $protoBody->setTransfer(TransactionTransfer::fromEntity($transaction->transaction_send_coins)->getProto()); + } else { + return ['invalid transaction type or count']; + } + + return $protoBody; + } + } diff --git a/src/Model/Transactions/TransactionCreation.php b/src/Model/Transactions/TransactionCreation.php index a62782898..c2da4fed7 100644 --- a/src/Model/Transactions/TransactionCreation.php +++ b/src/Model/Transactions/TransactionCreation.php @@ -18,6 +18,10 @@ class TransactionCreation extends TransactionBase { $this->receiver_pubkey_hex = bin2hex($this->getReceiverPublic()); } + public function getProto() { + return $this->protoTransactionCreation; + } + static public function build($amount, $memo, $receiver_public_hex, $ident_hash) { $receiver = new \Model\Messages\Gradido\ReceiverAmount(); @@ -152,5 +156,30 @@ class TransactionCreation extends TransactionBase { return true; } - + + static public function fromEntity($transactionCreationEntity) + { + $protoCreation = new \Model\Messages\Gradido\TransactionCreation(); + + //var_dump($transactionCreationEntity); + $stateUsersTable = TableRegistry::getTableLocator()->get('state_users'); + //return new TransactionCreation($protoCreation); + $userId = $transactionCreationEntity->state_user_id; + + + $stateUser = $stateUsersTable->get($userId); + + + $receiverAmount = new \Model\Messages\Gradido\ReceiverAmount(); + $receiverAmount->setEd25519ReceiverPubkey(stream_get_contents($stateUser->public_key)); + + $receiverAmount->setAmount($transactionCreationEntity->amount); + + $protoCreation->setReceiverAmount($receiverAmount); + + //echo "receiver amount: check
"; + $identHashBytes = stream_get_contents($transactionCreationEntity->ident_hash); + $protoCreation->setIdentHash(intval($identHashBytes)); + return new TransactionCreation($protoCreation); + } } diff --git a/src/Model/Transactions/TransactionTransfer.php b/src/Model/Transactions/TransactionTransfer.php index cfb6f204e..a4ac93027 100644 --- a/src/Model/Transactions/TransactionTransfer.php +++ b/src/Model/Transactions/TransactionTransfer.php @@ -12,6 +12,10 @@ class TransactionTransfer extends TransactionBase { $this->protoTransactionTransfer = $protoTransactionTransfer; } + public function getProto() { + return $this->protoTransactionTransfer; + } + static public function build($amount, $memo, $receiver_public_hex, $sender_public_hex) { // repeated SenderAmount senderAmounts = 1; @@ -201,5 +205,15 @@ class TransactionTransfer extends TransactionBase { //return false; return true; } + + static public function fromEntity($transactionTransferEntity) + { + $protoTransfer = new \Model\Messages\Gradido\Transfer(); + + $stateUsersTable = TableRegistry::getTableLocator()->get('state_users'); + + + return new TransactionTransfer($protoTransfer); + } }