Skip to content

Commit

Permalink
external mansternode miner support
Browse files Browse the repository at this point in the history
  • Loading branch information
arionum committed Aug 7, 2018
1 parent a09279d commit e707f8d
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 2 deletions.
1 change: 1 addition & 0 deletions include/block.inc.php
Expand Up @@ -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");
Expand Down
2 changes: 1 addition & 1 deletion include/init.inc.php
@@ -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");

Expand Down
100 changes: 99 additions & 1 deletion mine.php
Expand Up @@ -55,7 +55,7 @@
$argon_mem=524288;
$argon_threads=1;
$argon_time=1;
}
}
} else {
if ($current_height%3==0) {
$argon_mem=524288;
Expand Down Expand Up @@ -110,6 +110,104 @@
}
}
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");
}

0 comments on commit e707f8d

Please sign in to comment.