diff --git a/ONE_BRANCH_TO_RULE_THEM_ALL.md b/ONE_BRANCH_TO_RULE_THEM_ALL.md new file mode 100644 index 00000000..b5873d20 --- /dev/null +++ b/ONE_BRANCH_TO_RULE_THEM_ALL.md @@ -0,0 +1,138 @@ +# One Branch to Rule Them All + +This branch refactors the PHPCoin codebase to support multiple networks (mainnet and testnet) from a single `main` branch. The active network is determined by the contents of a `./chain_id` file. + +## What was done + +* **Multi-network support:** The codebase was refactored to support multiple networks from a single branch. +* **`chain_id` file:** The `./chain_id` file is now the source of truth for determining the active network. `00` for mainnet, `01` for testnet. +* **Network-specific configurations:** Per-chain files for config, checkpoints, rewards, coinspecs, and genesis have been created. +* **Dynamic loading:** The code now dynamically loads the correct network-specific files based on the `chain_id`. +* **Refactored network identification:** The code has been refactored to use `CHAIN_ID` instead of `NETWORK` for network identification. +* **Updated scripts:** The `install_node.sh`, `build/docker/miner/start.sh`, and `build/docker/node/docker_start.sh` scripts have been updated to be driven by the `chain_id` file. +* **Safe defaults:** The system now safely defaults to mainnet if the `chain_id` file is missing or invalid. + +## Updating Existing Installations + +### From `main` (mainnet) + +1. **Back up the database:** + ```bash + sudo mysqldump phpcoin > phpcoin_backup.sql + ``` +2. **Back up the application directory:** + ```bash + sudo cp -a /var/www/phpcoin-mainnet /var/www/phpcoin-mainnet.bak + ``` +3. **Move the installation directory:** + ```bash + sudo mv /var/www/phpcoin-mainnet /var/www/phpcoin + ``` +4. **Update the code:** + ```bash + cd /var/www/phpcoin + git pull origin one_branch_to_rule_them_all + ``` +5. **Rename the database:** + ```bash + sudo mysql -e "RENAME DATABASE phpcoin TO phpcoin_00;" + ``` +6. **Create the `chain_id` file:** + ```bash + echo "00" > chain_id + ``` +7. **Handle the configuration file:** + ```bash + cd /var/www/phpcoin + mv config/config.inc.php config/config.inc.php.bak + cp config/config-sample.inc.php config/config.inc.php + ``` + *After this, you will need to manually copy your old settings from `config.inc.php.bak` to the new `config.inc.php`.* +8. **Re-run the install script to update configurations:** + ```bash + cd /var/www/phpcoin + sudo bash scripts/install_node.sh + ``` + +### From `test` (testnet) + +1. **Back up the database:** + ```bash + sudo mysqldump phpcoin > phpcoin_backup.sql + ``` +2. **Back up the application directory:** + ```bash + sudo cp -a /var/www/phpcoin-testnet /var/www/phpcoin-testnet.bak + ``` +3. **Move the installation directory:** + ```bash + sudo mv /var/www/phpcoin-testnet /var/www/phpcoin + ``` +4. **Update the code:** + ```bash + cd /var/www/phpcoin + git pull origin one_branch_to_rule_them_all + ``` +5. **Rename the database:** + ```bash + sudo mysql -e "RENAME DATABASE phpcoin TO phpcoin_01;" + ``` +6. **Create the `chain_id` file:** + ```bash + echo "01" > chain_id + ``` +7. **Handle the configuration file:** + ```bash + cd /var/www/phpcoin + mv config/config.inc.php config/config.inc.php.bak + cp config/config-sample.inc.php config/config.inc.php + ``` + *After this, you will need to manually copy your old settings from `config.inc.php.bak` to the new `config.inc.php`.* +8. **Re-run the install script to update configurations:** + ```bash + cd /var/www/phpcoin + sudo bash scripts/install_node.sh + ``` + +## What needs to be tested + +### 1. Installation + +* **`install_node.sh`** + * Run the script with a `chain_id` file containing `00` and verify that a mainnet node is installed. + * Check that the `phpcoin_00` database is created. + * Check that the nginx configuration is created for port 80. + * Check that the mainnet blockchain is imported. + * Run the script with a `chain_id` file containing `01` and verify that a testnet node is installed. + * Check that the `phpcoin_01` database is created. + * Check that the nginx configuration is created for port 81. + * Check that the testnet blockchain is imported. + * Run the script without a `chain_id` file and verify that a mainnet node is installed by default. + +### 2. Docker + +* **Node** + * Build and run the node container with `CHAIN_ID=00` and verify that a mainnet node is started. + * Build and run the node container with `CHAIN_ID=01` and verify that a testnet node is started. +* **Miner** + * Build and run the miner container with a `chain_id` file containing `00` and verify that it connects to the mainnet mining node. + * Build and run the miner container with a `chain_id` file containing `01` and verify that it connects to the testnet mining node. + +### 3. Application Logic + +* **Database Connection** + * Verify that the application connects to the `phpcoin_00` database when `chain_id` is `00`. + * Verify that the application connects to the `phpcoin_01` database when `chain_id` is `01`. +* **Configuration Loading** + * Verify that the correct `config.XX.php`, `checkpoints.XX.php`, `rewards.XX.php`, `coinspec.XX.php`, and `genesis.XX.php` files are loaded based on the `chain_id`. +* **Network-specific Logic** + * Verify that all logic that was previously dependent on the `NETWORK` constant now correctly uses the `CHAIN_ID` constant. + * Specifically check the following files: + * `include/class/Blockchain.php` + * `include/class/Transaction.php` + * `web/apps/common/include/top.php` + * `web/apps/explorer/address.php` + +## Auto-update + +The auto-update feature is compatible with the One Branch system. The `chain_id` of the node will be preserved during the auto-update process. The auto-updater is also branch-aware, meaning it will pull updates for the currently checked-out git branch, making it safe to use on development branches. diff --git a/build/docker/miner/README.md b/build/docker/miner/README.md index a62637bf..2e758d75 100644 --- a/build/docker/miner/README.md +++ b/build/docker/miner/README.md @@ -1,30 +1,19 @@ -Docker image for running PHPCoin miner. +# PHPCoin miner on docker + +You can run the phpcoin miner using docker. -Start with command: -``` docker run -itd --name phpcoin-miner \ --e NETWORK= \ --e NODE= \ --e ADDRESS=
\ --e CPU= \ +-e ADDRESS= \ +-e NODE= \ +-e CPU= \ -e THREADS= \ +-v /path/to/your/phpcoin/chain_id:/phpcoin/chain_id \ phpcoin/miner -``` - - -Options: - -NETWORK: mainnet(default) or testnet - -NODE: specify mining node or use default network nodes - -ADDRESS: address where mining rewards goes - -CPU: maximum usage of single CPU (default 100%) -THREADS: number of CPU threads to use (default all) +Explanation of parameters: -Check miner status -``` -docker logs -f phpcoin-miner -``` +ADDRESS: your address where you will receive the mining reward +NODE: the url of the node where you are mining +CPU: the percent of cpu to be used for mining +THREADS: number of threads to be used for mining +/path/to/your/phpcoin/chain_id: the path to your `chain_id` file. This is used to determine whether to mine on mainnet or testnet. diff --git a/build/docker/miner/start.sh b/build/docker/miner/start.sh index cd92dc37..65025163 100644 --- a/build/docker/miner/start.sh +++ b/build/docker/miner/start.sh @@ -1,14 +1,19 @@ #!/bin/bash +CHAIN_ID_FILE="/phpcoin/chain_id" +if [ -f "$CHAIN_ID_FILE" ]; then + CHAIN_ID=$(cat "$CHAIN_ID_FILE") +else + CHAIN_ID="00" +fi -NETWORK="${NETWORK:-mainnet}" ADDRESS="${ADDRESS:-PtD756PoeBfw6KgCLqjpD4sYdZsaFu536F}" CPU="${CPU:-100}" NUM_THREADS=$(nproc --all) THREADS="${THREADS:-$NUM_THREADS}" MINING_NODE=https://m1.phpcoin.net -if [ "$NETWORK" = "testnet" ] +if [ "$CHAIN_ID" = "01" ] then MINING_NODE=https://miner1.phpcoin.net fi diff --git a/build/docker/node/Dockerfile b/build/docker/node/Dockerfile index 2f25aad7..83e1e919 100755 --- a/build/docker/node/Dockerfile +++ b/build/docker/node/Dockerfile @@ -1,8 +1,5 @@ FROM ubuntu:22.04 -ARG NETWORK=mainnet -ENV NETWORK=$NETWORK - ENV DEBIAN_FRONTEND=noninteractive EXPOSE 80 diff --git a/build/docker/node/README.md b/build/docker/node/README.md index d3b54b51..e10bc7ae 100644 --- a/build/docker/node/README.md +++ b/build/docker/node/README.md @@ -1,16 +1,18 @@ -This is docker image for PHPCoin node (mainnet and testnet). +# PHPCoin node on docker -On first run container will download install script, install node and restore latest blockchain database +You can run your own phpcoin node using docker. -In order to preserve config file with private keys you should create volume and start container with volume: +This will run a full node, with miner enabled, open api, and admin panel. -``` -docker volume create phpcoin-config -docker run -itd --name phpcoin -p 81:80 -e EXT_PORT=81 -v phpcoin-config:/var/www/phpcoin/config phpcoin/node -``` +To run a mainnet node: +docker run -itd --name phpcoin-main -p 80:80 -e EXT_PORT=80 -e CHAIN_ID=00 -v phpcoin-config-main:/var/www/phpcoin/config phpcoin/node -For running testnet node run container with other parameters: -``` -docker volume create phpcoin-config-test -docker run -itd --name phpcoin-test -p 91:80 -e EXT_PORT=91 -e NETWORK=testnet -v phpcoin-config-test:/var/www/phpcoin/config phpcoin/node -``` +To run a testnet node: +docker run -itd --name phpcoin-test -p 91:80 -e EXT_PORT=91 -e CHAIN_ID=01 -v phpcoin-config-test:/var/www/phpcoin/config phpcoin/node + +This will map the config folder to a volume, so you can keep the node configuration. +You can check the node logs by running: +docker logs -f phpcoin-main + +To enter the node shell, run: +docker exec -it phpcoin-main bash diff --git a/build/docker/node/docker_start.sh b/build/docker/node/docker_start.sh index efc2dbc8..d33d32f4 100644 --- a/build/docker/node/docker_start.sh +++ b/build/docker/node/docker_start.sh @@ -3,14 +3,14 @@ FILE=/first-run if test -f "$FILE"; then echo "First run node" - wget https://phpcoin.net/scripts/install_node.sh -O /install_node.sh - chmod +x install_node.sh - if [ "$NETWORK" = "mainnet" ] - then - /install_node.sh --docker + if [ "$CHAIN_ID" = "01" ]; then + echo "01" > /var/www/phpcoin/chain_id else - /install_node.sh --docker --network testnet + echo "00" > /var/www/phpcoin/chain_id fi + wget https://phpcoin.net/scripts/install_node.sh -O /install_node.sh + chmod +x install_node.sh + /install_node.sh --docker rm $FILE rm /install_node.sh else diff --git a/config/config.00.php b/config/config.00.php new file mode 100644 index 00000000..776ff2e3 --- /dev/null +++ b/config/config.00.php @@ -0,0 +1,105 @@ + "2ucwGhYszGUTZwmiT5YMsw3tn9nfhdTciaaKMMTX77Zw", // 2023-04-01 12:00:00 + 1000 => "6seZYqyH83Us7NhX3N9TgB8jqgkFrCc9etpQsiUL3coz", // 2023-04-02 06:32:45 + 5000 => "BLLhY8L5kr61jmwjF252qNBuBaL1Sxhz8TurgJ1MZVbR", // 2023-04-05 08:51:32 + 10000 => "5FCNEW8bRgb6pv7YXub755ijSU2DQJ15EqSdd4USMj98", // 2023-04-09 08:02:27 + 15000 => "CmFpsmEew6kCUgwFRPyvbYKGmiXZ4Hd1Gedoa6q98TJV", // 2023-04-13 04:38:58 + 20000 => "3LYBUKS1UFyPnY6ne3vz8zaYAWA36p75jvJzX1LZAJCi", // 2023-04-17 01:17:58 + 25000 => "29oP8cKUKawXvQgfV5prURUPytZt58iFqUug3cQd9ndf", // 2023-04-21 09:51:44 + 30000 => "AyuYpXTxSimipWXw9kaXg5A3Cu9gX7VcoFh5k2HhXMTp", // 2023-04-25 06:36:46 + 35000 => "wnV5doKG5L5do9X7ZK9ceTsEY38n4ktYgdZatpuyM1L", // 2023-04-29 03:35:22 + 40000 => "BBC84NpVjBtcaxdSPjCzHZm1J9XZ8hdoC38kPwLouatj", // 2023-05-03 00:16:23 + 45000 => "8fFgPVrVjWZQNWUkvWB4VUngdS9XFhVUEyZXnQFLaxuR", // 2023-05-06 21:41:47 + 50000 => "2RmopeRpxuFp6VM64v2Czyph7sTL3MXxJcPSGLBod2up", // 2023-05-10 17:54:22 + 55000 => "HXH4ts6j4eiXUHcg7G4KRJDsMgvckxXWzuwfV5FWbFvd", // 2023-05-14 14:40:19 + 60000 => "BHoaS3rkuP5LAJEm29YRhrUvm3edYjT87hhdXSzk9ks5", // 2023-05-18 10:50:49 + 65000 => "2KErUePq6U1Y8PjMzY9bMqS1GVWJzhKZUZjLpy7d9Jo9", // 2023-05-22 07:38:45 + 70000 => "DQbeBLfmtWob728NbrSTQER85mKgReXoENEjpa82r4Tp", // 2023-05-26 04:19:49 + 75000 => "4ZQfMnbzxQwnWpaXP1qzBaBoEwHiGxEHz4GxWPCVdMNx", // 2023-05-30 01:02:00 + 80000 => "NgHvZG4FKAXsmpDJg3xKr4MMFd7QFwZfixgvBMmBwAo", // 2023-06-02 21:31:42 + 85000 => "CEbViLj1VV49uE59JHLH3bMiK8mRQrYNejUHdzmVxbqB", // 2023-06-06 18:20:47 + 90000 => "9krGDi3N5xFWCCisEfG8igN9KgitUXGKhfwkqDZUdL9u", // 2023-06-10 15:39:39 + 95000 => "8MK419JyWhw4LVDm9bKZLmNjJo7FxckdKQszr5GV2BB5", // 2023-06-14 12:17:28 + 100000 => "6HTPwZc1u61FwUiBr779LM2nbDz5PuBFWeJJ3Gj88XQH", // 2023-06-18 09:23:09 + 105000 => "FzfkJLKmFYgoACAfwGScpKwDT5xn2xQiwrTpHCjyjCtL", // 2023-06-22 12:53:07 + 110000 => "co7GUpcXfGhzXB4mA6SEnDG96aZnQvRbrTvoZjvDYK3", // 2023-06-26 10:02:22 + 115000 => "BaRmc2zGGfkkvpdiB5XFn9T1NT5gzjxUb15xhtsecguW", // 2023-06-30 06:55:45 + 120000 => "LGvaKxz7waNciZJmwvnDAbkVdD1tW9UtJUUrkNoosQ5", // 2023-07-04 03:29:19 + 125000 => "zRNyPzprDx3X6VC4VPEtBGwcJcrtdRZMPx1maKMea8g", // 2023-07-07 23:56:57 + 130000 => "8PxbARg5VXuPh3mht9GrjWG5KLofwUjThEqmE1jFFn4c", // 2023-07-11 20:36:01 + 135000 => "HGNCvLHPmjsAa6c6BKTeqBeVD8daMDkpVKcG2T9HqZmT", // 2023-07-15 17:13:59 + 140000 => "4MtFPyDkTKf9FG8oQrkYWdGUS2m1VywaqzATvkZ3v5Rb", // 2023-07-19 13:40:35 + 145000 => "DW2CXDrV7x1xseN6aLf6jqqRgGNAZrZtk8wdDBtPMUmn", // 2023-07-23 10:23:16 + 150000 => "GeLkDJiMAz2qmM1kshykXQ8GMY3uP1C7yWKnxaxNicKX", // 2023-07-27 06:48:31 + 155000 => "DRUmtpY5qLN1AGR4whFFNRG98ntuexsdNt2wE7eMK8rV", // 2023-07-31 03:30:09 + 160000 => "ANhmZm9Rxcfyx8XNrcmtW6TzVz5urSzVakHZ8WsFjqLn", // 2023-08-04 00:15:49 + 165000 => "4M5VaRNxCmN5jmLf4fT4eW93vike4aQ6daYsAqqmDsn6", // 2023-08-07 21:21:44 + 170000 => "FT9Fbj1H2NcHBNiwy3RBRmBj4X7mWfRFvhyzkQtbehyu", // 2023-08-11 17:52:02 + 175000 => "5791qWxYd9sZ4naiEN1Hugi4LUDNr7Z7ecUke9JPyJvc", // 2023-08-15 14:22:24 + 180000 => "AUEp97Miy7ydDv5UW9fdx9Mpu4ZaDjHc2UWHUeMnKBAx", // 2023-08-19 10:34:05 + 185000 => "9M4tR8Ns9h3BTL63nefqRC4p7iaRNVedBJRdFeTHvFC1", // 2023-08-23 07:56:55 + 190000 => "CsF4UAXs3QJjhGfwF72sPuRPC9fbPP8zjLNRFEaV5ARC", // 2023-08-27 04:47:29 + 195000 => "EufiD5sSvcT8snK4UfRJQQGZSTLykSaafxy52NX5YusQ", // 2023-08-31 01:55:08 + 200000 => "4DLgryKvXKFhCNhdu3MEHya683sQ38sXnfRPGa6QBE2K", // 2023-09-03 23:12:58 + 205000 => "GpEwQMBybTXo8MDUacT5HQNdfLVx2nnx5jiQiPw54D2o", // 2023-09-07 19:52:22 + 210000 => "F4SZsmwdeff6NzeVRxVM7kUnUdqqgyAyopn6jGe5gmt3", // 2023-09-11 16:20:12 + 215000 => "APn8nnKJgpYzhEx42k6w5Zmb7H8j1EfA5M9vfhdWhDqd", // 2023-09-15 13:28:51 + 220000 => "CKDvEWgBxfE6ex8XQvVEmy5vQGVTfq13ANx5cZzzALoD", // 2023-09-19 10:14:19 + 225000 => "8U3ArGTHSsX7hPYtvpYLeGtQGHxWi78LShjSC23R9N8", // 2023-09-23 06:59:46 + 230000 => "GS2NEkDe4atZdT7n5Jk8ZT16eEKLNU3VqZS7yWT3KauA", // 2023-09-27 03:31:53 + 235000 => "DKwboNHf48i7JK1skZFoYxwfsRBLbuUYm6c68ZGrcL4C", // 2023-10-01 00:05:31 + 240000 => "6ghugWoXVVkGKo5qFs5LpV5cfvLXvZXruTuwfvZA3PxC", // 2023-10-04 21:06:02 + 245000 => "6GX5cijXxymBBEFiA418uQXd42BkPZ6mVKqiv5CvL4tB", // 2023-10-08 17:23:03 + 250000 => "BfM45EWHKi3vYEjAKh4dzeoV8cud2XKbuoh59Tnfiwu3", // 2023-10-12 14:03:43 + 255000 => "3U4pvPzMEpouVUSBpfNfk5czQ6PqcSQTRj3dnmnwArDz", // 2023-10-16 10:43:28 + 260000 => "GdgKNrEGEDMwudBspHt7rCFN6c3cgfwdEAAqrSkCsBDP", // 2023-10-20 07:47:47 + 265000 => "3ySM9bkqApnTzAKcVDeZdsAxShJBmsdjQtd3XgBwe4nJ", // 2023-10-24 04:08:32 + 270000 => "4FF1dvmzkerDZXZYhJ81jqeSfan135kFDhA3s54ExT3a", // 2023-10-28 00:42:15 + 275000 => "AMx9xv4DVw9tTyDXTx96TDBZoUj4ofuPj5ZqVYqiWVCB", // 2023-10-31 21:42:56 + 280000 => "B88eRpXsDNUv73gWEA5bq3qgG8zWCfs73bSPMPFjspS9", // 2023-11-04 18:26:38 + 285000 => "FWMYy9TzbPXHFJNsZ1Q2gx59VxRJg9g5oJdJEvbYUUsA", // 2023-11-08 15:04:40 + 290000 => "BhDiLZmS1FCRarPMqq51r1xRUTpcKq77u5DWnjgJnUvP", // 2023-11-12 11:17:01 + 295000 => "DbkUHFcrNSRdxi8Ri54M3Fu9LuE8SafbMJqk7JvYAGBv", // 2023-11-16 08:13:58 + 300000 => "3uLtfFanUqVPNkauBgq1sip7xaMMEB57WkooAnsgMtgg", // 2023-11-20 04:55:25 + 305000 => "9ZRML8zq2qqPjwx7qmTC6fnDwqzMNqhD8BoPkkXqSYf3", // 2023-11-24 09:39:26 + 310000 => "AFauVk939Q9SjqRT5kLWPChTxgarbBEgTPNsjjA9ZY7H", // 2023-11-28 06:28:57 + 315000 => "GfwAMvK8pKQ6QmMb5NnZoSCRoNKz8tpAjdXNsk4k9nbT", // 2023-12-02 02:50:33 + 320000 => "ARbDeH4vePdkVfnvj8mVGMS59uBqYyvWLxRRxV4fGFqa", // 2023-12-05 23:38:32 + 325000 => "7hay1mQWakr1kbtKyHRtEXjih8V6eBdCkXVhf1UPDys2", // 2023-12-09 20:20:48 + 330000 => "Nyj5UGDc7aW6EPzWoFSkb8GHjqavLrQ1QX3kekP6RWb", // 2023-12-13 17:00:34 + 335000 => "Gb1h1C6oU2rMZGnW5ZHpHLNHh7CZtpQNZXEh3gBBEQNW", // 2023-12-17 13:50:38 + 340000 => "6K7HjivvG4vEgTZEdegQPcsXvKjXxFPERq972sn3qT6p", // 2023-12-21 10:14:40 + 345000 => "9hqUXCrivX4NCMzGZrMRnaPrFeT3dRJZbi34Vq5QixNF", // 2023-12-25 07:11:20 + 350000 => "972rymKqb6QrpGf8rasCeKxNRhZHffKanSeCwKZh9LVJ", // 2023-12-29 03:54:09 + 355000 => "6biVWUFgZrGedarHTJD8jcf2bgvvW8zrGGBgNB8CVKmg", // 2024-01-02 00:11:22 + 360000 => "EaSvzW5btMXRzxBix26xgJGDrMwe7B4NGtRCivtQDLM8", // 2024-01-05 20:32:55 + 365000 => "CNnq8WKWXqFTyFywCDf7ypTdkDTPfiAxxorhQzuDcJpA", // 2024-01-09 16:47:50 + 370000 => "DDZtWLpjwiWTxq3v3phSAGEBciaczRW3UFfX8vhegF4Z", // 2024-01-13 13:19:30 + 375000 => "6Lq2x9hGPsnetHf2bd7TvYhjYLiHfVNHzGb7bu7rJ6yh", // 2024-01-17 09:51:20 + 380000 => "6k23TJ18HULJNEt7FH9d6xvU8WiAh4jFaukbuvm732oE", // 2024-01-21 06:20:08 + 385000 => "CfAKomeo362KJtgnKSSxGEgRx77SHrqPh4R53mZsr7iz", // 2024-01-25 03:13:09 + 390000 => "CwiEMsRY9oNdi9YpgQtT1GnorBvLv1NibswyQ3WbgufP", // 2024-01-29 00:08:22 + 395000 => "FQh8ysNsxueJ2xinfchiZJaNPizof89zk16fhGzCeb5N", // 2024-02-01 20:22:49 + 400000 => "ALB3X674Vn2Ff6CjM8KV97sYsY7JoRBic8Pzw6gCG4xc", // 2024-02-05 17:35:02 + 405000 => "3b1D2SUnyJQDfx5FqXPxiMs6aLhBCyNqNPk9nySJyHbY", // 2024-02-09 15:44:48 + 410000 => "4aXnVqs5H4d7RAj8dcjgrBmLiz3TSEyAC3h23Mp7HYjb", // 2024-02-13 12:31:49 + 415000 => "agUaqMpBcdV8hvEiAWREqxGdVJYY8jAS9TjHacnamPh", // 2024-02-17 08:52:08 + 420000 => "4Rn4ft5spMzJzYadMMwNFZXt3wz6bpEaTZgrs6EfL8Zj", // 2024-02-21 05:52:23 + 425000 => "7BhLvDTjyTXsDZn6WrLTFNm7daHSSRZ766ENtoaJ74hT", // 2024-02-25 02:24:15 + 430000 => "HumXU8fAiMBs1FFPg5RoHQUJZVG6ZzM5nsCR5JgCjpvv", // 2024-02-28 23:22:52 + 435000 => "DjdTPba5Dx6mLSZQKxd4o7FV2jJCYEthn5MUpZGauB6a", // 2024-03-03 20:27:03 + 440000 => "ALtzy3dz2A4VwmrC2G5zqMFvmH44pi3RUSNAsA3fgye3", // 2024-03-07 17:22:32 + 445000 => "BUP44kokcdKbpa6W9PYFyM21yKR3nZeSPvCkQJ81hk52", // 2024-03-11 14:19:20 + 450000 => "4irSmj8ZWBmxkLiCP8RhcjwmdAUfsJWXyzsEH9FYYyHH", // 2024-03-15 10:39:42 + 455000 => "7jtuqK6zhGSxyBpdxK9F5dEwQQN3ACvyMbHwt2gB75y6", // 2024-03-19 07:17:21 + 460000 => "Fox1HzTNoBJp9kK6GtQtJNUqucyEgYtpC473uPJB5RfQ", // 2024-03-23 03:39:15 + 465000 => "oELF6Kmp6szwum6FraYLPeLwArXRxq3vPWm8JVZjvxk", // 2024-03-27 00:02:32 + 470000 => "JDsLPPwNQBSM7fjMgyf3NzhuzN6vsbfYcT9AvGgv2LB6", // 2024-03-30 20:33:18 + 475000 => "6ty7t8xciD8VCcfk3ffESfDpeQ3RwC6BwEdyVTmuzPGB", // 2024-04-03 17:23:50 + 480000 => "79k6mGhZXwDy3yrnQufcf2K55U9cieLP9HmaGmeD5yKj", // 2024-04-07 14:07:45 + 485000 => "8MQXoNMkECtsTFuzdWMLmyUkWNVvvA5Q6yjFDQjYiEeN", // 2024-04-11 11:10:27 + 490000 => "GVEeZ16FRp9RWaAzeujyvcBbVzjcPD4waL6p4X6pTXwm", // 2024-04-15 07:55:42 + 495000 => "Gz1YfqfRjgWLd7yazmzn4tyBo4JH2SAPYHzLWeGFRdb8", // 2024-04-19 08:41:41 + 500000 => "3vVHbtw9Us6KZFEYR6oGNfE75QqCvdj5SvGACLk15RyQ", // 2024-04-23 05:51:38 + 505000 => "8viVhdLX3mhawrToPQfjE6GqSaKeuHmwEGDHtE66DDwe", // 2024-04-27 03:09:03 + 510000 => "5P9V3Zzr7euU9PbBgvHTEKhvp31ssLEeAWsUsNBRsE1W", // 2024-05-01 00:44:12 + 515000 => "CmaM6t7AA6WcEDJXtSs1C95PeeJy3FDBrE8cATtAeDGW", // 2024-05-04 21:38:51 + 520000 => "HGGchZdb1SPcqsft4nd19VRBaqtxabDnGB7k6NVvXPWb", // 2024-05-08 19:02:49 + 525000 => "HebNxkk64Z9ohdTNUj7k6FByZdricGbKHokzZLtXXPjf", // 2024-05-12 16:37:38 + 530000 => "HaDmHV13nEn5G13hjGN59hvuuZgvZ3Ws3B6bGYkG7fif", // 2024-05-16 13:43:28 + 535000 => "AUyFFULhqPYLvXYSY7t2mUZJ1CEzdpW9Z2snUxZmiV21", // 2024-05-20 10:35:47 + 540000 => "CsMCam3t6pPuZCGp7Rit2cmhV3t5AJym73t8tj7hD5vq", // 2024-05-24 07:59:04 + 545000 => "GAwvfPiFEVdHMS523TiZhvMcwwcZeenoBPDG5Hp11ith", // 2024-05-28 04:51:58 + 550000 => "A8igwUcabWpuxwDKfMLdC1xiFFcyofdAPL9yowozNJT2", // 2024-06-01 01:39:32 + 555000 => "DEPagpp1BawhAr2FhUE9YD8VCU2amNaKwNUv3qpUJcUn", // 2024-06-04 21:59:01 + 560000 => "BEiTrucHxH4LdU1SvHLp9GMy1P4QwUBVqf1iGFJnJRdd", // 2024-06-08 18:45:11 + 565000 => "FbXK5Q8srFGS9DFd8cT3yMvCBAJqB8qqP5W5JxvNHXE4", // 2024-06-12 15:25:43 + 570000 => "DaGBbwBhwEVjFmH3NjFdNwfsw4gdshgJfGMRcfr5AH2P", // 2024-06-16 12:04:17 + 575000 => "3eAWYfEopXoZnFC113kAPB8wuuBad1F7cvv7ewnBKZxL", // 2024-06-20 08:44:55 + 580000 => "9KMxWsSAPk2xzRVfZQumRfSwbTHjvbG1mcrRiMgFEHR5", // 2024-06-24 05:11:22 + 585000 => "9vCjXS1Fr7eXakLtfyYQXHfzAnCa42KnMDQkbnxsgcsd", // 2024-06-28 00:58:31 + 590000 => "5s7Ls8FbDUU5QUgGz24qKKrUsyS2e5pZ9A1NioVdFJRJ", // 2024-07-01 22:30:52 + 595000 => "65rMpGTP2s38SnbAFCz9zBXFL24XZqcTQwgToRGs9rZy", // 2024-07-05 19:16:12 + 600000 => "EYQFah3PKnRsk9BJJkkmSSHiBwAEDfue4tabzYSVVFWJ", // 2024-07-09 15:34:50 + 605000 => "P3fV4hDD2AGX2zerR56iNtoH5QXiFN9kZFFHfRFMbGs", // 2024-07-13 12:04:18 + 610000 => "511Y4Nym2wkZKwohgvpRT1AQk6yHu8QBFDkzNAsYmZEs", // 2024-07-17 08:12:07 + 615000 => "9vhQ6efWFehEBSmxsTdnxpMjKBQCorXtDSjfAK3K9Z4g", // 2024-07-21 04:45:22 + 620000 => "GQqVU8aTjmmjWW3Thepo6oRY5aspSTTYHQjwYWPYPfTv", // 2024-07-25 01:40:37 + 625000 => "6Vho2GcK89SDyjuXAjuA1JTWpNdJRkmzAz7CBHLEFjBx", // 2024-07-29 05:43:36 + 630000 => "7E6KkjZwYCPVsGNpnwN8sHCBn5aJFi6geSF1Bt42JiuP", // 2024-08-02 02:08:35 + 635000 => "3SVhx2YZAHZBvuJbwMQNoeysejykarxVhhkoezoNnrZn", // 2024-08-05 22:46:11 + 640000 => "7z7XMjEksvxnzgEECPfAv28FGno4R6Y3VqtFYgYWuRUm", // 2024-08-09 19:02:26 + 645000 => "4waPt22QUgLkKRFHhxorHN7vxYHy9h3fFMcjB3YJuBUj", // 2024-08-13 17:28:11 + 650000 => "CGLvdFCF6KFbEBTLwzgqBinKqik2Fv4t45UHTKBsSWAm", // 2024-08-17 15:11:30 + 655000 => "DLEoeqzR6iLnBKv5o4sxQ9YM27faULYigcoqK43nJHyx", // 2024-08-21 11:59:08 + 660000 => "B9xkadHFoaYo7suoUzRAerUPBX12zZDynek2rJChmiC4", // 2024-08-25 08:12:50 + 665000 => "4hc8prVQEZEqrwSgjNPkYTb3aSYZ11EJHpRDLUr6BvNQ", // 2024-08-29 04:34:56 + 670000 => "2NZNfZyJADfXhRkckQ65T73mAfuNSiWMpn4pXby1qk6z", // 2024-09-02 01:07:59 + 675000 => "AQKr5ZvYqu9GsYefJLKwfnrf6RcYA4YfEpALBnymQxmg", // 2024-09-05 21:41:51 + 680000 => "HLRUNdykRX34HzRfQj92HjSwvy5ek7wjM442BK7STdfA", // 2024-09-09 17:51:08 + 685000 => "8HDbhgB3oq8iUVD8YvbhTpyTHLQqyEjLyqgmNuSwQHKC", // 2024-09-13 14:41:22 + 690000 => "HU9GESw6NNUWnSsZ1rktNzJWE5AyAcxbvcqf4d5pf2Ev", // 2024-09-17 11:09:57 + 695000 => "Fjmqsy8me1Fdrx8G5xtu7EHQh3ha2PVusT2myiaFDgn9", // 2024-09-21 07:45:24 + 700000 => "2PFJW3iUdHTSMYD45geCs39XChvzAA1pTkf52A5mAaRo", // 2024-09-25 04:47:05 + 705000 => "5ZExFWZw2wXvV8AGnNzGBDeYAUmmMoWzVHG4dXnfadnP", // 2024-09-29 01:11:19 + 710000 => "A1MA62eN86PM1aRezbWP78aivxtydQPjHkgwCvcs26Jb", // 2024-10-02 21:56:10 + 715000 => "3vLcdWpWE1Zz2xVUuGW8XrYwRvCbFNKwf9K8c8RiQfr4", // 2024-10-06 18:32:15 + 720000 => "yXwDNA8SpRmfAwqD2afUk1Ctw1io6MXBKTTcJAtKXaM", // 2024-10-10 15:31:49 + 725000 => "96dDq9y1STC3qFQpLMVDLWQZaBDR85kBEh8VJkQGxhhA", // 2024-10-14 11:57:59 + 730000 => "Fo2pWjacRda2HsqXEbCFGPzbKNGkGYgNqGnm51Q4f5RQ", // 2024-10-18 08:25:07 + 735000 => "86sNYLwURbY5tF3dykg4p8cfcZQmTPNzM9dYH2zZTHdj", // 2024-10-22 04:39:37 + 740000 => "EpVBvTdJkMdbEgbHqnV7T5vVD7UJPuCWQatSwf4Uouuv", // 2024-10-26 00:54:18 + 745000 => "9VzUDCBp6UuVoYiuHciZwwJisyAbrdXwWt13Hgx7UhWL", // 2024-10-29 20:55:20 + 750000 => "97y3wB4hcUzZQCwDxFgWw2jdZY2Spk25eXhQjBsJpbpt", // 2024-11-02 17:21:25 + 755000 => "7MxRvN6o82GypCntw13JnZKHLXCRSDbiJcUEY5qEGKvo", // 2024-11-06 13:44:06 + 760000 => "6JD1oo7kksx4LjdzYx8kEZihTXF1TbtsoXW3vy222QX4", // 2024-11-10 10:00:25 + 765000 => "5b1Fzt5DXE2Kasb8kX7KmCfkLogwDu8bHjjXfi5s2A5f", // 2024-11-14 06:36:29 + 770000 => "AGczsoQ3benuUh15C92PcmUidgrHKyWWD1RC7fTBwn8h", // 2024-11-18 03:34:23 + 775000 => "2PaNHJJpb3wXT1otxcbRyvBbQVo8WbUiCWJkzQgJNC2c", // 2024-11-22 00:00:57 + 780000 => "EMHwUyRBDoNRYRbcznJbJ6SYhni5vzW1SJ2uKgEuQJo7", // 2024-11-25 20:37:43 + 785000 => "8tq7CzqciKcY5UjAzeN9ibgwKYDVysnfBLj3tApmCgWZ", // 2024-11-29 17:15:06 + 790000 => "E4FaUDuUtTo9j7oo8zGQuHCJBzgasZyzGXKRbekCjovf", // 2024-12-03 13:37:26 + 795000 => "D8djZWfxWkBKu8zkvXUayBXBJTGedUpaqesUMYZbRLV6", // 2024-12-07 09:52:22 + 800000 => "9VWSDBKPJeH1Wp7SsxGadi5vPBkJcTq3EQopo9wN77ER", // 2024-12-11 06:19:03 + 805000 => "F4Yg9ypBgCJ4d1Vgz3m4A2mQhzLyt2ReD62xr2zy3MJi", // 2024-12-15 02:40:48 + 810000 => "HiHujKeQSjNCyiZv1PzZTfDFdgWVHYq6wp62JgvB7hap", // 2024-12-18 22:40:21 + 815000 => "6kuAxR773268NcTZawBWQKyELyiEDDxsvkuKbSy4vjuk", // 2024-12-22 18:57:06 + 820000 => "2NMHcW9DjUVedxckf1bspBTkxhu6S6z6VNRAfQM1kW7R", // 2024-12-26 15:42:26 + 825000 => "5gHGADNFmYaLcACcRsCZ1YGvtcZKLRkjo5Q82GGA5uwL", // 2024-12-30 12:17:26 + 830000 => "6ococ6kNtrd8huhQ2TiCsswLD6T8CpEx7D8rz46xMZRY", // 2025-01-03 08:45:37 + 835000 => "9jWHmrQXZJwsq5g44mGBmNq3JYfArDt4m8gbJ1czpfUL", // 2025-01-07 04:54:00 + 840000 => "EkMGQGUnEcyVjEBJAwfGXF9tQcs9pM9pw2NvBZwSk2Ux", // 2025-01-11 01:39:08 + 845000 => "4YhbYPJaR5mRvdzEqTXuCX5sTKcQZz1hR5PCZ76tnzEA", // 2025-01-14 21:44:34 + 850000 => "9iTmUj4epSBNoTsqjac15t6CKdWBPLzBBhC34AWDYuHp", // 2025-01-18 18:04:40 + 855000 => "9ccmphxedz8zP2DDt5n6Y2UZg9HyVfwg1kddfEbnrz3X", // 2025-01-22 14:44:45 + 860000 => "9bKFU8Gdxv1hgz2r8cg3FHhQugjm3t2n2raTpnz1DZet", // 2025-01-26 10:59:38 + 865000 => "ngGDumKcrA1qoPoayr65L1pMRJCqrz7nYgodKRzPqqL", // 2025-01-30 07:00:00 + 870000 => "Bab9TMw3jRrm8QaTicXnRjYNwpzyMcMJ8bCXTzzFYc1W", // 2025-02-03 03:45:14 + 875000 => "AHgZQeKASLdagpt2UwqwNSbBfckAyyAPUEXUfJbs86ZZ", // 2025-02-07 00:28:06 + 880000 => "75FKbxy9SYU3CaWArovbPkAoKKrSxZZvnK1KABVC8cTa", // 2025-02-10 20:22:48 + 885000 => "Gdchg4ah2WwEGQpogoGDesiNuvjqaEpuKGhE7kNKw182", // 2025-02-14 16:56:57 + 890000 => "4MnM6v3TCdLMPTxmcmRt6Shn7MB6bi4EdeT6jQRdZmBT", // 2025-02-18 14:00:02 + 895000 => "ARtx4uWsR3X4TB8sXtgW8KiHakm3gaB5YY96yEF2qVBs", // 2025-02-22 10:42:30 + 900000 => "6xB4acpP9wH67UbQPetLMJuwie9GPaN74W2MMdEPqy2e", // 2025-02-26 07:31:50 + 905000 => "AcPAbz3Th1x5p4BmW2aKcP2Hi3S7tYvAgtyxrSRdu3Ta", // 2025-03-02 04:39:32 + 910000 => "4FQkMuJ134cFjsgLXM5ZHX6FRhhced4hB1QQB1UNcnKD", // 2025-03-06 01:12:51 + 915000 => "6613yadgpzt8uXPze7VTojdRNr48hHMFcapY5GUHyGN3", // 2025-03-09 21:23:11 + 920000 => "9roX4cv7yhtmbQHdCgnLzWsnu1pPYMzXH3zDeH4QLsiK", // 2025-03-13 17:53:32 + 925000 => "6xcQaSr2WkezjEHmiFuBRLcScFgQ623NTFmzaRKaJLRy", // 2025-03-17 14:09:38 + 930000 => "6qT9H76bUyxH1yX4xQqNkwqxzME42PBMk7KmD1Tjyt97", // 2025-03-21 10:21:37 + 935000 => "FPLnvt2aFfZc7rHDEQKxKPhshv4u4EChA4Dzi8UzXXc9", // 2025-03-25 06:58:47 + 940000 => "C9ZgWoTbaUo9RfxcRSB3WzABL5Z2X62r6raQba6oZkTW", // 2025-03-29 03:28:49 + 945000 => "8djUy2s3ErqKoaAZ8tEqYBjTuG6VGwmL4CcPj1AYWhnE", // 2025-04-02 00:05:26 + 950000 => "HyJvaVMGvqYDdqZEqW4Y6Bra8jx9ADwY2MSy7y4ND4s2", // 2025-04-05 20:13:52 + 955000 => "ALxZpH1PYWskBkk5ZH4DveEF9xA8n5cVBV6JQ9vmKj74", // 2025-04-09 17:02:18 + 960000 => "EscLk32eamDdueoS19WroJZ7NP9fJNeZ7MTZHVBavbJJ", // 2025-04-13 13:35:32 + 965000 => "GAcupX77Bh82YbXqQZi2PSd2Yj8rrSekoriGVs3ZJrWa", // 2025-04-17 10:03:52 + 970000 => "ASrHRYyLoqVHxZxvR87gyPM65czPpAcySdWB3bgBdyGp", // 2025-04-21 06:40:39 + 975000 => "7pggPX6w1AmwVd7L6cLXcuyaTQNno8REJRijaBP58bzE", // 2025-04-25 03:31:58 + 980000 => "C16rzAjghYuQ3TWnmGSFzyJDodC3QWPteoy6BQ3Ea1r1", // 2025-04-28 23:58:41 + 985000 => "6eZgYP8LDPzsoUi7xR7q2LBjw3DKGgNo2YmVqcxJ9oPH", // 2025-05-02 20:53:28 + 990000 => "9AB2Mk9NoARaWsvWWUhMMcUHEPpoLXoXxDNcobm7mfCD", // 2025-05-06 17:05:00 + 995000 => "SGDLZEWGgDP8Ru8gk4ATmdXujo2mHbApmjqaMwkCPhc", // 2025-05-10 13:46:53 + 1000000 => "wPCYpmpbQGoigsWq32kEaJhbDCM6h4bKLJDpdzncGvb", // 2025-05-14 10:25:40 + 1005000 => "8T3TP2aLj2MqBpHfSTFUpaFJpsdSq5xZY5QXSLMSFCy6", // 2025-05-18 06:29:26 + 1010000 => "9GW7yS42dsv6Bid8zhjZeSGpMBLqLpxdg5MjEtyznVLf", // 2025-05-22 03:29:56 + 1015000 => "9dZreCGDwFdas3KC4Aw69NniuYBGGnyDH9SjauALpd4m", // 2025-05-26 00:12:06 + 1020000 => "DHGa1XSFT8gRhnYiwa3bs3SoWhg94PmcPP15RXnLNm4v", // 2025-05-29 20:47:59 + 1025000 => "GPPHqM9KDHMJH3fCjQkUDWU3dn77uxbYS95upGPBBC7N", // 2025-06-02 17:04:29 + 1030000 => "7LokzmGWVVtddiwLNTeiw1d7uxawV8kAdk89GVk8woDs", // 2025-06-06 13:58:10 + 1035000 => "5JWi4VMZ6QojLjeN2iAaFseKXqSUGCm7oYYuycfbPLUx", // 2025-06-10 10:46:11 + 1040000 => "9gNHs4Z9SSXh97HF58cGMszKirNZSQFJNNkTvf32qcbz", // 2025-06-14 06:57:19 + 1045000 => "7vpTD4WbVqzH9RQyKnid7apMKqM3riMqGZmsP6vF4HjU", // 2025-06-18 03:41:38 + 1050000 => "9y8MrKfRuuqRQSNCwFANyxTB6gE1KgZ8mXf7rX5iSUs7", // 2025-06-22 00:20:25 + 1055000 => "7EVcno2ham49gi6oPjNenWeXJrhtJkfZgwAwe8daN4Bx", // 2025-06-25 20:28:29 + 1060000 => "9BQrDUPcyZqah1fKrrToAAxs262Qmjy373gSktHPWKSY", // 2025-06-29 16:55:22 + 1065000 => "DEAmD7PfjJTLaEEuX6CZEBw19XT3YoJD51VBTg3SnqQQ", // 2025-07-03 13:31:12 + 1070000 => "7Vee5fBCeu7WjU8qH4hbFKozytuVEj3QGu87ADupxRUt", // 2025-07-07 10:18:45 + 1075000 => "Ff2FtySDyASqvsCycJ2EPFwaakZuHmfRyxrt1sPQ9FTN", // 2025-07-11 06:27:01 + 1080000 => "4eNxiciWcvY9S8GfqibPGDCmdqYXzjB9ouok36kxZWGw", // 2025-07-15 03:03:24 + 1085000 => "9L3CciPdTd7pibwqgqvkrrqZXPFB5ehaK5HndBuTUMN7", // 2025-07-18 23:36:22 + 1090000 => "3gWmKFvbDNokMYQiSw7woY96LS64FmYxKWdcrcY9NzN3", // 2025-07-22 20:33:05 + 1095000 => "Ciop2JDnhEgcVrfs93k1sAToyCjFTBjt1Qfyn6pkrUqN", // 2025-07-26 16:58:50 + 1100000 => "k2a1NFwTZwWVZwEFg2qg9ZypZRuqfLLE3JwMPSKiDxW", // 2025-07-30 20:58:57 + 1105000 => "EdUoV2LeZJpZqs7FAg7fYBL8PSLm7vhLxZB4M1F7YaJT", // 2025-08-03 17:28:57 + 1110000 => "DKPaHmGP2rPgDZwfnaVHvdP73o9A31Cq2TEHHYjKy2ZC", // 2025-08-07 13:45:16 + 1115000 => "5FktenpNSMQJbHeK9JXejHBGnJMp4ZynwbK5EDFBEzab", // 2025-08-11 10:19:31 + 1120000 => "2FA8Dd3pwHsaGhjSgshEytYxB3dp14Z1sL3eRTbV2DvJ", // 2025-08-15 06:40:41 + 1125000 => "5BqnAgiDxkqZu72C8KNzivMM89UZAdQMqp6jaqEgf1Xd", // 2025-08-19 03:17:25 + 1130000 => "54KTbyPFfK48s7N2UkChdgvZmeAQQkjz1BhFXRLcdD2R", // 2025-08-22 23:38:30 + 1135000 => "Byrk7h3Da2ATtLx1HkK3MsBioYWi1GFY1pP3jNc9orWK", // 2025-08-26 20:11:21 + 1140000 => "GMfUSodLy3xinREHG7XgYQUdmY7Vchzrngiwwv8c4gTA", // 2025-08-30 16:54:23 + 1145000 => "HucYsXkZnowZBGY5gDFosV6KxjPQtqqt921bKYDWFJMC", // 2025-09-03 13:35:12 + 1150000 => "AoMek37aDiGMfuvX49CRBFzE1UkKfZFJvCHZ6GUsYsCf", // 2025-09-07 10:12:24 + 1155000 => "3ytuEwEZjjQyaG1mjwTWsHwhfzQpUtyvKsPaLyaphWNp", // 2025-09-11 07:01:46 + 1160000 => "2tXySoZgmm4hp4U8BsftoqYYkGwr1o3RMdjor1nKmT47", // 2025-09-15 03:17:24 + 1165000 => "4zxmQxpdTxQ3yAE78qMKweY3ef9ksd1GnAmCXKXokgzZ", // 2025-09-18 23:35:02 + 1170000 => "GE3Wqnf7XzKXj35d9zFW8ZfhTFeKvH4RQkzKQKpPaycG", // 2025-09-22 20:20:24 + 1175000 => "4rGeqnud7hs3MdcQWv9iYnHdJt2G6SQvvn9kh6GtwCPL", // 2025-09-26 16:54:27 + 1180000 => "CA1Lmxr77GXzu6VM9mgatfosanN1yADDBBtrijGeCvse", // 2025-09-30 13:34:42 + 1185000 => "5ujJpqgfEHRffNimk8Fyc2aarJkNWEnyuHMiBbFAx3Pz", // 2025-10-04 09:42:44 + 1190000 => "D12fqZqzf2fjKgosbNr2k7ZgnL7oHytPavEVaipqnBCZ", // 2025-10-08 06:42:17 + 1195000 => "EcX83v4B1MM4Ry533ZE5KFupxjzXWP1Ah51bzofkzKbH", // 2025-10-12 03:33:45 + 1200000 => "7cx13d5ciQGCGmcq6pLSMEGvXpC7njxGsSCbRoMNAg13", // 2025-10-16 00:09:32 + 1205000 => "FBgPCfj98EndJa6dyHvA9rccoG9m5t3Q5Jk3eV7gN3Zv", // 2025-10-19 20:40:56 + 1210000 => "KeSHZfka5Sq19bcbTadTs3Hw8AFYzyJrexdg3fy85B1", // 2025-10-23 17:23:30 + 1215000 => "2KMg4H12ahENAYpsvHN7yruWFGQiN4Y1S43LAorBv5CN", // 2025-10-27 13:38:32 + 1220000 => "CcqmZEYoqZxMg7Q2HpEqaaZHJu7WM1J2F8uwQMEz1S19", // 2025-10-31 09:59:03 + 1225000 => "7yQtC3bYDaPekSt32s27DRdK69QXLA5ML4MrjAJuf4pg", // 2025-11-04 06:44:17 + 1230000 => "hBPbFYWduzUDWmxA6ySJho89KUaZn3jnDzLEFKSJARi", // 2025-11-08 03:24:40 + 1235000 => "DHSMSkEguPPiEyEf3iUf8iiTm4JcZkGbFcnpreo75195", // 2025-11-12 00:01:34 + 1240000 => "5Ce4DNzZAuAcFR1ayiPcvWgomcsX4g3j3KsvzwYVwh98", // 2025-11-15 21:07:57 +]; diff --git a/include/checkpoints.01.php b/include/checkpoints.01.php new file mode 100644 index 00000000..fe63bd1b --- /dev/null +++ b/include/checkpoints.01.php @@ -0,0 +1,44 @@ + "9aeKHauMRjJC6GzXvjWpYfYcEA4vaFQLxDWitpVDReMQ", + 100000 => "CdZWtDjL1gR8Trmr7AmZzr6NvWaL4YqU7fvMBi5aDvig", + 200000 => "5SmJjMLujd1eMupCxjPW7pfWaSvEpA78ucyytG7NZWSX", + 300000 => "AuEMBrteJwXDj7aQvGGGZwV4m9w9ZRsYUfVBvfv1rhVk", + 400000 => "8huPL5RfSRTJPE1TUbnnf6jGnodSrkPSu34mebsz9hKr", + 500000 => "6Zc6pnn3bxstSBpV5Lr1dmwuTio3o76mLgCezpbmqHza", + 510000 => "HLwuPjxbbrhKkuwm5qWwv27Eu4npyxgBDvtAYCF1ZgAp", + 520000 => "6dYENVA64uVfv932RpvDtyjyzwfFK7U9DyxNQUtQ3ec7", + 530000 => "57QRa2m3peKmvbutPLGSfHXySX1tnzouMJJii6UKDH4X", + 540000 => "8xV48JMZm6MU4qpYHq77WFGAUZNVpiZdxNcLNHqsLGNZ", + 550000 => "41PG7tfGRCCSHwMoE5pkiNqn5nF4PXX1wYAuqap8MWBk", + 560000 => "7mY7Gnx1eksLKE6FngSarjqpDQEta9o8uYqTwgB9VmjY", + 561000 => "Gm1ZQU7qjwiZWX7q5QHZMkA5SPXuY9coeJeZVb5XjTsn", + 562000 => "KMCes9LK16fcnmBtKufssYRSuMm9vFhSp1xGqsoUFrn", + 563000 => "6EatKBVRkyqTu2cqJHJBcy3aYPdPHE5iEFCFxdzhZdpA", + 564000 => "25kLGoY4xd6o72DKTXA77wmdZYAto1pcTk1rw2pK7EQm", + 564811 => "BpaUVoE7degr96VWhPYwKciTPt6bAFJ1ymcNpjp4Dxkr", + 565000 => "FE1sfL3r6YN5z5nHpUimFpobiZ8jGRfykN6fmtCTehy5", + 566000 => "4RBYtqeYDoafzjKaNv3Am8Byrka89xeVVHNdvkHLj9vB", + 567000 => "8XCsgmRnWF2uYSiGLaB8zE1k8NvXwQ3bJXBufH7SFsS6", + 568000 => "XiwvDKLh86NAng7eFKa3bWyyKnb9aqtX9MwtmrNYdNj", + 569000 => "5q3SYXWUxjmyJ5JK15dzBt5VKCyxuS6G1ECKPx9Hqdvd", + 570000 => "G9hKpwDtcbHfoFLJQZNN1AV6MZ91jeaXguToYfsSpzE4", + 571000 => "WGViLLXUjo9KEm8mRSAQpcopezW7G7azGYD22zsBEXR", + 572000 => "CM51q2ibqTB4PQHNyMXmUuqYi5ZkfG32QX5p87prgs8e", + 573000 => "841T8wQtQX8zfMy6CLLWHTo3D2YFCswDPBLxYFRJ9iLJ", + 574000 => "Fb8zJMtQbhV7dngp9uWgx6pxvRcqB72jLDMfudun13xm", + 575000 => "3rPDbatdTQkaYEyCaWEm4QvQMezN6zRu5gEXhtqqkSez", + 576000 => "Duyn2CvZRPWaTLCLbuUYkH399nKaQZuqbdirXB51g7pz", + 577000 => "HNWA8k5KdygAaptKDLGPw2cGF1GfSys3NdExpQ5cAKQe", + 578000 => "EGZuDHivPjSweZQv6sYS3s5gVAunt3kAXesdXM1swy4K", + 579000 => "8LhwEj2LocXvdGAaZ5wC54CsCcUwQZoqMPQZWZDppHds", + 580000 => "8husyNntSF3tmXM6DYscqVSh3utn8EPJNaa6qnLbcLA4", + 581000 => "3oDkX8kFv72sDTkkfbsusqcWHZkTNpQRJcfencAowQDT", + 582000 => "DRTgaSrCVAjcF6tPX4DWresXbC4vdxfyHMU2GBCksoiP", + 583000 => "5po2BDHCcTzXQ5D4fK3LzMa1xy3YELgqWcTcngjwdjS8", + 584000 => "7vBBdnVnjWSpyph1TM8jc8eRhkj9DhuF97jnH7Xeps5F", + 585000 => "EzhUQ7d9KWCoqLAkv2ssSwfQvnG1ZwMJvfKjedJZ6mjq", + 586000 => "Ho8HdCje79XgtbmA12PFKMAZ91m3bUZD5GmeGJJo2e4b", + 587000 => "Dm4ZMMogsE6dHX1ThWVAaAxz6XYu9M5yVVAwoD594cj1", + 588000 => "HDZFNBTAgV5PmGymV3fRN2hZDB8feteUHpNGwTLkBeri" +]; diff --git a/include/checkpoints.php b/include/checkpoints.php index 0352172a..63964ddc 100644 --- a/include/checkpoints.php +++ b/include/checkpoints.php @@ -1,260 +1,7 @@ "2ucwGhYszGUTZwmiT5YMsw3tn9nfhdTciaaKMMTX77Zw", // 2023-04-01 12:00:00 - 1000 => "6seZYqyH83Us7NhX3N9TgB8jqgkFrCc9etpQsiUL3coz", // 2023-04-02 06:32:45 - 5000 => "BLLhY8L5kr61jmwjF252qNBuBaL1Sxhz8TurgJ1MZVbR", // 2023-04-05 08:51:32 - 10000 => "5FCNEW8bRgb6pv7YXub755ijSU2DQJ15EqSdd4USMj98", // 2023-04-09 08:02:27 - 15000 => "CmFpsmEew6kCUgwFRPyvbYKGmiXZ4Hd1Gedoa6q98TJV", // 2023-04-13 04:38:58 - 20000 => "3LYBUKS1UFyPnY6ne3vz8zaYAWA36p75jvJzX1LZAJCi", // 2023-04-17 01:17:58 - 25000 => "29oP8cKUKawXvQgfV5prURUPytZt58iFqUug3cQd9ndf", // 2023-04-21 09:51:44 - 30000 => "AyuYpXTxSimipWXw9kaXg5A3Cu9gX7VcoFh5k2HhXMTp", // 2023-04-25 06:36:46 - 35000 => "wnV5doKG5L5do9X7ZK9ceTsEY38n4ktYgdZatpuyM1L", // 2023-04-29 03:35:22 - 40000 => "BBC84NpVjBtcaxdSPjCzHZm1J9XZ8hdoC38kPwLouatj", // 2023-05-03 00:16:23 - 45000 => "8fFgPVrVjWZQNWUkvWB4VUngdS9XFhVUEyZXnQFLaxuR", // 2023-05-06 21:41:47 - 50000 => "2RmopeRpxuFp6VM64v2Czyph7sTL3MXxJcPSGLBod2up", // 2023-05-10 17:54:22 - 55000 => "HXH4ts6j4eiXUHcg7G4KRJDsMgvckxXWzuwfV5FWbFvd", // 2023-05-14 14:40:19 - 60000 => "BHoaS3rkuP5LAJEm29YRhrUvm3edYjT87hhdXSzk9ks5", // 2023-05-18 10:50:49 - 65000 => "2KErUePq6U1Y8PjMzY9bMqS1GVWJzhKZUZjLpy7d9Jo9", // 2023-05-22 07:38:45 - 70000 => "DQbeBLfmtWob728NbrSTQER85mKgReXoENEjpa82r4Tp", // 2023-05-26 04:19:49 - 75000 => "4ZQfMnbzxQwnWpaXP1qzBaBoEwHiGxEHz4GxWPCVdMNx", // 2023-05-30 01:02:00 - 80000 => "NgHvZG4FKAXsmpDJg3xKr4MMFd7QFwZfixgvBMmBwAo", // 2023-06-02 21:31:42 - 85000 => "CEbViLj1VV49uE59JHLH3bMiK8mRQrYNejUHdzmVxbqB", // 2023-06-06 18:20:47 - 90000 => "9krGDi3N5xFWCCisEfG8igN9KgitUXGKhfwkqDZUdL9u", // 2023-06-10 15:39:39 - 95000 => "8MK419JyWhw4LVDm9bKZLmNjJo7FxckdKQszr5GV2BB5", // 2023-06-14 12:17:28 - 100000 => "6HTPwZc1u61FwUiBr779LM2nbDz5PuBFWeJJ3Gj88XQH", // 2023-06-18 09:23:09 - 105000 => "FzfkJLKmFYgoACAfwGScpKwDT5xn2xQiwrTpHCjyjCtL", // 2023-06-22 12:53:07 - 110000 => "co7GUpcXfGhzXB4mA6SEnDG96aZnQvRbrTvoZjvDYK3", // 2023-06-26 10:02:22 - 115000 => "BaRmc2zGGfkkvpdiB5XFn9T1NT5gzjxUb15xhtsecguW", // 2023-06-30 06:55:45 - 120000 => "LGvaKxz7waNciZJmwvnDAbkVdD1tW9UtJUUrkNoosQ5", // 2023-07-04 03:29:19 - 125000 => "zRNyPzprDx3X6VC4VPEtBGwcJcrtdRZMPx1maKMea8g", // 2023-07-07 23:56:57 - 130000 => "8PxbARg5VXuPh3mht9GrjWG5KLofwUjThEqmE1jFFn4c", // 2023-07-11 20:36:01 - 135000 => "HGNCvLHPmjsAa6c6BKTeqBeVD8daMDkpVKcG2T9HqZmT", // 2023-07-15 17:13:59 - 140000 => "4MtFPyDkTKf9FG8oQrkYWdGUS2m1VywaqzATvkZ3v5Rb", // 2023-07-19 13:40:35 - 145000 => "DW2CXDrV7x1xseN6aLf6jqqRgGNAZrZtk8wdDBtPMUmn", // 2023-07-23 10:23:16 - 150000 => "GeLkDJiMAz2qmM1kshykXQ8GMY3uP1C7yWKnxaxNicKX", // 2023-07-27 06:48:31 - 155000 => "DRUmtpY5qLN1AGR4whFFNRG98ntuexsdNt2wE7eMK8rV", // 2023-07-31 03:30:09 - 160000 => "ANhmZm9Rxcfyx8XNrcmtW6TzVz5urSzVakHZ8WsFjqLn", // 2023-08-04 00:15:49 - 165000 => "4M5VaRNxCmN5jmLf4fT4eW93vike4aQ6daYsAqqmDsn6", // 2023-08-07 21:21:44 - 170000 => "FT9Fbj1H2NcHBNiwy3RBRmBj4X7mWfRFvhyzkQtbehyu", // 2023-08-11 17:52:02 - 175000 => "5791qWxYd9sZ4naiEN1Hugi4LUDNr7Z7ecUke9JPyJvc", // 2023-08-15 14:22:24 - 180000 => "AUEp97Miy7ydDv5UW9fdx9Mpu4ZaDjHc2UWHUeMnKBAx", // 2023-08-19 10:34:05 - 185000 => "9M4tR8Ns9h3BTL63nefqRC4p7iaRNVedBJRdFeTHvFC1", // 2023-08-23 07:56:55 - 190000 => "CsF4UAXs3QJjhGfwF72sPuRPC9fbPP8zjLNRFEaV5ARC", // 2023-08-27 04:47:29 - 195000 => "EufiD5sSvcT8snK4UfRJQQGZSTLykSaafxy52NX5YusQ", // 2023-08-31 01:55:08 - 200000 => "4DLgryKvXKFhCNhdu3MEHya683sQ38sXnfRPGa6QBE2K", // 2023-09-03 23:12:58 - 205000 => "GpEwQMBybTXo8MDUacT5HQNdfLVx2nnx5jiQiPw54D2o", // 2023-09-07 19:52:22 - 210000 => "F4SZsmwdeff6NzeVRxVM7kUnUdqqgyAyopn6jGe5gmt3", // 2023-09-11 16:20:12 - 215000 => "APn8nnKJgpYzhEx42k6w5Zmb7H8j1EfA5M9vfhdWhDqd", // 2023-09-15 13:28:51 - 220000 => "CKDvEWgBxfE6ex8XQvVEmy5vQGVTfq13ANx5cZzzALoD", // 2023-09-19 10:14:19 - 225000 => "8U3ArGTHSsX7hPYtvpYLeGtQGHxWi78LShjSC23R9N8", // 2023-09-23 06:59:46 - 230000 => "GS2NEkDe4atZdT7n5Jk8ZT16eEKLNU3VqZS7yWT3KauA", // 2023-09-27 03:31:53 - 235000 => "DKwboNHf48i7JK1skZFoYxwfsRBLbuUYm6c68ZGrcL4C", // 2023-10-01 00:05:31 - 240000 => "6ghugWoXVVkGKo5qFs5LpV5cfvLXvZXruTuwfvZA3PxC", // 2023-10-04 21:06:02 - 245000 => "6GX5cijXxymBBEFiA418uQXd42BkPZ6mVKqiv5CvL4tB", // 2023-10-08 17:23:03 - 250000 => "BfM45EWHKi3vYEjAKh4dzeoV8cud2XKbuoh59Tnfiwu3", // 2023-10-12 14:03:43 - 255000 => "3U4pvPzMEpouVUSBpfNfk5czQ6PqcSQTRj3dnmnwArDz", // 2023-10-16 10:43:28 - 260000 => "GdgKNrEGEDMwudBspHt7rCFN6c3cgfwdEAAqrSkCsBDP", // 2023-10-20 07:47:47 - 265000 => "3ySM9bkqApnTzAKcVDeZdsAxShJBmsdjQtd3XgBwe4nJ", // 2023-10-24 04:08:32 - 270000 => "4FF1dvmzkerDZXZYhJ81jqeSfan135kFDhA3s54ExT3a", // 2023-10-28 00:42:15 - 275000 => "AMx9xv4DVw9tTyDXTx96TDBZoUj4ofuPj5ZqVYqiWVCB", // 2023-10-31 21:42:56 - 280000 => "B88eRpXsDNUv73gWEA5bq3qgG8zWCfs73bSPMPFjspS9", // 2023-11-04 18:26:38 - 285000 => "FWMYy9TzbPXHFJNsZ1Q2gx59VxRJg9g5oJdJEvbYUUsA", // 2023-11-08 15:04:40 - 290000 => "BhDiLZmS1FCRarPMqq51r1xRUTpcKq77u5DWnjgJnUvP", // 2023-11-12 11:17:01 - 295000 => "DbkUHFcrNSRdxi8Ri54M3Fu9LuE8SafbMJqk7JvYAGBv", // 2023-11-16 08:13:58 - 300000 => "3uLtfFanUqVPNkauBgq1sip7xaMMEB57WkooAnsgMtgg", // 2023-11-20 04:55:25 - 305000 => "9ZRML8zq2qqPjwx7qmTC6fnDwqzMNqhD8BoPkkXqSYf3", // 2023-11-24 09:39:26 - 310000 => "AFauVk939Q9SjqRT5kLWPChTxgarbBEgTPNsjjA9ZY7H", // 2023-11-28 06:28:57 - 315000 => "GfwAMvK8pKQ6QmMb5NnZoSCRoNKz8tpAjdXNsk4k9nbT", // 2023-12-02 02:50:33 - 320000 => "ARbDeH4vePdkVfnvj8mVGMS59uBqYyvWLxRRxV4fGFqa", // 2023-12-05 23:38:32 - 325000 => "7hay1mQWakr1kbtKyHRtEXjih8V6eBdCkXVhf1UPDys2", // 2023-12-09 20:20:48 - 330000 => "Nyj5UGDc7aW6EPzWoFSkb8GHjqavLrQ1QX3kekP6RWb", // 2023-12-13 17:00:34 - 335000 => "Gb1h1C6oU2rMZGnW5ZHpHLNHh7CZtpQNZXEh3gBBEQNW", // 2023-12-17 13:50:38 - 340000 => "6K7HjivvG4vEgTZEdegQPcsXvKjXxFPERq972sn3qT6p", // 2023-12-21 10:14:40 - 345000 => "9hqUXCrivX4NCMzGZrMRnaPrFeT3dRJZbi34Vq5QixNF", // 2023-12-25 07:11:20 - 350000 => "972rymKqb6QrpGf8rasCeKxNRhZHffKanSeCwKZh9LVJ", // 2023-12-29 03:54:09 - 355000 => "6biVWUFgZrGedarHTJD8jcf2bgvvW8zrGGBgNB8CVKmg", // 2024-01-02 00:11:22 - 360000 => "EaSvzW5btMXRzxBix26xgJGDrMwe7B4NGtRCivtQDLM8", // 2024-01-05 20:32:55 - 365000 => "CNnq8WKWXqFTyFywCDf7ypTdkDTPfiAxxorhQzuDcJpA", // 2024-01-09 16:47:50 - 370000 => "DDZtWLpjwiWTxq3v3phSAGEBciaczRW3UFfX8vhegF4Z", // 2024-01-13 13:19:30 - 375000 => "6Lq2x9hGPsnetHf2bd7TvYhjYLiHfVNHzGb7bu7rJ6yh", // 2024-01-17 09:51:20 - 380000 => "6k23TJ18HULJNEt7FH9d6xvU8WiAh4jFaukbuvm732oE", // 2024-01-21 06:20:08 - 385000 => "CfAKomeo362KJtgnKSSxGEgRx77SHrqPh4R53mZsr7iz", // 2024-01-25 03:13:09 - 390000 => "CwiEMsRY9oNdi9YpgQtT1GnorBvLv1NibswyQ3WbgufP", // 2024-01-29 00:08:22 - 395000 => "FQh8ysNsxueJ2xinfchiZJaNPizof89zk16fhGzCeb5N", // 2024-02-01 20:22:49 - 400000 => "ALB3X674Vn2Ff6CjM8KV97sYsY7JoRBic8Pzw6gCG4xc", // 2024-02-05 17:35:02 - 405000 => "3b1D2SUnyJQDfx5FqXPxiMs6aLhBCyNqNPk9nySJyHbY", // 2024-02-09 15:44:48 - 410000 => "4aXnVqs5H4d7RAj8dcjgrBmLiz3TSEyAC3h23Mp7HYjb", // 2024-02-13 12:31:49 - 415000 => "agUaqMpBcdV8hvEiAWREqxGdVJYY8jAS9TjHacnamPh", // 2024-02-17 08:52:08 - 420000 => "4Rn4ft5spMzJzYadMMwNFZXt3wz6bpEaTZgrs6EfL8Zj", // 2024-02-21 05:52:23 - 425000 => "7BhLvDTjyTXsDZn6WrLTFNm7daHSSRZ766ENtoaJ74hT", // 2024-02-25 02:24:15 - 430000 => "HumXU8fAiMBs1FFPg5RoHQUJZVG6ZzM5nsCR5JgCjpvv", // 2024-02-28 23:22:52 - 435000 => "DjdTPba5Dx6mLSZQKxd4o7FV2jJCYEthn5MUpZGauB6a", // 2024-03-03 20:27:03 - 440000 => "ALtzy3dz2A4VwmrC2G5zqMFvmH44pi3RUSNAsA3fgye3", // 2024-03-07 17:22:32 - 445000 => "BUP44kokcdKbpa6W9PYFyM21yKR3nZeSPvCkQJ81hk52", // 2024-03-11 14:19:20 - 450000 => "4irSmj8ZWBmxkLiCP8RhcjwmdAUfsJWXyzsEH9FYYyHH", // 2024-03-15 10:39:42 - 455000 => "7jtuqK6zhGSxyBpdxK9F5dEwQQN3ACvyMbHwt2gB75y6", // 2024-03-19 07:17:21 - 460000 => "Fox1HzTNoBJp9kK6GtQtJNUqucyEgYtpC473uPJB5RfQ", // 2024-03-23 03:39:15 - 465000 => "oELF6Kmp6szwum6FraYLPeLwArXRxq3vPWm8JVZjvxk", // 2024-03-27 00:02:32 - 470000 => "JDsLPPwNQBSM7fjMgyf3NzhuzN6vsbfYcT9AvGgv2LB6", // 2024-03-30 20:33:18 - 475000 => "6ty7t8xciD8VCcfk3ffESfDpeQ3RwC6BwEdyVTmuzPGB", // 2024-04-03 17:23:50 - 480000 => "79k6mGhZXwDy3yrnQufcf2K55U9cieLP9HmaGmeD5yKj", // 2024-04-07 14:07:45 - 485000 => "8MQXoNMkECtsTFuzdWMLmyUkWNVvvA5Q6yjFDQjYiEeN", // 2024-04-11 11:10:27 - 490000 => "GVEeZ16FRp9RWaAzeujyvcBbVzjcPD4waL6p4X6pTXwm", // 2024-04-15 07:55:42 - 495000 => "Gz1YfqfRjgWLd7yazmzn4tyBo4JH2SAPYHzLWeGFRdb8", // 2024-04-19 08:41:41 - 500000 => "3vVHbtw9Us6KZFEYR6oGNfE75QqCvdj5SvGACLk15RyQ", // 2024-04-23 05:51:38 - 505000 => "8viVhdLX3mhawrToPQfjE6GqSaKeuHmwEGDHtE66DDwe", // 2024-04-27 03:09:03 - 510000 => "5P9V3Zzr7euU9PbBgvHTEKhvp31ssLEeAWsUsNBRsE1W", // 2024-05-01 00:44:12 - 515000 => "CmaM6t7AA6WcEDJXtSs1C95PeeJy3FDBrE8cATtAeDGW", // 2024-05-04 21:38:51 - 520000 => "HGGchZdb1SPcqsft4nd19VRBaqtxabDnGB7k6NVvXPWb", // 2024-05-08 19:02:49 - 525000 => "HebNxkk64Z9ohdTNUj7k6FByZdricGbKHokzZLtXXPjf", // 2024-05-12 16:37:38 - 530000 => "HaDmHV13nEn5G13hjGN59hvuuZgvZ3Ws3B6bGYkG7fif", // 2024-05-16 13:43:28 - 535000 => "AUyFFULhqPYLvXYSY7t2mUZJ1CEzdpW9Z2snUxZmiV21", // 2024-05-20 10:35:47 - 540000 => "CsMCam3t6pPuZCGp7Rit2cmhV3t5AJym73t8tj7hD5vq", // 2024-05-24 07:59:04 - 545000 => "GAwvfPiFEVdHMS523TiZhvMcwwcZeenoBPDG5Hp11ith", // 2024-05-28 04:51:58 - 550000 => "A8igwUcabWpuxwDKfMLdC1xiFFcyofdAPL9yowozNJT2", // 2024-06-01 01:39:32 - 555000 => "DEPagpp1BawhAr2FhUE9YD8VCU2amNaKwNUv3qpUJcUn", // 2024-06-04 21:59:01 - 560000 => "BEiTrucHxH4LdU1SvHLp9GMy1P4QwUBVqf1iGFJnJRdd", // 2024-06-08 18:45:11 - 565000 => "FbXK5Q8srFGS9DFd8cT3yMvCBAJqB8qqP5W5JxvNHXE4", // 2024-06-12 15:25:43 - 570000 => "DaGBbwBhwEVjFmH3NjFdNwfsw4gdshgJfGMRcfr5AH2P", // 2024-06-16 12:04:17 - 575000 => "3eAWYfEopXoZnFC113kAPB8wuuBad1F7cvv7ewnBKZxL", // 2024-06-20 08:44:55 - 580000 => "9KMxWsSAPk2xzRVfZQumRfSwbTHjvbG1mcrRiMgFEHR5", // 2024-06-24 05:11:22 - 585000 => "9vCjXS1Fr7eXakLtfyYQXHfzAnCa42KnMDQkbnxsgcsd", // 2024-06-28 00:58:31 - 590000 => "5s7Ls8FbDUU5QUgGz24qKKrUsyS2e5pZ9A1NioVdFJRJ", // 2024-07-01 22:30:52 - 595000 => "65rMpGTP2s38SnbAFCz9zBXFL24XZqcTQwgToRGs9rZy", // 2024-07-05 19:16:12 - 600000 => "EYQFah3PKnRsk9BJJkkmSSHiBwAEDfue4tabzYSVVFWJ", // 2024-07-09 15:34:50 - 605000 => "P3fV4hDD2AGX2zerR56iNtoH5QXiFN9kZFFHfRFMbGs", // 2024-07-13 12:04:18 - 610000 => "511Y4Nym2wkZKwohgvpRT1AQk6yHu8QBFDkzNAsYmZEs", // 2024-07-17 08:12:07 - 615000 => "9vhQ6efWFehEBSmxsTdnxpMjKBQCorXtDSjfAK3K9Z4g", // 2024-07-21 04:45:22 - 620000 => "GQqVU8aTjmmjWW3Thepo6oRY5aspSTTYHQjwYWPYPfTv", // 2024-07-25 01:40:37 - 625000 => "6Vho2GcK89SDyjuXAjuA1JTWpNdJRkmzAz7CBHLEFjBx", // 2024-07-29 05:43:36 - 630000 => "7E6KkjZwYCPVsGNpnwN8sHCBn5aJFi6geSF1Bt42JiuP", // 2024-08-02 02:08:35 - 635000 => "3SVhx2YZAHZBvuJbwMQNoeysejykarxVhhkoezoNnrZn", // 2024-08-05 22:46:11 - 640000 => "7z7XMjEksvxnzgEECPfAv28FGno4R6Y3VqtFYgYWuRUm", // 2024-08-09 19:02:26 - 645000 => "4waPt22QUgLkKRFHhxorHN7vxYHy9h3fFMcjB3YJuBUj", // 2024-08-13 17:28:11 - 650000 => "CGLvdFCF6KFbEBTLwzgqBinKqik2Fv4t45UHTKBsSWAm", // 2024-08-17 15:11:30 - 655000 => "DLEoeqzR6iLnBKv5o4sxQ9YM27faULYigcoqK43nJHyx", // 2024-08-21 11:59:08 - 660000 => "B9xkadHFoaYo7suoUzRAerUPBX12zZDynek2rJChmiC4", // 2024-08-25 08:12:50 - 665000 => "4hc8prVQEZEqrwSgjNPkYTb3aSYZ11EJHpRDLUr6BvNQ", // 2024-08-29 04:34:56 - 670000 => "2NZNfZyJADfXhRkckQ65T73mAfuNSiWMpn4pXby1qk6z", // 2024-09-02 01:07:59 - 675000 => "AQKr5ZvYqu9GsYefJLKwfnrf6RcYA4YfEpALBnymQxmg", // 2024-09-05 21:41:51 - 680000 => "HLRUNdykRX34HzRfQj92HjSwvy5ek7wjM442BK7STdfA", // 2024-09-09 17:51:08 - 685000 => "8HDbhgB3oq8iUVD8YvbhTpyTHLQqyEjLyqgmNuSwQHKC", // 2024-09-13 14:41:22 - 690000 => "HU9GESw6NNUWnSsZ1rktNzJWE5AyAcxbvcqf4d5pf2Ev", // 2024-09-17 11:09:57 - 695000 => "Fjmqsy8me1Fdrx8G5xtu7EHQh3ha2PVusT2myiaFDgn9", // 2024-09-21 07:45:24 - 700000 => "2PFJW3iUdHTSMYD45geCs39XChvzAA1pTkf52A5mAaRo", // 2024-09-25 04:47:05 - 705000 => "5ZExFWZw2wXvV8AGnNzGBDeYAUmmMoWzVHG4dXnfadnP", // 2024-09-29 01:11:19 - 710000 => "A1MA62eN86PM1aRezbWP78aivxtydQPjHkgwCvcs26Jb", // 2024-10-02 21:56:10 - 715000 => "3vLcdWpWE1Zz2xVUuGW8XrYwRvCbFNKwf9K8c8RiQfr4", // 2024-10-06 18:32:15 - 720000 => "yXwDNA8SpRmfAwqD2afUk1Ctw1io6MXBKTTcJAtKXaM", // 2024-10-10 15:31:49 - 725000 => "96dDq9y1STC3qFQpLMVDLWQZaBDR85kBEh8VJkQGxhhA", // 2024-10-14 11:57:59 - 730000 => "Fo2pWjacRda2HsqXEbCFGPzbKNGkGYgNqGnm51Q4f5RQ", // 2024-10-18 08:25:07 - 735000 => "86sNYLwURbY5tF3dykg4p8cfcZQmTPNzM9dYH2zZTHdj", // 2024-10-22 04:39:37 - 740000 => "EpVBvTdJkMdbEgbHqnV7T5vVD7UJPuCWQatSwf4Uouuv", // 2024-10-26 00:54:18 - 745000 => "9VzUDCBp6UuVoYiuHciZwwJisyAbrdXwWt13Hgx7UhWL", // 2024-10-29 20:55:20 - 750000 => "97y3wB4hcUzZQCwDxFgWw2jdZY2Spk25eXhQjBsJpbpt", // 2024-11-02 17:21:25 - 755000 => "7MxRvN6o82GypCntw13JnZKHLXCRSDbiJcUEY5qEGKvo", // 2024-11-06 13:44:06 - 760000 => "6JD1oo7kksx4LjdzYx8kEZihTXF1TbtsoXW3vy222QX4", // 2024-11-10 10:00:25 - 765000 => "5b1Fzt5DXE2Kasb8kX7KmCfkLogwDu8bHjjXfi5s2A5f", // 2024-11-14 06:36:29 - 770000 => "AGczsoQ3benuUh15C92PcmUidgrHKyWWD1RC7fTBwn8h", // 2024-11-18 03:34:23 - 775000 => "2PaNHJJpb3wXT1otxcbRyvBbQVo8WbUiCWJkzQgJNC2c", // 2024-11-22 00:00:57 - 780000 => "EMHwUyRBDoNRYRbcznJbJ6SYhni5vzW1SJ2uKgEuQJo7", // 2024-11-25 20:37:43 - 785000 => "8tq7CzqciKcY5UjAzeN9ibgwKYDVysnfBLj3tApmCgWZ", // 2024-11-29 17:15:06 - 790000 => "E4FaUDuUtTo9j7oo8zGQuHCJBzgasZyzGXKRbekCjovf", // 2024-12-03 13:37:26 - 795000 => "D8djZWfxWkBKu8zkvXUayBXBJTGedUpaqesUMYZbRLV6", // 2024-12-07 09:52:22 - 800000 => "9VWSDBKPJeH1Wp7SsxGadi5vPBkJcTq3EQopo9wN77ER", // 2024-12-11 06:19:03 - 805000 => "F4Yg9ypBgCJ4d1Vgz3m4A2mQhzLyt2ReD62xr2zy3MJi", // 2024-12-15 02:40:48 - 810000 => "HiHujKeQSjNCyiZv1PzZTfDFdgWVHYq6wp62JgvB7hap", // 2024-12-18 22:40:21 - 815000 => "6kuAxR773268NcTZawBWQKyELyiEDDxsvkuKbSy4vjuk", // 2024-12-22 18:57:06 - 820000 => "2NMHcW9DjUVedxckf1bspBTkxhu6S6z6VNRAfQM1kW7R", // 2024-12-26 15:42:26 - 825000 => "5gHGADNFmYaLcACcRsCZ1YGvtcZKLRkjo5Q82GGA5uwL", // 2024-12-30 12:17:26 - 830000 => "6ococ6kNtrd8huhQ2TiCsswLD6T8CpEx7D8rz46xMZRY", // 2025-01-03 08:45:37 - 835000 => "9jWHmrQXZJwsq5g44mGBmNq3JYfArDt4m8gbJ1czpfUL", // 2025-01-07 04:54:00 - 840000 => "EkMGQGUnEcyVjEBJAwfGXF9tQcs9pM9pw2NvBZwSk2Ux", // 2025-01-11 01:39:08 - 845000 => "4YhbYPJaR5mRvdzEqTXuCX5sTKcQZz1hR5PCZ76tnzEA", // 2025-01-14 21:44:34 - 850000 => "9iTmUj4epSBNoTsqjac15t6CKdWBPLzBBhC34AWDYuHp", // 2025-01-18 18:04:40 - 855000 => "9ccmphxedz8zP2DDt5n6Y2UZg9HyVfwg1kddfEbnrz3X", // 2025-01-22 14:44:45 - 860000 => "9bKFU8Gdxv1hgz2r8cg3FHhQugjm3t2n2raTpnz1DZet", // 2025-01-26 10:59:38 - 865000 => "ngGDumKcrA1qoPoayr65L1pMRJCqrz7nYgodKRzPqqL", // 2025-01-30 07:00:00 - 870000 => "Bab9TMw3jRrm8QaTicXnRjYNwpzyMcMJ8bCXTzzFYc1W", // 2025-02-03 03:45:14 - 875000 => "AHgZQeKASLdagpt2UwqwNSbBfckAyyAPUEXUfJbs86ZZ", // 2025-02-07 00:28:06 - 880000 => "75FKbxy9SYU3CaWArovbPkAoKKrSxZZvnK1KABVC8cTa", // 2025-02-10 20:22:48 - 885000 => "Gdchg4ah2WwEGQpogoGDesiNuvjqaEpuKGhE7kNKw182", // 2025-02-14 16:56:57 - 890000 => "4MnM6v3TCdLMPTxmcmRt6Shn7MB6bi4EdeT6jQRdZmBT", // 2025-02-18 14:00:02 - 895000 => "ARtx4uWsR3X4TB8sXtgW8KiHakm3gaB5YY96yEF2qVBs", // 2025-02-22 10:42:30 - 900000 => "6xB4acpP9wH67UbQPetLMJuwie9GPaN74W2MMdEPqy2e", // 2025-02-26 07:31:50 - 905000 => "AcPAbz3Th1x5p4BmW2aKcP2Hi3S7tYvAgtyxrSRdu3Ta", // 2025-03-02 04:39:32 - 910000 => "4FQkMuJ134cFjsgLXM5ZHX6FRhhced4hB1QQB1UNcnKD", // 2025-03-06 01:12:51 - 915000 => "6613yadgpzt8uXPze7VTojdRNr48hHMFcapY5GUHyGN3", // 2025-03-09 21:23:11 - 920000 => "9roX4cv7yhtmbQHdCgnLzWsnu1pPYMzXH3zDeH4QLsiK", // 2025-03-13 17:53:32 - 925000 => "6xcQaSr2WkezjEHmiFuBRLcScFgQ623NTFmzaRKaJLRy", // 2025-03-17 14:09:38 - 930000 => "6qT9H76bUyxH1yX4xQqNkwqxzME42PBMk7KmD1Tjyt97", // 2025-03-21 10:21:37 - 935000 => "FPLnvt2aFfZc7rHDEQKxKPhshv4u4EChA4Dzi8UzXXc9", // 2025-03-25 06:58:47 - 940000 => "C9ZgWoTbaUo9RfxcRSB3WzABL5Z2X62r6raQba6oZkTW", // 2025-03-29 03:28:49 - 945000 => "8djUy2s3ErqKoaAZ8tEqYBjTuG6VGwmL4CcPj1AYWhnE", // 2025-04-02 00:05:26 - 950000 => "HyJvaVMGvqYDdqZEqW4Y6Bra8jx9ADwY2MSy7y4ND4s2", // 2025-04-05 20:13:52 - 955000 => "ALxZpH1PYWskBkk5ZH4DveEF9xA8n5cVBV6JQ9vmKj74", // 2025-04-09 17:02:18 - 960000 => "EscLk32eamDdueoS19WroJZ7NP9fJNeZ7MTZHVBavbJJ", // 2025-04-13 13:35:32 - 965000 => "GAcupX77Bh82YbXqQZi2PSd2Yj8rrSekoriGVs3ZJrWa", // 2025-04-17 10:03:52 - 970000 => "ASrHRYyLoqVHxZxvR87gyPM65czPpAcySdWB3bgBdyGp", // 2025-04-21 06:40:39 - 975000 => "7pggPX6w1AmwVd7L6cLXcuyaTQNno8REJRijaBP58bzE", // 2025-04-25 03:31:58 - 980000 => "C16rzAjghYuQ3TWnmGSFzyJDodC3QWPteoy6BQ3Ea1r1", // 2025-04-28 23:58:41 - 985000 => "6eZgYP8LDPzsoUi7xR7q2LBjw3DKGgNo2YmVqcxJ9oPH", // 2025-05-02 20:53:28 - 990000 => "9AB2Mk9NoARaWsvWWUhMMcUHEPpoLXoXxDNcobm7mfCD", // 2025-05-06 17:05:00 - 995000 => "SGDLZEWGgDP8Ru8gk4ATmdXujo2mHbApmjqaMwkCPhc", // 2025-05-10 13:46:53 - 1000000 => "wPCYpmpbQGoigsWq32kEaJhbDCM6h4bKLJDpdzncGvb", // 2025-05-14 10:25:40 - 1005000 => "8T3TP2aLj2MqBpHfSTFUpaFJpsdSq5xZY5QXSLMSFCy6", // 2025-05-18 06:29:26 - 1010000 => "9GW7yS42dsv6Bid8zhjZeSGpMBLqLpxdg5MjEtyznVLf", // 2025-05-22 03:29:56 - 1015000 => "9dZreCGDwFdas3KC4Aw69NniuYBGGnyDH9SjauALpd4m", // 2025-05-26 00:12:06 - 1020000 => "DHGa1XSFT8gRhnYiwa3bs3SoWhg94PmcPP15RXnLNm4v", // 2025-05-29 20:47:59 - 1025000 => "GPPHqM9KDHMJH3fCjQkUDWU3dn77uxbYS95upGPBBC7N", // 2025-06-02 17:04:29 - 1030000 => "7LokzmGWVVtddiwLNTeiw1d7uxawV8kAdk89GVk8woDs", // 2025-06-06 13:58:10 - 1035000 => "5JWi4VMZ6QojLjeN2iAaFseKXqSUGCm7oYYuycfbPLUx", // 2025-06-10 10:46:11 - 1040000 => "9gNHs4Z9SSXh97HF58cGMszKirNZSQFJNNkTvf32qcbz", // 2025-06-14 06:57:19 - 1045000 => "7vpTD4WbVqzH9RQyKnid7apMKqM3riMqGZmsP6vF4HjU", // 2025-06-18 03:41:38 - 1050000 => "9y8MrKfRuuqRQSNCwFANyxTB6gE1KgZ8mXf7rX5iSUs7", // 2025-06-22 00:20:25 - 1055000 => "7EVcno2ham49gi6oPjNenWeXJrhtJkfZgwAwe8daN4Bx", // 2025-06-25 20:28:29 - 1060000 => "9BQrDUPcyZqah1fKrrToAAxs262Qmjy373gSktHPWKSY", // 2025-06-29 16:55:22 - 1065000 => "DEAmD7PfjJTLaEEuX6CZEBw19XT3YoJD51VBTg3SnqQQ", // 2025-07-03 13:31:12 - 1070000 => "7Vee5fBCeu7WjU8qH4hbFKozytuVEj3QGu87ADupxRUt", // 2025-07-07 10:18:45 - 1075000 => "Ff2FtySDyASqvsCycJ2EPFwaakZuHmfRyxrt1sPQ9FTN", // 2025-07-11 06:27:01 - 1080000 => "4eNxiciWcvY9S8GfqibPGDCmdqYXzjB9ouok36kxZWGw", // 2025-07-15 03:03:24 - 1085000 => "9L3CciPdTd7pibwqgqvkrrqZXPFB5ehaK5HndBuTUMN7", // 2025-07-18 23:36:22 - 1090000 => "3gWmKFvbDNokMYQiSw7woY96LS64FmYxKWdcrcY9NzN3", // 2025-07-22 20:33:05 - 1095000 => "Ciop2JDnhEgcVrfs93k1sAToyCjFTBjt1Qfyn6pkrUqN", // 2025-07-26 16:58:50 - 1100000 => "k2a1NFwTZwWVZwEFg2qg9ZypZRuqfLLE3JwMPSKiDxW", // 2025-07-30 20:58:57 - 1105000 => "EdUoV2LeZJpZqs7FAg7fYBL8PSLm7vhLxZB4M1F7YaJT", // 2025-08-03 17:28:57 - 1110000 => "DKPaHmGP2rPgDZwfnaVHvdP73o9A31Cq2TEHHYjKy2ZC", // 2025-08-07 13:45:16 - 1115000 => "5FktenpNSMQJbHeK9JXejHBGnJMp4ZynwbK5EDFBEzab", // 2025-08-11 10:19:31 - 1120000 => "2FA8Dd3pwHsaGhjSgshEytYxB3dp14Z1sL3eRTbV2DvJ", // 2025-08-15 06:40:41 - 1125000 => "5BqnAgiDxkqZu72C8KNzivMM89UZAdQMqp6jaqEgf1Xd", // 2025-08-19 03:17:25 - 1130000 => "54KTbyPFfK48s7N2UkChdgvZmeAQQkjz1BhFXRLcdD2R", // 2025-08-22 23:38:30 - 1135000 => "Byrk7h3Da2ATtLx1HkK3MsBioYWi1GFY1pP3jNc9orWK", // 2025-08-26 20:11:21 - 1140000 => "GMfUSodLy3xinREHG7XgYQUdmY7Vchzrngiwwv8c4gTA", // 2025-08-30 16:54:23 - 1145000 => "HucYsXkZnowZBGY5gDFosV6KxjPQtqqt921bKYDWFJMC", // 2025-09-03 13:35:12 - 1150000 => "AoMek37aDiGMfuvX49CRBFzE1UkKfZFJvCHZ6GUsYsCf", // 2025-09-07 10:12:24 - 1155000 => "3ytuEwEZjjQyaG1mjwTWsHwhfzQpUtyvKsPaLyaphWNp", // 2025-09-11 07:01:46 - 1160000 => "2tXySoZgmm4hp4U8BsftoqYYkGwr1o3RMdjor1nKmT47", // 2025-09-15 03:17:24 - 1165000 => "4zxmQxpdTxQ3yAE78qMKweY3ef9ksd1GnAmCXKXokgzZ", // 2025-09-18 23:35:02 - 1170000 => "GE3Wqnf7XzKXj35d9zFW8ZfhTFeKvH4RQkzKQKpPaycG", // 2025-09-22 20:20:24 - 1175000 => "4rGeqnud7hs3MdcQWv9iYnHdJt2G6SQvvn9kh6GtwCPL", // 2025-09-26 16:54:27 - 1180000 => "CA1Lmxr77GXzu6VM9mgatfosanN1yADDBBtrijGeCvse", // 2025-09-30 13:34:42 - 1185000 => "5ujJpqgfEHRffNimk8Fyc2aarJkNWEnyuHMiBbFAx3Pz", // 2025-10-04 09:42:44 - 1190000 => "D12fqZqzf2fjKgosbNr2k7ZgnL7oHytPavEVaipqnBCZ", // 2025-10-08 06:42:17 - 1195000 => "EcX83v4B1MM4Ry533ZE5KFupxjzXWP1Ah51bzofkzKbH", // 2025-10-12 03:33:45 - 1200000 => "7cx13d5ciQGCGmcq6pLSMEGvXpC7njxGsSCbRoMNAg13", // 2025-10-16 00:09:32 - 1205000 => "FBgPCfj98EndJa6dyHvA9rccoG9m5t3Q5Jk3eV7gN3Zv", // 2025-10-19 20:40:56 - 1210000 => "KeSHZfka5Sq19bcbTadTs3Hw8AFYzyJrexdg3fy85B1", // 2025-10-23 17:23:30 - 1215000 => "2KMg4H12ahENAYpsvHN7yruWFGQiN4Y1S43LAorBv5CN", // 2025-10-27 13:38:32 - 1220000 => "CcqmZEYoqZxMg7Q2HpEqaaZHJu7WM1J2F8uwQMEz1S19", // 2025-10-31 09:59:03 - 1225000 => "7yQtC3bYDaPekSt32s27DRdK69QXLA5ML4MrjAJuf4pg", // 2025-11-04 06:44:17 - 1230000 => "hBPbFYWduzUDWmxA6ySJho89KUaZn3jnDzLEFKSJARi", // 2025-11-08 03:24:40 - 1235000 => "DHSMSkEguPPiEyEf3iUf8iiTm4JcZkGbFcnpreo75195", // 2025-11-12 00:01:34 - 1240000 => "5Ce4DNzZAuAcFR1ayiPcvWgomcsX4g3j3KsvzwYVwh98", // 2025-11-15 21:07:57 -]; +require_once __DIR__ . "/checkpoints.".$chain_id.".php"; diff --git a/include/class/Blockchain.php b/include/class/Blockchain.php index 7f30ffec..f797c437 100644 --- a/include/class/Blockchain.php +++ b/include/class/Blockchain.php @@ -184,7 +184,7 @@ static function getStakingMinBalance($height) { if($height >= UPDATE_12_STAKING_DYNAMIC_THRESHOLD) { $collateral = Block::getMasternodeCollateral($height); return 2 * $collateral; - } else if(NETWORK == "testnet" && $height >= UPDATE_11_STAKING_MATURITY_REDUCE) { + } else if(CHAIN_ID == "01" && $height >= UPDATE_11_STAKING_MATURITY_REDUCE) { return 10000; } else { return 100; @@ -192,7 +192,7 @@ static function getStakingMinBalance($height) { } static function getSmartContractCreateFee($height=null) { - if(NETWORK == "testnet") { + if(CHAIN_ID == "01") { return 100; } else { return 1000; @@ -200,7 +200,7 @@ static function getSmartContractCreateFee($height=null) { } static function getSmartContractExecFee($height=null) { - if(NETWORK == "testnet") { + if(CHAIN_ID == "01") { return 0.01; } else { return 1; diff --git a/include/class/PeerRequest.php b/include/class/PeerRequest.php index 8c81e5bf..ea825767 100644 --- a/include/class/PeerRequest.php +++ b/include/class/PeerRequest.php @@ -26,12 +26,6 @@ static function processRequest() { _logf("Invalid coin request=".json_encode($_REQUEST)." server=".json_encode($_SERVER)); api_err("Invalid coin ".json_encode($_REQUEST), 3); } - if(isset($_POST['network'])) { - if($_POST['network'] != NETWORK) { - _logf("Invalid network"); - api_err("Invalid network ".$_POST['network']); - } - } if(isset($_POST['chain_id']) && strlen($_POST['chain_id'])>0) { if($_POST['chain_id'] != CHAIN_ID) { _logf("Invalid chain ID"); diff --git a/include/class/Transaction.php b/include/class/Transaction.php index 291506ec..342809dc 100755 --- a/include/class/Transaction.php +++ b/include/class/Transaction.php @@ -716,7 +716,7 @@ public function check($block, $verify = false, &$error = null) //genesis transaction $mining_end_block = Block::getMnStartHeight(); if($this->publicKey==GENESIS_DATA['public_key'] && $this->type==TX_TYPE_SEND && $height <= $mining_end_block - && NETWORK == "testnet") { + && CHAIN_ID == "01") { throw new Exception("Genesis can not spend before locked height"); } @@ -796,7 +796,7 @@ public function check($block, $verify = false, &$error = null) } $src = Account::getAddress($this->publicKey); if($src==$this->dst) { - if(NETWORK == "testnet") { + if(CHAIN_ID == "01") { if($this->id != "9RyNs6AUnByz4iuWfVAz6mTMCGiPUuqZ6c6nxQZzYEXh") { throw new Exception("{$this->id} - Invalid source address"); } diff --git a/include/class/Util.php b/include/class/Util.php index 20d37deb..382e23dc 100644 --- a/include/class/Util.php +++ b/include/class/Util.php @@ -847,7 +847,7 @@ static function update($argv) { $branch = @trim($argv[2]); $force = @trim($argv[3]); if(empty($branch)) { - $branch = GIT_BRANCH; + $branch = trim(shell_exec("git rev-parse --abbrev-ref HEAD")); } $currentVersion = BUILD_VERSION; echo "Checking node branch=$branch force=$force update current version = ".BUILD_VERSION.PHP_EOL; diff --git a/include/coinspec.00.php b/include/coinspec.00.php new file mode 100644 index 00000000..4fa4c062 --- /dev/null +++ b/include/coinspec.00.php @@ -0,0 +1,95 @@ + 2048, "time_cost" => 2, "threads" => 1]; +const REMOTE_PEERS_LIST_URL = "https://main1.phpcoin.net/peers.php"; + +const MIN_NODE_SCORE = 80; + +const FEATURE_MN = true; +const MN_MIN_RUN_BLOCKS = 1440*30; +const MN_START_HEIGHT = 20001; + +const FEE_START_HEIGHT = PHP_INT_MAX; +const FEE_DIVIDER = 100; + +# Smart contracts +const FEATURE_SMART_CONTRACTS = true; +const SC_START_HEIGHT = 1035400; +const TX_TYPE_BURN_START_HEIGHT = 0; +const STAKING_START_HEIGHT = 20001; + +const SC_MAX_EXEC_TIME = 30; +const SC_MEMORY_LIMIT = "256M"; + +const GIT_URL = "https://github.com/phpcoinn/node"; +const UPDATE_1_BLOCK_ZERO_TIME = 0; +const UPDATE_2_BLOCK_CHECK_IMPROVED = 0; +const UPDATE_3_ARGON_HARD = 0; +const UPDATE_4_NO_POOL_MINING = 0; +const UPDATE_5_NO_MASTERNODE = 0; +const UPDATE_6_CHAIN_ID = 0; +const UPDATE_7_MINER_CHAIN_ID = 0; +const UPDATE_8_FIX_CHECK_BURN_TX_DST_NULL = [0, 0]; +const UPDATE_9_ADD_MN_COLLATERAL_TO_SIGNATURE = 0; +const UPDATE_10_ZERO_TX_NOT_ALLOWED = 27000; +const UPDATE_11_STAKING_MATURITY_REDUCE = 290000; +const UPDATE_12_STAKING_DYNAMIC_THRESHOLD = 290000; +const UPDATE_13_LIMIT_GENERATOR=536500; +const UPDATE_14_EXTENDED_SC_HASH=0; +const UPDATE_15_EXTENDED_SC_HASH_V2=0; +const UPDATE_16_SC_TXS_SORT=0; +const UPDATE_17_DEV_MINER_START=PHP_INT_MAX; + +const DEV_PUBLIC_KEY = "PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCyao5hHHJd9axKhC1c5emTgT4hT7k7EvXiZrjTJSGEPmz9K1swEDQi8j14vCRwUisMsvHr4P5kirrDawM3NJiknWR"; + +const MAIN_DAPPS_ID = "PeC85pqFgRxmevonG6diUwT4AfF7YUPSm3"; +const TOTAL_INITIAL_SUPPLY = 103200000; + +const STOP_CHAIN_HEIGHT = PHP_INT_MAX; +const DELETE_CHAIN_HEIGHT = PHP_INT_MAX; + +const MN_CREATE_IGNORE_HEIGHT = [30234]; +const MN_COLD_START_HEIGHT = 290000; + +const IGNORE_SC_HASH_HEIGHT = []; +const BLACKLISTED_SMART_CONTRACTS = []; + +const DEV_REWARD_ADDRESS = "PdEvtfZwNsbddKLCZQcjTgjpdcznS1w3pG"; diff --git a/include/coinspec.01.php b/include/coinspec.01.php new file mode 100644 index 00000000..1c383da6 --- /dev/null +++ b/include/coinspec.01.php @@ -0,0 +1,99 @@ + 2048, "time_cost" => 2, "threads" => 1]; +const REMOTE_PEERS_LIST_URL = "https://node1.phpcoin.net/peers.php"; + +const MIN_NODE_SCORE = 80; + +const FEATURE_MN = true; +const MN_MIN_RUN_BLOCKS = 1440*30; +const MN_START_HEIGHT = 160001; + +const FEE_START_HEIGHT = PHP_INT_MAX; +const FEE_DIVIDER = 100; + +# Smart contracts +const FEATURE_SMART_CONTRACTS = true; +const SC_START_HEIGHT = 1038000; +const TX_TYPE_BURN_START_HEIGHT = 440000; +const STAKING_START_HEIGHT = 500001; + +const SC_MAX_EXEC_TIME = 30; +const SC_MEMORY_LIMIT = "256M"; + +const GIT_URL = "https://github.com/phpcoinn/node"; +const UPDATE_1_BLOCK_ZERO_TIME = 9000; +const UPDATE_2_BLOCK_CHECK_IMPROVED = 25000; +const UPDATE_3_ARGON_HARD = 45000; +const UPDATE_4_NO_POOL_MINING = 45400; +const UPDATE_5_NO_MASTERNODE = 290000; +const UPDATE_6_CHAIN_ID = 460000; +const UPDATE_7_MINER_CHAIN_ID = 480000; +const UPDATE_8_FIX_CHECK_BURN_TX_DST_NULL = [441381, 479168]; +const UPDATE_9_ADD_MN_COLLATERAL_TO_SIGNATURE = 538000; +const UPDATE_10_ZERO_TX_NOT_ALLOWED = 671000; +const UPDATE_11_STAKING_MATURITY_REDUCE = 898000; +const UPDATE_12_STAKING_DYNAMIC_THRESHOLD = 911000; +const UPDATE_13_LIMIT_GENERATOR=1041000; +const UPDATE_14_EXTENDED_SC_HASH=1044500; +const UPDATE_15_EXTENDED_SC_HASH_V2=1117000; +const UPDATE_16_SC_TXS_SORT=1238000; +const UPDATE_17_DEV_MINER_START=1393000; + +const DEV_PUBLIC_KEY = "PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCyao5hHHJd9axKhC1c5emTgT4hT7k7EvXiZrjTJSGEPmz9K1swEDQi8j14vCRwUisMsvHr4P5kirrDawM3NJiknWR"; + +const MAIN_DAPPS_ID = "PeC85pqFgRxmevonG6diUwT4AfF7YUPSm3"; +const TOTAL_INITIAL_SUPPLY = 103200000; + +const STOP_CHAIN_HEIGHT = PHP_INT_MAX; +const DELETE_CHAIN_HEIGHT = PHP_INT_MAX; + +const MN_CREATE_IGNORE_HEIGHT = []; +const MN_COLD_START_HEIGHT = 879000; + +const IGNORE_SC_HASH_HEIGHT = [1142688,1099548,1142695]; + +const BLACKLISTED_SMART_CONTRACTS = [ + "Pt6iSKRkWBC37tco1JD2tDJh2WxrKExomU", "PbxqKgxHArNfN8YbXyy8FHdahmcFhfQdEQ", "PZWytEE4FUMstwfWhq4GHe42qstVPVL4AL", + "PptgFV5k3Z43Z9S7Q4t5nXj12QMpDEMirT", "PdiJCJobRuw4uTum4AUC3PFJcvL3qEL79r" +]; + +const DEV_REWARD_ADDRESS = "PdEvtfZwNsbddKLCZQcjTgjpdcznS1w3pG"; diff --git a/include/coinspec.inc.php b/include/coinspec.inc.php index 2a860b89..3ec7d8cb 100644 --- a/include/coinspec.inc.php +++ b/include/coinspec.inc.php @@ -1,101 +1,6 @@ 2048, "time_cost" => 2, "threads" => 1]; -const REMOTE_PEERS_LIST_URL = "https://main1.phpcoin.net/peers.php"; - -const MIN_NODE_SCORE = 80; - -const FEATURE_MN = true; -const MN_MIN_RUN_BLOCKS = 1440*30; -const MN_START_HEIGHT = 20001; - -const FEE_START_HEIGHT = PHP_INT_MAX; -const FEE_DIVIDER = 100; - -# Smart contracts -const FEATURE_SMART_CONTRACTS = true; -const SC_START_HEIGHT = 1035400; -const TX_TYPE_BURN_START_HEIGHT = 0; -const STAKING_START_HEIGHT = 20001; - -const SC_MAX_EXEC_TIME = 30; -const SC_MEMORY_LIMIT = "256M"; - -const GIT_URL = "https://github.com/phpcoinn/node"; -const UPDATE_1_BLOCK_ZERO_TIME = 0; -const UPDATE_2_BLOCK_CHECK_IMPROVED = 0; -const UPDATE_3_ARGON_HARD = 0; -const UPDATE_4_NO_POOL_MINING = 0; -const UPDATE_5_NO_MASTERNODE = 0; -const UPDATE_6_CHAIN_ID = 0; -const UPDATE_7_MINER_CHAIN_ID = 0; -const UPDATE_8_FIX_CHECK_BURN_TX_DST_NULL = [0, 0]; -const UPDATE_9_ADD_MN_COLLATERAL_TO_SIGNATURE = 0; -const UPDATE_10_ZERO_TX_NOT_ALLOWED = 27000; -const UPDATE_11_STAKING_MATURITY_REDUCE = 290000; -const UPDATE_12_STAKING_DYNAMIC_THRESHOLD = 290000; -const UPDATE_13_LIMIT_GENERATOR=536500; -const UPDATE_14_EXTENDED_SC_HASH=0; -const UPDATE_15_EXTENDED_SC_HASH_V2=0; -const UPDATE_16_SC_TXS_SORT=0; -const UPDATE_17_DEV_MINER_START=PHP_INT_MAX; - -const DEV_PUBLIC_KEY = "PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCyao5hHHJd9axKhC1c5emTgT4hT7k7EvXiZrjTJSGEPmz9K1swEDQi8j14vCRwUisMsvHr4P5kirrDawM3NJiknWR"; - -const MAIN_DAPPS_ID = "PeC85pqFgRxmevonG6diUwT4AfF7YUPSm3"; -const TOTAL_INITIAL_SUPPLY = 103200000; - -const STOP_CHAIN_HEIGHT = PHP_INT_MAX; -const DELETE_CHAIN_HEIGHT = PHP_INT_MAX; - -const MN_CREATE_IGNORE_HEIGHT = [30234]; -const MN_COLD_START_HEIGHT = 290000; - -const IGNORE_SC_HASH_HEIGHT = []; -const BLACKLISTED_SMART_CONTRACTS = []; - -const DEV_REWARD_ADDRESS = "PdEvtfZwNsbddKLCZQcjTgjpdcznS1w3pG"; \ No newline at end of file +require_once __DIR__ . "/coinspec.".$_config['chain_id'].".php"; diff --git a/include/functions.inc.php b/include/functions.inc.php index 8a34544e..c11e976a 100755 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -217,7 +217,6 @@ function peer_post($url, $data = [], $timeout = 30, &$err= null, $info = null, & 'data' => json_encode($data), "coin" => COIN, "version"=>VERSION, - "network"=>NETWORK, "chain_id"=>CHAIN_ID, "requestId" => uniqid(), "info"=>empty($info) ? Peer::getInfo() : $info @@ -285,7 +284,7 @@ function peer_post($url, $data = [], $timeout = 30, &$err= null, $info = null, & $res = json_decode($result, true); // the function will return false if something goes wrong - if (!$res || $res['status'] != "ok" || $res['coin'] != COIN || (isset($res['network']) && $res['network'] != NETWORK && $res['chain_id'] != CHAIN_ID)) { + if (!$res || $res['status'] != "ok" || $res['coin'] != COIN || (isset($res['chain_id']) && $res['chain_id'] != CHAIN_ID)) { _log("Peer response to $url not ok res=".json_encode($result), 5); $err = $res['data']; return false; diff --git a/include/genesis.00.php b/include/genesis.00.php new file mode 100644 index 00000000..1e924a5f --- /dev/null +++ b/include/genesis.00.php @@ -0,0 +1,13 @@ + 'iKx1CJQ38Fu3W4uvvyWDqscDHK79SSU5sZcVG2Hdg1VVt8R8mJmn8ppQUQjVj74Z89q22Cqmdw5s44JTJiN5v5XPiUmtoDsHhD', + "public_key" => 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCwV8eomW54A8ffNJhS8h3iq1DpzNaDadZvMBSBp6yqKLuebioGkhPjZCGCe59WCVTMmGAHF1qCXaVzKWmCR7KBNEA', + "argon" => '$argon2i$v=19$m=32768,t=2,p=1$dnN6NVAvUVU5RUt0NzJPQQ$fucz2ipellsRhqbR6g3oAG+wTuzcJi44KsL7D6g1P/A', + "difficulty" => '60000', + "nonce" => '0215d1ec54cab34df311b623e270c7171e4b7023aee65fde46af07ef62eea2fe', + "date" => '1680350400', + "reward_tx" => '{"9YF9wJKWP8cKuGWsaSZEs9QrHF39vzqsbjSG8VuSQwZ8":{"date":1680350400,"dst":"PgngvvRi27gwQrWQQD43Pj6R3cJaABeLTv","fee":"0.00000000","id":"9YF9wJKWP8cKuGWsaSZEs9QrHF39vzqsbjSG8VuSQwZ8","message":"Doc: Roads? Where were going, we dont need roads.","public_key":"PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCwV8eomW54A8ffNJhS8h3iq1DpzNaDadZvMBSBp6yqKLuebioGkhPjZCGCe59WCVTMmGAHF1qCXaVzKWmCR7KBNEA","signature":"AN1rKvtKPNusPgcV21viJdDH7VJ9oX84TgVp2b7dB8qPaxL5pxo5WKaK7ymuEbdS9uJ7cgJdzdxYAkJE4JUkXFt2cbPnC7mFU","src":"PgngvvRi27gwQrWQQD43Pj6R3cJaABeLTv","type":0,"val":"103200000.00000000"}}', + "block" => '2ucwGhYszGUTZwmiT5YMsw3tn9nfhdTciaaKMMTX77Zw', + "address" => 'PgngvvRi27gwQrWQQD43Pj6R3cJaABeLTv', +]; +const GENESIS_TIME = 1680350400; diff --git a/include/genesis.01.php b/include/genesis.01.php new file mode 100644 index 00000000..0801f29b --- /dev/null +++ b/include/genesis.01.php @@ -0,0 +1,11 @@ + 'AN1rKrcHMBADh4ceGUo3hGvoNLFg7kDjJxfYxSgSyCU1JUDefpvFKoycVid53z1SFSX8neNwvRDejYS3Txas2JSvg7wmnpa32', + "public_key" => 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCwV8eomW54A8ffNJhS8h3iq1DpzNaDadZvMBSBp6yqKLuebioGkhPjZCGCe59WCVTMmGAHF1qCXaVzKWmCR7KBNEA', + "argon" => '$argon2i$v=19$m=2048,t=2,p=1$UGduZ3Z2UmkyN2d3UXJXUQ$KLnWlZm784lkgDlOnrmXhbpwruA+5FLQcdWctEwl62U', + "difficulty" => '60000', + "nonce" => 'ea1a46a97bd1db6fd9503537d67ec9b6c048047fa9536a3df604bf7c0eaac654', + "date" => '1636751245', + "reward_tx" => '{"5KKJEairgawBSAEshhYoxZTuhQbXUBUDEKY4Y2FAuRLz":{"date":1636751245,"dst":"PgngvvRi27gwQrWQQD43Pj6R3cJaABeLTv","fee":"0.00000000","id":"5KKJEairgawBSAEshhYoxZTuhQbXUBUDEKY4Y2FAuRLz","message":"Marty McFly: If you put your mind to it, you can accomplish anything.","public_key":"PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCwV8eomW54A8ffNJhS8h3iq1DpzNaDadZvMBSBp6yqKLuebioGkhPjZCGCe59WCVTMmGAHF1qCXaVzKWmCR7KBNEA","signature":"iKx1CJLcMQBxDTaxH8jPLZKiHM5y17vwvJDs9asLmwy5sUHhq8oZXwNvS35ujH3MKwj9H9g31wP2SCyt8RsTdoXVt2GDAf5t87","src":"PgngvvRi27gwQrWQQD43Pj6R3cJaABeLTv","type":0,"val":"4900010.00000000"}}', +]; +const GENESIS_TIME = 1636751245; diff --git a/include/genesis.inc.php b/include/genesis.inc.php index 7533d3cc..cb022996 100644 --- a/include/genesis.inc.php +++ b/include/genesis.inc.php @@ -1,20 +1,7 @@ 'iKx1CJQ38Fu3W4uvvyWDqscDHK79SSU5sZcVG2Hdg1VVt8R8mJmn8ppQUQjVj74Z89q22Cqmdw5s44JTJiN5v5XPiUmtoDsHhD', - "public_key" => 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCwV8eomW54A8ffNJhS8h3iq1DpzNaDadZvMBSBp6yqKLuebioGkhPjZCGCe59WCVTMmGAHF1qCXaVzKWmCR7KBNEA', - "argon" => '$argon2i$v=19$m=32768,t=2,p=1$dnN6NVAvUVU5RUt0NzJPQQ$fucz2ipellsRhqbR6g3oAG+wTuzcJi44KsL7D6g1P/A', - "difficulty" => '60000', - "nonce" => '0215d1ec54cab34df311b623e270c7171e4b7023aee65fde46af07ef62eea2fe', - "date" => '1680350400', - "reward_tx" => '{"9YF9wJKWP8cKuGWsaSZEs9QrHF39vzqsbjSG8VuSQwZ8":{"date":1680350400,"dst":"PgngvvRi27gwQrWQQD43Pj6R3cJaABeLTv","fee":"0.00000000","id":"9YF9wJKWP8cKuGWsaSZEs9QrHF39vzqsbjSG8VuSQwZ8","message":"Doc: Roads? Where were going, we dont need roads.","public_key":"PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCwV8eomW54A8ffNJhS8h3iq1DpzNaDadZvMBSBp6yqKLuebioGkhPjZCGCe59WCVTMmGAHF1qCXaVzKWmCR7KBNEA","signature":"AN1rKvtKPNusPgcV21viJdDH7VJ9oX84TgVp2b7dB8qPaxL5pxo5WKaK7ymuEbdS9uJ7cgJdzdxYAkJE4JUkXFt2cbPnC7mFU","src":"PgngvvRi27gwQrWQQD43Pj6R3cJaABeLTv","type":0,"val":"103200000.00000000"}}', - "block" => '2ucwGhYszGUTZwmiT5YMsw3tn9nfhdTciaaKMMTX77Zw', - "address" => 'PgngvvRi27gwQrWQQD43Pj6R3cJaABeLTv', -]; -const GENESIS_TIME = 1680350400; +require_once __DIR__ . "/genesis.".$chain_id.".php"; diff --git a/include/rewards.00.php b/include/rewards.00.php new file mode 100644 index 00000000..d089e467 --- /dev/null +++ b/include/rewards.00.php @@ -0,0 +1,26 @@ +&2 - exit 1 - fi - ;; --help) - echo "Usage: ./install_node.sh [--network ]" - echo "network_name: testnet or mainnet. If not provided, mainnet is used by default." + echo "Usage: ./install_node.sh" exit 0 ;; --docker) @@ -33,15 +22,17 @@ function parse_arguments() { ;; esac done - # Check if network is valid (either mainnet or testnet) - if [[ "$NETWORK" != "mainnet" && "$NETWORK" != "testnet" ]]; then - echo "Error: Invalid network specified. Network should be either 'mainnet' or 'testnet'." >&2 - exit 1 - fi } parse_arguments "$@" # Call the function and pass all arguments +if [ -f "chain_id" ]; then + CHAIN_ID=$(cat chain_id) +else + echo "00" > chain_id + CHAIN_ID="00" +fi + # Rest of your script here servers=("phpcoin.net" "cn.phpcoin.net") @@ -78,18 +69,17 @@ find_best_server() { best_server_result=$best_server } -echo "PHPCoin $NETWORK node Installation" +echo "PHPCoin node Installation for chain_id $CHAIN_ID" echo "===================================================================================================" echo "PHPCoin: define db user and pass" echo "===================================================================================================" export DEBIAN_FRONTEND=noninteractive -export DB_NAME=phpcoin$NETWORK +export DB_NAME=phpcoin_$CHAIN_ID export DB_USER=phpcoin export DB_PASS=phpcoin -export NODE_DIR=/var/www/phpcoin-$NETWORK +export NODE_DIR=/var/www/phpcoin if [ "$DOCKER" = true ]; then - NODE_DIR=/var/www/phpcoin DB_NAME=phpcoin fi @@ -117,32 +107,20 @@ echo "PHPCoin: download node" echo "===================================================================================================" -if [ "$DOCKER" = true ]; then - if [ -d "$NODE_DIR/config" ]; then - cd $NODE_DIR - git init - git remote add origin ${git_urls[$best_server_result]} - git fetch origin - git add . - if [ "$NETWORK" = "mainnet" ]; then - git pull origin main - else - git pull origin test - fi - git restore --staged . - fi +if [ -d "$NODE_DIR/config" ]; then + cd $NODE_DIR + git init + git remote add origin ${git_urls[$best_server_result]} + git fetch origin + git add . + git pull origin main + git restore --staged . fi if [ ! -d "$NODE_DIR" ]; then mkdir $NODE_DIR cd $NODE_DIR - if [ "$NETWORK" = "mainnet" ] - then - git clone ${git_urls[$best_server_result]} . - elif [ "$NETWORK" = "testnet" ] - then - git clone ${git_urls[$best_server_result]} --branch test . - fi + git clone ${git_urls[$best_server_result]} . fi @@ -154,7 +132,7 @@ export IP=$(curl -s http://whatismyip.akamai.com/) PORT="" HOSTNAME="" BLOCKCHAIN_SNAPSHOT="" -if [ "$NETWORK" = "mainnet" ] +if [ "$CHAIN_ID" = "00" ] then PORT="80" HOSTNAME="http://$IP" @@ -162,7 +140,7 @@ then HOSTNAME="http://$IP:$EXT_PORT" fi BLOCKCHAIN_SNAPSHOT="blockchain" -elif [ "$NETWORK" = "testnet" ] +elif [ "$CHAIN_ID" = "01" ] then PORT="81" HOSTNAME="http://$IP:$PORT" @@ -170,14 +148,14 @@ then PORT="80" HOSTNAME="http://$IP:$EXT_PORT" fi - BLOCKCHAIN_SNAPSHOT="blockchain-$NETWORK" + BLOCKCHAIN_SNAPSHOT="blockchain-testnet" fi git config core.fileMode false echo "PHPCoin: Configure nginx" echo "===================================================================================================" -cat << EOF > /etc/nginx/sites-available/phpcoin-$NETWORK +cat << EOF > /etc/nginx/sites-available/phpcoin server { listen $PORT; server_name _; @@ -199,7 +177,7 @@ server { } EOF rm /etc/nginx/sites-enabled/default -ln -sr /etc/nginx/sites-available/phpcoin-$NETWORK /etc/nginx/sites-enabled/phpcoin-$NETWORK +ln -sr /etc/nginx/sites-available/phpcoin /etc/nginx/sites-enabled/phpcoin service nginx restart service php8.1-fpm start @@ -207,10 +185,8 @@ echo "PHPCoin: setup config file" echo "===================================================================================================" CONFIG_FILE=config/config.inc.php if [ ! -f "$CONFIGFILE" ]; then - cp config/config-sample.inc.php config/config.inc.php - sed -i "s/ENTER-DB-NAME/$DB_NAME/g" config/config.inc.php - sed -i "s/ENTER-DB-USER/$DB_USER/g" config/config.inc.php - sed -i "s/ENTER-DB-PASS/$DB_PASS/g" config/config.inc.php + echo " config/config.inc.php fi echo "PHPCoin: configure node" echo "===================================================================================================" diff --git a/web/apps/common/include/top.php b/web/apps/common/include/top.php index 35eed8bf..f9998eca 100755 --- a/web/apps/common/include/top.php +++ b/web/apps/common/include/top.php @@ -17,7 +17,7 @@ }); -if(NETWORK == "mainnet") { +if(CHAIN_ID == "00") { $res = file_get_contents("https://main1.phpcoin.net/dapps.php?url=PeC85pqFgRxmevonG6diUwT4AfF7YUPSm3/api.php?q=coinInfo"); $res = json_decode($res, true); $btcPrice = num($res['btcPrice'], 8); diff --git a/web/apps/explorer/address.php b/web/apps/explorer/address.php index 604f11e9..a72993a6 100755 --- a/web/apps/explorer/address.php +++ b/web/apps/explorer/address.php @@ -35,7 +35,7 @@ $addressTypes = Block::getAddressTypes($address); -if(NETWORK == "mainnet") { +if(CHAIN_ID == "00") { $url = "http://".$_SERVER['SERVER_NAME']."/dapps.php?url=PoApBr2zi84BEw2wtseaA2DtysEVCUnJd7/labeler/api.php?q=getAddressLabel&address=$address"; $res = file_get_contents($url); $res = json_decode($res, true); @@ -85,7 +85,7 @@ - + Label