OpenZeppelin has some neat docs to show how to create, deploy and interact with smart contracts centered around installing node, using the OpenZeppelin libraries, compiling via CLI, and deploying via Ganache which is a local blockchain environment for development and testing.
Some of you may remember TestRPC. Ganache is the new name of TestRPC.
The TestRPC quickly became more powerful than simply a blockchain environment used for testing. To stay with the sweet Truffle brand, we decided to rename it Ganache, as Ganache is (often) the core of your favorite chocolate truffle. It’s a much catchier name (and a much tastier one too).
https://www.trufflesuite.com/blog/testrpc-is-now-ganache
The problem though is when you follow the docs at https://docs.openzeppelin.com/learn/deploying-and-interacting and run:
npx ganache-cli --deterministic
to get a list of all the available accounts, you might encounter this error:
Ganache CLI v6.9.1 (ganache-core: 2.10.2)
Error: Callback was already called.
The problem is because you probably have node v14 installed. Run:
node -v
to check. For me, I installed node initially with the brew command
brew install node
which downloaded the latest version which was v14.5.0
The reason is an issue related to ganache-core’s internals not yet being Node v14 compatible. https://github.com/trufflesuite/ganache-cli/issues/732
Workaround
Install Node v12 for the time being. First run
brew search node
What this does is lists all available formula (aka packages) and the online equivalent is http://searchbrew.com/. You should see node, node@12, node@10 in the results.
Install node v12
brew install node@12
You should then get a green tick beside node and node@12. If you run node -v again you will still get the new version because you have to run 2 more commands.
brew unlink node
brew link node@12
You might get some errors here asking you to use the –overwrite flag to overwrite all the conflicting files (/usr/local/bin/npm already existing for instance) and also to add the –force flag because node@12 is keg-only.
Keg only means that node will only be installed at /usr/local/Cellar but not linked into places like /usr/local/bin, /usr/local/lib, etc. That means other software that depends on it has to be compiled with specific instructions to use the files in /usr/local/Cellar.
brew link --overwrite node@12 --force
Then check the version again with node -v and it should be at 12.x. Now if you run
npx ganache-cli --deterministic
You should get
Ganache CLI v6.9.1 (ganache-core: 2.10.2)
Available Accounts
==================
(0) 0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1 (100 ETH)
(1) 0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0 (100 ETH)
(2) 0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b (100 ETH)
(3) 0xE11BA2b4D45Eaed5996Cd0823791E0C93114882d (100 ETH)
(4) 0xd03ea8624C8C5987235048901fB614fDcA89b117 (100 ETH)
(5) 0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC (100 ETH)
(6) 0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9 (100 ETH)
(7) 0x28a8746e75304c0780E011BEd21C72cD78cd535E (100 ETH)
(8) 0xACa94ef8bD5ffEE41947b4585a84BdA5a3d3DA6E (100 ETH)
(9) 0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e (100 ETH)
Private Keys
==================
(0) 0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d
(1) 0x6cbed15c793ce57650b9877cf6fa156fbef513c4e6134f022a85b1ffdd59b2a1
(2) 0x6370fd033278c143179d81c5526140625662b8daa446c22ee2d73db3707e620c
(3) 0x646f1ce2fdad0e6deeeb5c7e8e5543bdde65e86029e2fd9fc169899c440a7913
(4) 0xadd53f9a7e588d003326d1cbf9e4a43c061aadd9bc938c843a79e7b4fd2ad743
(5) 0x395df67f0c2d2d9fe1ad08d1bc8b6627011959b79c53d7dd6a3536a33ab8a4fd
(6) 0xe485d098507f54e7733a205420dfddbe58db035fa577fc294ebd14db90767a52
(7) 0xa453611d9419d0e56f499079478fd72c37b251a94bfde4d19872c44cf65386e3
(8) 0x829e924fdf021ba3dbbc4225edfece9aca04b929d6e75613329ca6f1d31c0bb4
(9) 0xb0057716d5917badaf911b193b12b910811c1497b5bada8d7711f758981c3773
HD Wallet
==================
Mnemonic: myth like bonus scare over problem client lizard pioneer submit female collect
Base HD Path: m/44'/60'/0'/0/{account_index}
Gas Price
==================
20000000000
Gas Limit
==================
6721975
Call Gas Limit
==================
9007199254740991
Listening on 127.0.0.1:8545