external mansternode miner support

This commit is contained in:
Arionum
2018-08-07 09:32:57 +03:00
parent a09279d091
commit e707f8daa4
3 changed files with 101 additions and 2 deletions

View File

@@ -24,6 +24,7 @@ class Block
// 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");

View File

@@ -1,6 +1,6 @@
<?php
// ARO version
define("VERSION", "0.4.0");
define("VERSION", "0.4.1");
// Amsterdam timezone by default, should probably be moved to config
date_default_timezone_set("UTC");

100
mine.php
View File

@@ -55,7 +55,7 @@ if ($q == "info") {
$argon_mem=524288;
$argon_threads=1;
$argon_time=1;
}
}
} else {
if ($current_height%3==0) {
$argon_mem=524288;
@@ -110,6 +110,104 @@ if ($q == "info") {
}
}
api_err("rejected");
} elseif ($q == "submitBlock") {
// in case the blocks are syncing, reject all
if ($_config['sanity_sync'] == 1) {
api_err("sanity-sync");
}
$nonce = san($_POST['nonce']);
$argon = $_POST['argon'];
$public_key = san($_POST['public_key']);
// check if the miner won the block
$result = $block->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");
}