The TestRPC
To study and develop applications for Ethereum, you need access to the Ethereum Virtual Machine (EVM). Ideally, you would run a full Ethereum node on the blockchain and communicate with the blockchain network through that node. However, a full Ethereum node is expensive. For developers, it is much easier to get started with the TestRPC. I will discuss how to run Ethereum full nodes later in this chapter.
For developer testing of Ethereum application programming interface (API) functions and smart contract programming, you can use a simulator that simply answers all Ethereum API calls but does not incur the cost of actually building a blockchain network. The TestRPC is just such a simulator. The TestRPC was originally developed as a volunteer open source project. It was later acquired by the company behind the open source Truffle framework for smart contract development (renamed to Ganache CLI; see https://github.com/trufflesuite/ganache-cli).
You should first make sure that node.js and its package manager npm, are installed on your machine. You can install them from https://www.npmjs.com/get-npm. On most Linux distributions, you can use the system package manager to install them as well. For example, the following command installs node.js and npm on a CentOS/RedHat/Fedora Linux system:
$ sudo yum install epel-release $ sudo yum install nodejs npm
Next, let’s install the Ganache CLI using the npm package manager.
$ sudo npm install -g ganache-cli
You can start the TestRPC server from the command line. It will randomly create ten accounts (pairs of public key addresses and private keys). All the accounts are unlocked by default for easy testing.
$ ganache-cli Ganache CLI v6.0.3 (ganache-core: 2.0.2) Available Accounts ================== (0) 0xbaea21140ce33f0fa7046692f61a4238eaa407e3 (1) 0x944205dcdaeeb097870925ea26e159f6b6dab4c1 (2) 0x1f62a96f38d5247815dd4ed2d18ed9e228c06d40 (3) 0x6235ca5d31c476b649b8517ce24f428db34e8446 (4) 0xa13feaf894f1ae33e321c78c396a3eaf2048a621 (5) 0xee3a90f6403853b57a7a325cccee0e6120cb39f2 (6) 0x889dd868cc580080e1e809fd38ca1b5ff2aef017 (7) 0xb0e664c4732d7c065b4f20e461cfc89ce5598119 (8) 0x3c183932b2d9c0aedb611cc89c210ab71e7d3f4c (9) 0xf3deac45c47e48620571108b9a9320aacd7518fe Private Keys ================== (0) 75af4be053b6da9b6ae6af0dd137de406bb6405779be056ffa5861873346a54f (1) 112ff21d135f28273c3185c6d519f3c4f38907418448ac875443206eed25eb39 (2) 28b5b6d6d04d38be899f69bb9ce6335d75b30daaea4476c9f16e75cb638076b9 (3) 122a12f40411b5fd66c354493d3ec9e83d66f14071e47bdfc9a0b747d1040344 (4) 6e062a75413f9632d33f1520e0b4246e05edde517caf4b1657c6d652d324dc06 (5) 71212db8910dabd3d5399470bb8ea37a29ffdb2402a2b03d9144d7bea6a5cfda (6) 301283f708770350180a2b00e5f8092f43238d23fd2249397f5a185d5a9ecc1f (7) 7cfc7dba9c475fc7f394507ea1e9fd3d8604b288a058477b684f9a58a9176f33 (8) 14f259263d41a1e5986c588f4ae9bc93b6e56c4734ed7046394a7b1d37aba094 (9) 4aceb1f8a42c36a50402d0e679d0666a61bb4786ef7196c98b5cd3e0f6992b5b HD Wallet ================== Mnemonic: foot silly tag melt require tuition soon become frequent tell forest satisfy Base HD Path: m/44'/60'/0'/0/{account_index} Listening on localhost:8545
You can start the TestRPC node with the same set of accounts every time, and you can give each account an initial balance as well.
$ ganache-cli --account="0x99cf2f6...,1234000000000000000000" --account="0xa295df7...,314159000000000000000000" Ganache CLI v6.0.3 (ganache-core: 2.0.2) Available Accounts ================== (0) 0xd61a8f9afaaa3f12e75781c3a1e271c2744442ba (1) 0x9f37a44226a4c65336ceacbd608ea248fca5453c Private Keys ================== (0) 99cf2f6a09d3ba6491e838ac62edcd1b8df5507056a89c87e495948a2211c9c4 (1) a295df779395bb57b38765a592374d56d0d4a259d54fb8f5cfad2f35b90ae8cd Listening on localhost:8545
The TestRPC is a fully featured Ethereum simulator. It is much faster than any live Ethereum node because it does not perform the actual work of creating, mining, and synchronizing blocks. That makes it ideally suited for fast turnaround development cycles.