16 Commits

Author SHA1 Message Date
admin@arionum.com
d03cd9e9f6 version 2018-12-26 01:12:00 +02:00
admin@arionum.com
f700c3a1c7 Merge branch 'master' of https://github.com/arionum/node
hf recovery
2018-12-25 22:44:33 +02:00
admin@arionum.com
f564e7efa1 hf recovery 2018-12-25 22:44:29 +02:00
arionum
55c2ccc12c Merge pull request #41 from pxgamer/feature/temp-ignore
Add Git ignore file to the tmp directory
2018-12-13 21:23:44 +02:00
pxgamer
0d181f5512 Add Git ignore file to the tmp directory
The sanity process generates a lot of temporary files in the tmp
directory. These display as untracked changes in Git and make it a lot
harder to view only actual changes to the repository.
2018-12-07 11:31:52 +00:00
arionum
cf6811d5c0 Merge pull request #37 from pxgamer/bugfix/public-key-transactions
Add missing public_key to getPendingBalance
2018-11-13 12:21:56 +02:00
pxgamer
d3d20f596b Add missing public_key to getPendingBalance 2018-11-07 11:58:07 +00:00
arionum
54c9d063be Merge pull request #36 from pxgamer/bugfix/public-key-transactions
Add public_key variable where it was undefined
2018-11-05 14:40:22 +02:00
pxgamer
be078f910f Add public_key variable where it was undefined
Previously the public_key variable is being referenced but it is never
set in this API call. This allows the correct functionality to occur
when the public_key query parameter is set.
2018-11-05 11:58:44 +00:00
admin@arionum.com
6252d4e3fe api typo 2018-11-05 12:13:45 +02:00
admin@arionum.com
90fb711d2a 10x sanity lock timeout 2018-11-05 11:47:50 +02:00
arionum
271815e731 Merge pull request #35 from pxgamer/feature/sanity-orphan
Update to use the sanity interval for the lock
2018-11-05 11:45:23 +02:00
admin@arionum.com
1a8b491fba checkAddress API 2018-11-05 11:42:41 +02:00
pxgamer
d6235f4121 Set a sanity interval fallback if it isn't set 2018-10-30 09:18:20 +00:00
pxgamer
dacd9420a1 Standardise the sanity path 2018-10-29 17:49:38 +00:00
pxgamer
7e11df5a28 Update to use the sanity interval for the lock 2018-10-29 17:44:15 +00:00
12 changed files with 333 additions and 84 deletions

37
api.php
View File

@@ -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");
}

View File

@@ -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": ""
}
] });

View File

@@ -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": ""
}
]

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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++) {

View File

@@ -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)
@@ -276,7 +346,7 @@ class Block
// before mnn hf
if ($height<80000) {
// elapsed time between the last 20 blocks
$first = $db->row("SELECT `date` FROM blocks ORDER by height DESC LIMIT :limit,1",[":limit"=>$limit]);
$first = $db->row("SELECT `date` FROM blocks ORDER by height DESC LIMIT :limit,1", [":limit"=>$limit]);
$time = $current['date'] - $first['date'];
// avg block time

View File

@@ -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");

View File

@@ -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

View File

@@ -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
View File

@@ -0,0 +1,3 @@
*
!.gitignore
!db-update