diff --git a/include/block.inc.php b/include/block.inc.php index ab3d0c4..40ab1d3 100755 --- a/include/block.inc.php +++ b/include/block.inc.php @@ -24,6 +24,7 @@ public function add($height, $public_key, $nonce, $data, $date, $signature, $dif // create the block data and check it against the signature $info = "{$generator}-{$height}-{$date}-{$nonce}-{$json}-{$difficulty}-{$argon}"; + _log($info,3); if (!$bootstrapping) { if (!$acc->check_signature($info, $signature, $public_key)) { _log("Block signature check failed"); diff --git a/include/init.inc.php b/include/init.inc.php index 72af49a..03aa339 100755 --- a/include/init.inc.php +++ b/include/init.inc.php @@ -1,6 +1,6 @@ mine($public_key, $nonce, $argon); + + if ($result) { + // generate the new block + $date = intval($_POST['date']); + if ($date <= $current['date']) { + api_err("rejected - date"); + } + + // get the mempool transactions + $txn = new Transaction(); + $current = $block->current(); + $height = $current['height'] += 1; + + // get the mempool transactions + $txn = new Transaction(); + + + $difficulty = $block->difficulty(); + $acc = new Account(); + $generator = $acc->get_address($public_key); + + $data=json_decode($_POST['data'], true); + + // sign the block + $signature = san($_POST['signature']); + + // reward transaction and signature + $reward = $block->reward($height, $data); + $msg = ''; + $transaction = [ + "src" => $generator, + "dst" => $generator, + "val" => $reward, + "version" => 0, + "date" => $date, + "message" => $msg, + "fee" => "0.00000000", + "public_key" => $public_key, + ]; + ksort($transaction); + $reward_signature = san($_POST['reward_signature']); + + // add the block to the blockchain + $res = $block->add( + $height, + $public_key, + $nonce, + $data, + $date, + $signature, + $difficulty, + $reward_signature, + $argon + ); + + + if ($res) { + //if the new block is generated, propagate it to all peers in background + $current = $block->current(); + system("php propagate.php block $current[id] > /dev/null 2>&1 &"); + api_echo("accepted"); + } else { + api_err("rejected - add"); + } + } + api_err("rejected"); +} elseif ($q == "getWork") { + if ($_config['sanity_sync'] == 1) { + api_err("sanity-sync"); + } + $block = new Block(); + $current = $block->current(); + $height = $current['height'] += 1; + $date = time(); + // get the mempool transactions + $txn = new Transaction(); + $data = $txn->mempool($block->max_transactions()); + + + $difficulty = $block->difficulty(); + // always sort the transactions in the same way + ksort($data); + + + // reward transaction and signature + $reward = $block->reward($height, $data); + api_echo(["height"=>$height, "data"=>$data, "reward"=>$reward, "block"=>$current['id'], "difficulty"=>$difficulty]); } else { api_err("invalid command"); }