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);
+ }
}