Official Javascript implementation of AI Network Blockchain.
For accessing AIN Blockchain nodes, see JSON_RPC_API.md.
Tracker server is required by new peers who wish to join the AIN network. Each peer is sent the ip address of 2 other nodes in the network. These nodes then gossip information through the network of all transactions and blocks.
NOTE: Tracker Server must be started first before starting any blockchain node instances.
git clone https://github.com/ainblockchain/ain-blockchain.git
cd ain-blockchain/tracker-server/
yarn install
cd ..
node tracker-server/index.js
You can override default port numbering system by setting PORT
and P2P_PORT
environment variables.
gcloud init
# For genesis deploy
bash deploy_blockchain_genesis_gcp.sh [dev|staging|sandbox|exp|spring|summer|mainnet] <# of Shards> <Parent Node Index Begin> <Parent Node Index End> [--setup] [--keystore|--mnemonic|--private-key] [--keep-code|--no-keep-code] [--keep-data|--no-keep-data] [--full-sync|--fast-sync] [--chown-data|--no-chown-data] [--kill-only|--skip-kill]
# For incremental deploy
bash deploy_blockchain_incremental_gcp.sh [dev|staging|sandbox|exp|spring|summer|mainnet] <# of Shards> <Parent Node Index Begin> <Parent Node Index End> [--setup] [--keystore|--mnemonic|--private-key] [--keep-code|--no-keep-code] [--keep-data|--no-keep-data] [--full-sync|--fast-sync] [--chown-data|--no-chown-data]
bash setup_blockchain_ubuntu.sh
cd ain-blockchain/
bash start_tracker_genesis_gcp.sh <GCP Username> [--keep-code|--no-keep-code]
GET http://
GET http://
Operates a single peer node instance of the AIN blockchain. A single blockchain node instance processes incoming transaction requests and maintains a local copy of the entire blockchain. The blockchain node first queries the tracker-server for ip addresses of other peers, and then syncs its local blockchain to the network consensus blockchain. If a node is included in the whitelist and has staked appropriate amount of AIN, it will then take part in the consensus protocol.
git clone https://github.com/ainblockchain/ain-blockchain.git
cd ain-blockchain/
yarn install
ACCOUNT_INJECTION_OPTION=keystore DEBUG=false STAKE=100000 CONSOLE_LOG=true ENABLE_GAS_FEE_WORKAROUND=true node client/index.js
ACCOUNT_INJECTION_OPTION=keystore DEBUG=false STAKE=100000 CONSOLE_LOG=true ENABLE_GAS_FEE_WORKAROUND=true node client/index.js
ACCOUNT_INJECTION_OPTION=keystore DEBUG=false STAKE=100000 CONSOLE_LOG=true ENABLE_GAS_FEE_WORKAROUND=true node client/index.js
You can override default port numbering system by setting PORT
and P2P_PORT
environment variables.
Before starting node jobs, remove existing blockchain files and logs if necessary:
rm -rf /path/to/data/dir logs
The default blockchain data directory is ~/ain_blockchain_data (e.g. chain data will be at ~/ain_blockchain_data/chains). You can use a different directory by specifying the BLOCKCHAIN_DATA_DIR
environment variable.
The default minimum size of the validator whitelist is 3. Change MIN_NUM_VALIDATORS parameter in
the blockchain-configs/base/genesis.json to change this value. You may also need to modify the GENESIS_WHITELIST and GENESIS_VALIDATORS accordingly.
The genesis configs directory used is blockchain-configs/base
by default and it can be altered using BLOCKCHAIN_CONFIGS_DIR
env variable. For example, afan shard cluster can use the following command line:
BLOCKCHAIN_CONFIGS_DIR=blockchain-configs/afan-shard MIN_NUM_VALIDATORS=1 DEBUG=false STAKE=100000 CONSOLE_LOG=true ENABLE_GAS_FEE_WORKAROUND=true node client/index.js
gcloud init
# For genesis deploy
bash deploy_blockchain_genesis_gcp.sh [dev|staging|sandbox|exp|spring|summer|mainnet] <# of Shards> <Parent Node Index Begin> <Parent Node Index End> [--setup] [--keystore|--mnemonic|--private-key] [--keep-code|--no-keep-code] [--keep-data|--no-keep-data] [--full-sync|--fast-sync] [--chown-data|--no-chown-data] [--kill-only|--skip-kill]
# For incremental deploy
bash deploy_blockchain_incremental_gcp.sh [dev|staging|sandbox|exp|spring|summer|mainnet] <# of Shards> <Parent Node Index Begin> <Parent Node Index End> [--setup] [--keystore|--mnemonic|--private-key] [--keep-code|--no-keep-code] [--keep-data|--no-keep-data] [--full-sync|--fast-sync] [--chown-data|--no-chown-data]
bash setup_blockchain_ubuntu.sh
bash start_node_genesis_gcp.sh [dev|staging|sandbox|exp|spring|summer|mainnet] <GCP Username> <Shard Index> <Node Index> [--keystore|--mnemonic|--private-key] [--keep-code|--no-keep-code] [--keep-data|--no-keep-data] [--full-sync|--fast-sync] [--chown-data|--no-chown-data] [--json-rpc] [--update-front-db] [--rest-func] [--event-handler]
docker pull ainblockchain/ain-blockchain:latest
docker pull ainblockchain/ain-blockchain:<PACKAGE_VERSION>
docker build -t ain-blockchain .
docker run -e ACCOUNT_INJECTION_OPTION=private_key -e SYNC_MODE=peer -e STAKE=10000 -e SEASON=dev --network="host" -d ainblockchain/ain-blockchain:latest
docker run -e ACCOUNT_INJECTION_OPTION=keystore -e SYNC_MODE=peer -e STAKE=10000 -e SEASON=mainnet --network="host" -d ainblockchain/ain-blockchain:latest
You can use some environment variables, and these have the following options.
-e SEASON={mainnet|summer|spring|sandbox|staging|exp|dev}
-e ACCOUNT_INJECTION_OPTION={private_key|keystore|mnemonic}
-e SYNC_MODE={fast|full|peer}
-e STAKE=<YOUR_TARGET_STAKE>
-e HOSTING_ENV={local|comcom|gcp|aws}
You can mount a volume when you meet some wants.
-v <YOUR_VOLUME>:/home/ain_blockchain_data
After the node is executed, you should inject your account into the node.
node inject_node_account.js <NODE_ENDPOINT_URL> --private-key
node inject_node_account.js <NODE_ENDPOINT_URL> --keystore
node inject_node_account.js <NODE_ENDPOINT_URL> --mnemonic
If you want to inject your account automatically, add one of these environment variables before running the node.
-e ACCOUNT_INJECTION_OPTION=private_key -e PRIVATE_KEY=<YOUR_PRIVATE_KEY>
-e ACCOUNT_INJECTION_OPTION=keystore -e KEYSTORE_FILE_PATH="/home/ain_blockchain_data/<KEYSTORE>" -e PASSWORD=<YOUR_PASSWORD>
-e ACCOUNT_INJECTION_OPTION=mnemonic -e MNEMONIC="your mnemonic"
How to run unit test and integration test all around.
yarn run test_unit
yarn run test_integration
Some individual tests already definded in the package.json.
yarn run test_unit_block_pool
yarn run test_unit_blockchain
yarn run test_unit_common_util
yarn run test_unit_consensus
yarn run test_unit_db
yarn run test_unit_event_handler
yarn run test_unit_functions
yarn run test_unit_object_util
yarn run test_unit_p2p
yarn run test_unit_p2p_util
yarn run test_unit_radix_node
yarn run test_unit_radix_tree
yarn run test_unit_rule_util
yarn run test_unit_state_manager
yarn run test_unit_state_node
yarn run test_unit_state_util
yarn run test_unit_traffic_db
yarn run test_unit_traffic_sm
yarn run test_unit_tx
yarn run test_unit_tx_pool
yarn run test_integration_dapp
yarn run test_integration_blockchain
yarn run test_integration_consensus
yarn run test_integration_event_handler
yarn run test_integration_function
yarn run test_integration_node
yarn run test_integration_he_protocol
yarn run test_integration_he_sharding
yarn run test_integration_sharding
The load test is also supported.
yarn run loadtest
GET http://
GET http://
GET http://
GET http://
GET http://
GET http://
GET http://
GET http://
GET http://
GET http://
GET http://
GET http://
GET http://
GET http://
GET http://
POST http://
POST http://
POST http://
POST http://
POST http://
POST http://
POST http://
POST http://
POST http://
POST http://
POST http://
Four Node server with a Tracker server can be started all at once using start_local_blockchain.sh
like:
bash start_local_blockchain.sh
and can be stopped all at once using stop_local_blockchain.sh
like:
bash stop_local_blockchain.sh
Please check the latest versions below:
Please read the CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
This project is licensed under the MIT License - see the LICENSE file for details.