Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

License GitHub stars


🔥🔥🔥 Run Neo N3 blockchain nodes for development in record time! 🔥🔥🔥

You're 3 commands away to set up a Neo N3 blockchain private network.

🎉 Highlights

  • 💚 This repository relies on git sub-modules pointing to the official neo-node and neo-modules. Then, you can adjust the reference if you want to rely on the latest or an specific commit!
  • 🚀 The neo-cli image is built from the official Dockerfile from neo-node.
  • 💯 Includes all available plugins from neo-modules
  • 💥 It just fucking works.

Ah, we love GitHub stars to keep our motivation up to the roof! 😉

🚨 Dependencies

🏃 How to Run

git clone --recurse-submodules
cd neo3-privatenet-docker
docker-compose up

Then, check the running privatenet:

docker ps

If you want to stop everything and start from scratch:

docker-compose down -v

After you change something in the config files and want to rebuild everything, without docker cache, run the following:

docker-compose build --no-cache

Test a bit through JSON-RPC

  • Get the latest block index of neo-client1:
curl -d '{"jsonrpc":"2.0","method":"getblockcount","params":[],"id":1}'
  • Open the wallet of the neo-consesus through JSON-RPC (only for test purposes!):
curl -d '{"jsonrpc":"2.0","method":"openwallet","params":["wallet.json","neo"],"id":1}'
  • List the addresses in neo-consensus wallet:
curl -d '{"jsonrpc":"2.0","method":"listaddress","params":[],"id":1}'
  • Get all NEP-17 balance of neo-consensus' address NKvR5WeczCQMcVWQD9aaMqegfEoCBXGWpW, specifically:
curl -d '{"jsonrpc":"2.0","method":"getnep17balances","params":["NKvR5WeczCQMcVWQD9aaMqegfEoCBXGWpW"],"id":1}'
  • Send 100 NEO from neo-consensus' address NKvR5WeczCQMcVWQD9aaMqegfEoCBXGWpW to neo-client1's address NdihqSLYTf1B1WYuzhM52MNqvCNPJKLZaz:
curl -d '{"jsonrpc":"2.0","method":"sendfrom","params":["0xef4073a0f2b305a38ec4050e4d3d28bc40ea63f5","NKvR5WeczCQMcVWQD9aaMqegfEoCBXGWpW", "NdihqSLYTf1B1WYuzhM52MNqvCNPJKLZaz",100],"id":1}'
  • Open the wallet of the neo-client1 through JSON-RPC (only for test purposes!):
curl -d '{"jsonrpc":"2.0","method":"openwallet","params":["wallet.json","neo"],"id":1}'
  • Get all NEP-17 balance of neo-client1' address NdihqSLYTf1B1WYuzhM52MNqvCNPJKLZaz (wait 15 seconds before executing the command, due to the block generation interval):
curl -d '{"jsonrpc":"2.0","method":"getnep17balances","params":["NdihqSLYTf1B1WYuzhM52MNqvCNPJKLZaz"],"id":1}'

💡 Info

The docker-compose file has 3 nodes, each with an account. The consensus node uses one public key for two accounts. One is a multisig account and the other a normal account. The multisig account is required as the validator account. Private keys are encrypted according to NEP-2.

  • Consensus

    • Address: NM7Aky765FG8NhhwtxjXRx7jEL1cnw7PBP
      • ScriptHash: 69ecca587293047be4c59159bf8bc399985c160d
      • Script: 0c21033a4d051b04b7fc0230d2b1aaedfd5a84be279a5361a7358db665ad7857787f1b4156e7b327
      • PubKey: 033a4d051b04b7fc0230d2b1aaedfd5a84be279a5361a7358db665ad7857787f1b
      • PrivKey: 84180ac9d6eb6fba207ea4ef9d2200102d1ebeb4b9c07e2c6a738a42742e27a5
      • NEP-2 encrypted: 6PYM7jHL4GmS8Aw2iEFpuaHTCUKjhT4mwVqdoozGU6sUE25BjV4ePXDdLz
      • WIF: L1eV34wPoj9weqhGijdDLtVQzUpWGHszXXpdU9dPuh2nRFFzFa7E
    • MultiSig Address (from the account above, 1/1): NXXazKH39yNFWWZF5MJ8tEN98VYHwzn7g3
      • Script: 110c21033a4d051b04b7fc0230d2b1aaedfd5a84be279a5361a7358db665ad7857787f1b11419ed0dc3a
      • ScritpHash: 05859de95ccbbd5668e0f055b208273634d4657f
    • JSON-RPC: localhost:40332
  • Client1

    • Address: NV1Q1dTdvzPbThPbSFz7zudTmsmgnCwX6c
      • Script: 0c2102607a38b8010a8f401c25dd01df1b74af1827dd16b821fc07451f2ef7f02da60f4156e7b327
      • ScripthHash: 88c48eaef7e64b646440da567cd85c9060efbf63
      • PubKey: 02607a38b8010a8f401c25dd01df1b74af1827dd16b821fc07451f2ef7f02da60f
      • PrivKey: beae38739915555a75a9281a5928b10ebc265f9c881aa21e963610a6c606a3dc
      • NEP-2 encrypted: 6PYWaAbWpf6oeH1VrqtdAGawYMsTfcN1GJyarhUFVEq1siNcRJwMpoo456
      • WIF: L3cNMQUSrvUrHx1MzacwHiUeCWzqK2MLt5fPvJj9mz6L2rzYZpok
    • JSON-RPC: localhost:10332
  • Client2

    • Address: NhJX9eCbkKtgDrh1S4xMTRaHUGbZ5Be7uU
      • Script: 0c21037279f3a507817251534181116cb38ef30468b25074827db34cbbc6adc88739324156e7b327
      • ScriptHash: b435bf4b8e34b28a73029eb42d0d99a775799eea
      • PubKey: 037279f3a507817251534181116cb38ef30468b25074827db34cbbc6adc8873932
      • PrivKey: 7d82c818dcc23f9312527b36c4959e5976f5df7a3dec7e1bbb24a45d64d131c1
      • NEP-2 encrypted: 6PYNfKunYGT5sMMqmpkQLB3KRrgvdE2vTEhpXsjQBLFh9cTbRkWkTkz9Q1
      • WIF: L1RgqMJEBjdXcuYCMYB6m7viQ9zjkNPjZPAKhhBoXxEsygNXENBb
    • JSON-RPC: localhost:20332
  • Wallet passphrase: neo

  • List of native contract's addresses/hashes:

    • ContractManagement: 0xfffdc93764dbaddd97c48f252a53ea4643faa3fd
    • StdLib: 0xacce6fd80d44e1796aa0c2c625e9e4e0ce39efc0
    • CryptoLib: 0x726cb6e0cd8628a1350a611384688911ab75f51b
    • LedgerContract: 0xda65b600f7124ce6c79950c1772a36403104f2be
    • NeoToken: 0xef4073a0f2b305a38ec4050e4d3d28bc40ea63f5
    • GasToken: 0xd2a4cff31913016155e38e474a2c06d08be276cf
    • PolicyContract: 0xcc5e4edd9f5f8dba8bb65734541df7a1c081c67b
    • RoleManagement: 0x49cf4e5378ffcd4dec034fd98a174c5491e395e2
    • OracleContract: 0xfe924b7cfe89ddd271abaf7210a80a7e11178758
  • Address Info:

🔜 Upcoming Features

  • Pre-fund wallets of neo-client1 and neo-client2 with plenty of NEO and GAS
  • Automatically deploy smart contracts specified in a given local directory

If you would like to see anything else, give us a shout and open an issue.

🙏 Thanks


Docker images for running a Neo N3 private network, in record time!