Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d03cd9e9f6 | ||
|
|
f700c3a1c7 | ||
|
|
f564e7efa1 | ||
|
|
55c2ccc12c | ||
|
|
0d181f5512 | ||
|
|
cf6811d5c0 | ||
|
|
d3d20f596b | ||
|
|
54c9d063be | ||
|
|
be078f910f | ||
|
|
6252d4e3fe | ||
|
|
90fb711d2a | ||
|
|
271815e731 | ||
|
|
1a8b491fba | ||
|
|
d6235f4121 | ||
|
|
dacd9420a1 | ||
|
|
7e11df5a28 |
37
api.php
37
api.php
@@ -164,6 +164,7 @@ if ($q == "getAddress") {
|
||||
*/
|
||||
|
||||
$account = $data['account'];
|
||||
$public_key = san($data['public_key'] ?? '');
|
||||
if (!empty($public_key) && strlen($public_key) < 32) {
|
||||
api_err("Invalid public key");
|
||||
}
|
||||
@@ -203,6 +204,7 @@ if ($q == "getAddress") {
|
||||
*/
|
||||
|
||||
$account = san($data['account']);
|
||||
$public_key = san($data['public_key'] ?? '');
|
||||
if (!empty($public_key) && strlen($public_key) < 32) {
|
||||
api_err("Invalid public key");
|
||||
}
|
||||
@@ -537,6 +539,7 @@ if ($q == "getAddress") {
|
||||
$transaction['id'] = $hash;
|
||||
|
||||
|
||||
|
||||
if (!$trx->check($transaction)) {
|
||||
api_err("Transaction signature failed");
|
||||
}
|
||||
@@ -712,6 +715,7 @@ if ($q == "getAddress") {
|
||||
* @apiSuccess {number} data.transactions The number of transactions known by the node.
|
||||
* @apiSuccess {number} data.mempool The number of transactions in the mempool.
|
||||
* @apiSuccess {number} data.masternodes The number of masternodes known by the node.
|
||||
* @apiSuccess {number} data.peers The number of valid peers.
|
||||
*/
|
||||
$dbVersion = $db->single("SELECT val FROM config WHERE cfg='dbversion'");
|
||||
$hostname = $db->single("SELECT val FROM config WHERE cfg='hostname'");
|
||||
@@ -719,7 +723,7 @@ if ($q == "getAddress") {
|
||||
$tr = $db->single("SELECT COUNT(1) FROM transactions");
|
||||
$masternodes = $db->single("SELECT COUNT(1) FROM masternode");
|
||||
$mempool = $db->single("SELECT COUNT(1) FROM mempool");
|
||||
|
||||
$peers = $db->single("SELECT COUNT(1) FROM peers WHERE blacklisted<UNIX_TIMESTAMP()");
|
||||
api_echo([
|
||||
'hostname' => $hostname,
|
||||
'version' => VERSION,
|
||||
@@ -728,7 +732,38 @@ if ($q == "getAddress") {
|
||||
'transactions' => $tr,
|
||||
'mempool' => $mempool,
|
||||
'masternodes' => $masternodes,
|
||||
'peers' => $peers
|
||||
]);
|
||||
} elseif ($q === 'checkAddress') {
|
||||
/**
|
||||
* @api {get} /api.php?q=checkAddress 22. checkAddress
|
||||
* @apiName checkAddress
|
||||
* @apiGroup API
|
||||
* @apiDescription Checks the validity of an address.
|
||||
*
|
||||
* @apiParam {string} account Account id / address
|
||||
* @apiParam {string} [public_key] Public key
|
||||
*
|
||||
* @apiSuccess {boolean} data True if the address is valid, false otherwise.
|
||||
*/
|
||||
|
||||
$address=$data['account'];
|
||||
$public_key=$data['public_key'];
|
||||
$acc = new Account();
|
||||
if (!$acc->valid($address)) {
|
||||
api_err(false);
|
||||
}
|
||||
|
||||
$dst_b = base58_decode($address);
|
||||
if (strlen($dst_b) != 64) {
|
||||
api_err(false);
|
||||
}
|
||||
if (!empty($public_key)) {
|
||||
if($acc->get_address($public_key)!=$address){
|
||||
api_err(false);
|
||||
}
|
||||
}
|
||||
api_echo(true);
|
||||
} else {
|
||||
api_err("Invalid request");
|
||||
}
|
||||
|
||||
107
doc/api_data.js
107
doc/api_data.js
@@ -101,6 +101,50 @@ define({ "api": [
|
||||
"filename": "./api.php",
|
||||
"groupTitle": "API"
|
||||
},
|
||||
{
|
||||
"type": "get",
|
||||
"url": "/api.php?q=checkAddress",
|
||||
"title": "22. checkAddress",
|
||||
"name": "checkAddress",
|
||||
"group": "API",
|
||||
"description": "<p>Checks the validity of an address.</p>",
|
||||
"parameter": {
|
||||
"fields": {
|
||||
"Parameter": [
|
||||
{
|
||||
"group": "Parameter",
|
||||
"type": "string",
|
||||
"optional": false,
|
||||
"field": "account",
|
||||
"description": "<p>Account id / address</p>"
|
||||
},
|
||||
{
|
||||
"group": "Parameter",
|
||||
"type": "string",
|
||||
"optional": true,
|
||||
"field": "public_key",
|
||||
"description": "<p>Public key</p>"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"success": {
|
||||
"fields": {
|
||||
"Success 200": [
|
||||
{
|
||||
"group": "Success 200",
|
||||
"type": "boolean",
|
||||
"optional": false,
|
||||
"field": "data",
|
||||
"description": "<p>True if the address is valid, false otherwise.</p>"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"version": "0.0.0",
|
||||
"filename": "./api.php",
|
||||
"groupTitle": "API"
|
||||
},
|
||||
{
|
||||
"type": "get",
|
||||
"url": "/api.php?q=checkSignature",
|
||||
@@ -1080,6 +1124,13 @@ define({ "api": [
|
||||
"optional": false,
|
||||
"field": "data.masternodes",
|
||||
"description": "<p>The number of masternodes known by the node.</p>"
|
||||
},
|
||||
{
|
||||
"group": "Success 200",
|
||||
"type": "number",
|
||||
"optional": false,
|
||||
"field": "data.peers",
|
||||
"description": "<p>The number of valid peers.</p>"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1301,34 +1352,6 @@ define({ "api": [
|
||||
"filename": "./api.php",
|
||||
"groupTitle": "API"
|
||||
},
|
||||
{
|
||||
"success": {
|
||||
"fields": {
|
||||
"Success 200": [
|
||||
{
|
||||
"group": "Success 200",
|
||||
"optional": false,
|
||||
"field": "varname1",
|
||||
"description": "<p>No type.</p>"
|
||||
},
|
||||
{
|
||||
"group": "Success 200",
|
||||
"type": "String",
|
||||
"optional": false,
|
||||
"field": "varname2",
|
||||
"description": "<p>With type.</p>"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"type": "",
|
||||
"url": "",
|
||||
"version": "0.0.0",
|
||||
"filename": "./doc/main.js",
|
||||
"group": "C__Users_owen_voke_Documents_GitHub_php_arionum_node_doc_main_js",
|
||||
"groupTitle": "C__Users_owen_voke_Documents_GitHub_php_arionum_node_doc_main_js",
|
||||
"name": ""
|
||||
},
|
||||
{
|
||||
"type": "php util.php",
|
||||
"url": "balance",
|
||||
@@ -1835,5 +1858,33 @@ define({ "api": [
|
||||
"version": "0.0.0",
|
||||
"filename": "./util.php",
|
||||
"groupTitle": "UTIL"
|
||||
},
|
||||
{
|
||||
"success": {
|
||||
"fields": {
|
||||
"Success 200": [
|
||||
{
|
||||
"group": "Success 200",
|
||||
"optional": false,
|
||||
"field": "varname1",
|
||||
"description": "<p>No type.</p>"
|
||||
},
|
||||
{
|
||||
"group": "Success 200",
|
||||
"type": "String",
|
||||
"optional": false,
|
||||
"field": "varname2",
|
||||
"description": "<p>With type.</p>"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"type": "",
|
||||
"url": "",
|
||||
"version": "0.0.0",
|
||||
"filename": "./doc/main.js",
|
||||
"group": "_github_node_doc_main_js",
|
||||
"groupTitle": "_github_node_doc_main_js",
|
||||
"name": ""
|
||||
}
|
||||
] });
|
||||
|
||||
@@ -101,6 +101,50 @@
|
||||
"filename": "./api.php",
|
||||
"groupTitle": "API"
|
||||
},
|
||||
{
|
||||
"type": "get",
|
||||
"url": "/api.php?q=checkAddress",
|
||||
"title": "22. checkAddress",
|
||||
"name": "checkAddress",
|
||||
"group": "API",
|
||||
"description": "<p>Checks the validity of an address.</p>",
|
||||
"parameter": {
|
||||
"fields": {
|
||||
"Parameter": [
|
||||
{
|
||||
"group": "Parameter",
|
||||
"type": "string",
|
||||
"optional": false,
|
||||
"field": "account",
|
||||
"description": "<p>Account id / address</p>"
|
||||
},
|
||||
{
|
||||
"group": "Parameter",
|
||||
"type": "string",
|
||||
"optional": true,
|
||||
"field": "public_key",
|
||||
"description": "<p>Public key</p>"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"success": {
|
||||
"fields": {
|
||||
"Success 200": [
|
||||
{
|
||||
"group": "Success 200",
|
||||
"type": "boolean",
|
||||
"optional": false,
|
||||
"field": "data",
|
||||
"description": "<p>True if the address is valid, false otherwise.</p>"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"version": "0.0.0",
|
||||
"filename": "./api.php",
|
||||
"groupTitle": "API"
|
||||
},
|
||||
{
|
||||
"type": "get",
|
||||
"url": "/api.php?q=checkSignature",
|
||||
@@ -1080,6 +1124,13 @@
|
||||
"optional": false,
|
||||
"field": "data.masternodes",
|
||||
"description": "<p>The number of masternodes known by the node.</p>"
|
||||
},
|
||||
{
|
||||
"group": "Success 200",
|
||||
"type": "number",
|
||||
"optional": false,
|
||||
"field": "data.peers",
|
||||
"description": "<p>The number of valid peers.</p>"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1301,34 +1352,6 @@
|
||||
"filename": "./api.php",
|
||||
"groupTitle": "API"
|
||||
},
|
||||
{
|
||||
"success": {
|
||||
"fields": {
|
||||
"Success 200": [
|
||||
{
|
||||
"group": "Success 200",
|
||||
"optional": false,
|
||||
"field": "varname1",
|
||||
"description": "<p>No type.</p>"
|
||||
},
|
||||
{
|
||||
"group": "Success 200",
|
||||
"type": "String",
|
||||
"optional": false,
|
||||
"field": "varname2",
|
||||
"description": "<p>With type.</p>"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"type": "",
|
||||
"url": "",
|
||||
"version": "0.0.0",
|
||||
"filename": "./doc/main.js",
|
||||
"group": "C__Users_owen_voke_Documents_GitHub_php_arionum_node_doc_main_js",
|
||||
"groupTitle": "C__Users_owen_voke_Documents_GitHub_php_arionum_node_doc_main_js",
|
||||
"name": ""
|
||||
},
|
||||
{
|
||||
"type": "php util.php",
|
||||
"url": "balance",
|
||||
@@ -1835,5 +1858,33 @@
|
||||
"version": "0.0.0",
|
||||
"filename": "./util.php",
|
||||
"groupTitle": "UTIL"
|
||||
},
|
||||
{
|
||||
"success": {
|
||||
"fields": {
|
||||
"Success 200": [
|
||||
{
|
||||
"group": "Success 200",
|
||||
"optional": false,
|
||||
"field": "varname1",
|
||||
"description": "<p>No type.</p>"
|
||||
},
|
||||
{
|
||||
"group": "Success 200",
|
||||
"type": "String",
|
||||
"optional": false,
|
||||
"field": "varname2",
|
||||
"description": "<p>With type.</p>"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"type": "",
|
||||
"url": "",
|
||||
"version": "0.0.0",
|
||||
"filename": "./doc/main.js",
|
||||
"group": "_github_node_doc_main_js",
|
||||
"groupTitle": "_github_node_doc_main_js",
|
||||
"name": ""
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
define({
|
||||
"name": "Arionum Node",
|
||||
"name": "",
|
||||
"version": "0.0.0",
|
||||
"description": "The Arionum Node API and utility documentation.",
|
||||
"title": "Arionum Node",
|
||||
"description": "",
|
||||
"sampleUrl": false,
|
||||
"defaultVersion": "0.0.0",
|
||||
"apidoc": "0.3.0",
|
||||
"generator": {
|
||||
"name": "apidoc",
|
||||
"time": "2018-10-12T11:08:47.065Z",
|
||||
"time": "2018-11-05T10:13:13.657Z",
|
||||
"url": "http://apidocjs.com",
|
||||
"version": "0.17.6"
|
||||
}
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
{
|
||||
"name": "Arionum Node",
|
||||
"name": "",
|
||||
"version": "0.0.0",
|
||||
"description": "The Arionum Node API and utility documentation.",
|
||||
"title": "Arionum Node",
|
||||
"description": "",
|
||||
"sampleUrl": false,
|
||||
"defaultVersion": "0.0.0",
|
||||
"apidoc": "0.3.0",
|
||||
"generator": {
|
||||
"name": "apidoc",
|
||||
"time": "2018-10-12T11:08:47.065Z",
|
||||
"time": "2018-11-05T10:13:13.657Z",
|
||||
"url": "http://apidocjs.com",
|
||||
"version": "0.17.6"
|
||||
}
|
||||
|
||||
@@ -35,8 +35,40 @@ class Account
|
||||
return 'RncXQuc7S7aWkvTUJSHEFvYoV3ntAf7bfxEHjSiZNBvQV37MzZtg44L7GAV7szZ3uV8qWqikBewa3piZMqzBqm';
|
||||
} elseif ($hash == 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCyjKMBY4ihhJ2G25EVezg7KnoCBVbhdvWfqzNA4LC5R7wgu3VNfJgvqkCq9sKKZcCoCpX6Qr9cN882MoXsfGTvZoj') {
|
||||
return 'Rq53oLzpCrb4BdJZ1jqQ2zsixV2ukxVdM4H9uvUhCGJCz1q2wagvuXV4hC6UVwK7HqAt1FenukzhVXgzyG1y32';
|
||||
} elseif ($hash == 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCzZtEj6zAW8WVB6AbDLndbQZrnH2R5Nmpk1sLyHXzqyp4P5cyJAbnUpR5UdG8sBCCuZekWSBHgWNMaGS317vPsVuG'){
|
||||
// mixed keys badly generated address
|
||||
return '3CWXXqpzuda85MaPpgYRee8d7a44wzemqztfFfeZDyEysQ15cN6gZNsPT32MHwjrzbENDvkqKtADoCBgVVqXWP2g';
|
||||
} elseif ($hash == 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCwYhtqidHRVigBiQiun5csb9YnZzcvmSt7aCVS6nH2gYykLr9pQfJHP8bTtYTMkU1WLdmeTkNPGDujYWKjPSGU8XX'){
|
||||
// broken wallet due to webwallet bug
|
||||
return '4JstC5anTNMpY2zmUHt2LDmQXsMQvkh7d9qHBjBhRahAsWVTyyS9RPYMRdmcqdVPSDUQsXJfGyPFMn6y6R9M5QQ7';
|
||||
} elseif ($hash == 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCwoUzVYoaDZGausEDEg5JMtiRQvdmuuv1FKvCxUp6m8iMJhKbohtH75wXPBgi4wYPMSUw4himHeJ3qnDpAQnKSsJU'){
|
||||
// stolen coins hf recovery
|
||||
return '4VLRngC3U24YdusKQ4rGfCX4DDfBUcNemH419wUS5xe2uUf3ku1CXq6RCfGoiZvDK61upmLfrb64YWubyh5eUG4Y';
|
||||
} elseif ($hash == 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCvgAVPik2t9yfM63rDCy13opmvejvMXadRb6qKjEoaiFkGCJHKBUSzggaEtgyDVkRk7ajREQjRrN6J4EcoXTzGM3p'){
|
||||
// stolen coins hf recovery
|
||||
return 'SBWPS7Yu4X4ZQFY9n27bkBL5AnDRveUBbfbZWwhEN1tWZnTCEc8kvx7ddfoaqhjw7tw8rQULk2fEgSB1r2vWqKp';
|
||||
} elseif ($hash == 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCz1Adkpo6MRTogSUKLtEh5NKo1Y8sumnNKqhRW8w2bZtVfMT4sfbStg8ycqtmQNDztvUE39MVHnXmCDtpmv9KKdQN'){
|
||||
// stolen coins hf recovery
|
||||
return 'reMoRxfiUxtoj7RD1aDH5yNfeuXEyTj2XiHaUBdVUhk8Wt5f4VLWrqge6J5yE9BGkVLFPqfS6ZYvj4ocWhbZhru';
|
||||
} elseif ($hash == 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCxXrhv7wkhX4R2YjyRNfssf15wTksz5Ev4FFGfCmhcUL7kt5aXRvh6xknQf5HHzDo4GsG523wBYcFhiAkmBL1kkUo'){
|
||||
// stolen coins hf recovery
|
||||
return '3goaif939N4xy5ThT7iq2GhBgwjrS4buhhTtTQkXrzarKcsYvyg5PU8KVgzrSfgFfhnZGNx9WseaR2JSUpYn1Vch';
|
||||
} elseif ($hash == 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCzhTJ5G37ijQcgdzUsMMVyAPFaxLCyssQjqYF1g1Zsr3XkzYux3Dt75y3DRmXmx6wiNTf7uKxAGFaQA7qao7TXp9j'){
|
||||
// stolen coins hf recovery
|
||||
return 'LtjGjTTurwLNZLbexAbusCRS5SNYhFydMuFdPTaYFRD3WoL2q67tidsrd7qnX8czmTBhrDyrdheP5gCwCbAHBBd';
|
||||
} elseif ($hash == 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCwrgAsdSZtv9e4Ldw2mzg7HwQMHzG1FFVzoRtENwDRZxhRTwSGYU4oUXVLzNWNqpRZ6iEZXenxUANScwr7yDET7xA'){
|
||||
// stolen coins hf recovery
|
||||
return 'aSpfMMbxA8U1rMqBgYoQtXhUyAKyhBJHY17CEW4V3ttgRsvpuZ1Dg3xYc1rcMeKnP2gT2sxnn7vHpmLAVVPQv7w';
|
||||
} elseif ($hash == 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCzPi4ZmDK5E7vNVz14AiJmvcT9UbxXDDWzNVYt973Sqgt6p6BQtuqkJ3X3UM92mbjxVLg3xzmhZricuUSx5J811nW'){
|
||||
// stolen coins hf recovery
|
||||
return '98MsWpiv3fcutf4Mm94wYKZeeS556EAvMWEBLc12y5nf5QzNtD6hDfCuWcJMUr9Q9qmbj8kS326EGuiiTW7YJDo';
|
||||
} elseif ($hash == 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCz9iKvAxdReMiDYmBWJb3GnjeTnNLwE8y7fuyBwFDbRLpECwnscbXSLGXMmvPMbMMRYSnnc7aTyLJBzw7tqxGNw4K'){
|
||||
// stolen coins hf recovery
|
||||
return '2xQGMH8qQuaTeKSYya5wYPWA9dgqiKBBDSeDWu1aUuBhKi8LnsukknqcUDRdzS7VVeC7aezK6Azhkx6L7H24pUjo';
|
||||
}
|
||||
|
||||
|
||||
|
||||
// hashes 9 times in sha512 (binary) and encodes in base58
|
||||
for ($i = 0; $i < 9;
|
||||
$i++) {
|
||||
|
||||
@@ -157,6 +157,8 @@ class Block
|
||||
$db->exec("UNLOCK TABLES");
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->do_hard_forks($height, $hash);
|
||||
}
|
||||
|
||||
// parse the block's transactions and insert them to db
|
||||
@@ -177,6 +179,74 @@ class Block
|
||||
return true;
|
||||
}
|
||||
|
||||
public function do_hard_forks($height, $block)
|
||||
{
|
||||
global $db;
|
||||
if ($height==126215) {
|
||||
// compromised masternodes are being removed
|
||||
$mns=['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',
|
||||
];
|
||||
|
||||
foreach ($mns as $mn) {
|
||||
$db->run("DELETE FROM masternode WHERE public_key=:p", [":p"=>$mn]);
|
||||
}
|
||||
// their locked coins are added to dev's safewallet
|
||||
$id=hex2coin(hash("sha512", "hf".$block.$height.'compromised-masternodes'));
|
||||
$res=$db->run(
|
||||
"INSERT into transactions SET id=:id, block=:block, height=:height, dst=:dst, val=4700000, fee=0, signature=:sig, version=0, message=:msg, date=:date, public_key=:public_key",
|
||||
[":id"=>$id, ":block"=>$block, ":height"=>$height, ":dst"=>'4kWXV4HMuogUcjZBEzmmQdtc1dHzta6VykhCV1HWyEXK7kRWEMJLNoMWbuDwFMTfBrq5a9VthkZfmkMkamTfwRBP', ":sig"=>$id, ":msg"=>'compromised-masternodes-hf', ":date"=>time(), ":public_key"=>'4kWXV4HMuogUcjZBEzmmQdtc1dHzta6VykhCV1HWyEXK7kRWEMJLNoMWbuDwFMTfBrq5a9VthkZfmkMkamTfwRBP']
|
||||
);
|
||||
$db->run("UPDATE accounts SET balance=balance+4700000 where id='4kWXV4HMuogUcjZBEzmmQdtc1dHzta6VykhCV1HWyEXK7kRWEMJLNoMWbuDwFMTfBrq5a9VthkZfmkMkamTfwRBP' LIMIT 1");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// resets the number of fails when winning a block and marks it with a transaction
|
||||
|
||||
public function reset_fails_masternodes($public_key, $height, $hash)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
// ARO version
|
||||
define("VERSION", "0.4.3");
|
||||
define("VERSION", "0.4.4");
|
||||
// Amsterdam timezone by default, should probably be moved to config
|
||||
date_default_timezone_set("UTC");
|
||||
|
||||
|
||||
@@ -164,7 +164,10 @@ if ($dbversion == 8) {
|
||||
ADD KEY `height` (`height`);");
|
||||
$dbversion++;
|
||||
}
|
||||
|
||||
if ($dbversion = 9) {
|
||||
//dev only
|
||||
$dbversion++;
|
||||
}
|
||||
|
||||
|
||||
// update the db version to the latest one
|
||||
|
||||
34
sanity.php
34
sanity.php
@@ -23,6 +23,9 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
||||
OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
const SANITY_LOCK_PATH = __DIR__.'/tmp/sanity-lock';
|
||||
|
||||
set_time_limit(0);
|
||||
error_reporting(0);
|
||||
|
||||
@@ -31,8 +34,10 @@ if (php_sapi_name() !== 'cli') {
|
||||
die("This should only be run as cli");
|
||||
}
|
||||
|
||||
require_once __DIR__.'/include/init.inc.php';
|
||||
|
||||
// make sure there's only a single sanity process running at the same time
|
||||
if (file_exists("tmp/sanity-lock")) {
|
||||
if (file_exists(SANITY_LOCK_PATH)) {
|
||||
$ignore_lock = false;
|
||||
if ($argv[1] == "force") {
|
||||
$res = intval(shell_exec("ps aux|grep sanity.php|grep -v grep|wc -l"));
|
||||
@@ -40,17 +45,20 @@ if (file_exists("tmp/sanity-lock")) {
|
||||
$ignore_lock = true;
|
||||
}
|
||||
}
|
||||
$pid_time = filemtime("tmp/sanity-lock");
|
||||
// if the process died, restart after 1day
|
||||
if (time() - $pid_time > 86400) {
|
||||
@unlink("tmp/sanity-lock");
|
||||
$pid_time = filemtime(SANITY_LOCK_PATH);
|
||||
|
||||
// If the process died, restart after 10 times the sanity interval
|
||||
if (time() - $pid_time > ($_config['sanity_interval'] ?? 900 * 10)) {
|
||||
@unlink(SANITY_LOCK_PATH);
|
||||
}
|
||||
|
||||
if (!$ignore_lock) {
|
||||
die("Sanity lock in place");
|
||||
die("Sanity lock in place".PHP_EOL);
|
||||
}
|
||||
}
|
||||
|
||||
// set the new sanity lock
|
||||
$lock = fopen("tmp/sanity-lock", "w");
|
||||
$lock = fopen(SANITY_LOCK_PATH, "w");
|
||||
fclose($lock);
|
||||
$arg = trim($argv[1]);
|
||||
$arg2 = trim($argv[2]);
|
||||
@@ -60,8 +68,6 @@ if ($arg != "microsanity") {
|
||||
sleep(3);
|
||||
}
|
||||
|
||||
require_once __DIR__.'/include/init.inc.php';
|
||||
|
||||
if ($argv[1]=="dev") {
|
||||
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
|
||||
ini_set("display_errors", "on");
|
||||
@@ -70,7 +76,7 @@ if ($argv[1]=="dev") {
|
||||
// the sanity can't run without the schema being installed
|
||||
if ($_config['dbversion'] < 2) {
|
||||
die("DB schema not created");
|
||||
@unlink("tmp/sanity-lock");
|
||||
@unlink(SANITY_LOCK_PATH);
|
||||
exit;
|
||||
}
|
||||
|
||||
@@ -233,7 +239,7 @@ if ($arg == "microsanity" && !empty($arg2)) {
|
||||
_log("Synced block from $host - $b[height] $b[difficulty]");
|
||||
} while (0);
|
||||
|
||||
@unlink("tmp/sanity-lock");
|
||||
@unlink(SANITY_LOCK_PATH);
|
||||
exit;
|
||||
}
|
||||
|
||||
@@ -273,7 +279,7 @@ if ($total_peers == 0 && $_config['testnet'] == false) {
|
||||
try {
|
||||
$peers = $initialPeers->getAll();
|
||||
} catch (\Arionum\Node\Exception $e) {
|
||||
@unlink('tmp/sanity-lock');
|
||||
@unlink(SANITY_LOCK_PATH);
|
||||
die($e->getMessage().PHP_EOL);
|
||||
}
|
||||
|
||||
@@ -325,7 +331,7 @@ if ($total_peers == 0 && $_config['testnet'] == false) {
|
||||
$total_peers = count($r);
|
||||
if ($total_peers == 0) {
|
||||
// something went wrong, could not add any peers -> exit
|
||||
@unlink("tmp/sanity-lock");
|
||||
@unlink(SANITY_LOCK_PATH);
|
||||
die("Could not peer to any peers! Please check internet connectivity!\n");
|
||||
}
|
||||
}
|
||||
@@ -798,4 +804,4 @@ if ($_config['sanity_recheck_blocks'] > 0 && $_config['testnet'] == false) {
|
||||
|
||||
_log("Finishing sanity");
|
||||
|
||||
@unlink("tmp/sanity-lock");
|
||||
@unlink(SANITY_LOCK_PATH);
|
||||
|
||||
3
tmp/.gitignore
vendored
Normal file
3
tmp/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
*
|
||||
!.gitignore
|
||||
!db-update
|
||||
Reference in New Issue
Block a user