sbt-ethereum — A Tool for Interacting with the Ethereum Blockchain via Command Line
simple, elegant way to develop/deploy smart contracts & more!
Today, we are going to talk about an awesome Ethereum development tool, which will change your life as an Ethereum developer forever 😎
sbt is an open-source build tool for Scala and Java projects, similar to Java’s Maven and Ant.
sbt-ethereum is an awesome tool for developers and hobbyists to start with Ethereum development in minutes.
sbt-ethereum aims for the following goals:
- An interactive text-based platform with which “hobbyists” — people who are not programmers, but who are willing to devote a bit of time to learning — can interact with Ethereum (and other compatible blockchains), and do so with a great deal of power and sophistication.
- A publication tool for Ethereum smart contact applications, as
sbt-ethereum
repositories strive to be portable, and to both permit deployment of new smart contract instances and convenient interaction with already-deployed smart contracts. - For those who are (or wish to become!) programmers, a rich development environment for Ethereum smart contracts
- An integration tool, which facilitates the development of high-performance Scala libraries and applications that interact with Ethereum smart contracts
If you are a beginner dev, the main friction comes while setting up the new project/tech. sbt
reduces friction and teaches you how to work with the Ethereum blockchain using the command line interface (CLI).
Command line? Isn’t it difficult?
No, sbt
keeps things basic and manages a lot of things behind the scenes to maintain simplicity.
What does sbt-ethereum provide?
- Wallet functionality
- Smart contract development functionality
- Ethereum blockchain interactions
- ENS support
- Etherscan integration
Yes! All of above through command line. Now let's see sbt-ethereum
in action.
Installation
We’ll be using Ubuntu (if you are using Windows, follow these instructions).
Clone this GitHub repo:
git clone https://github.com/swaldman/eth-command-line.git --branch 0.1.10
Now, go inside the directory:
$ cd eth-command-line
If you do ls
, you can see the below files:
$ ls
LICENSE README.md build.sbt project sbtw
Here, sbtw
is a wrapper script which will install sbt
.
$ ./sbtw
As sbt-ethereum is an interactive tool, during installation it will ask a few questions to set up your wallet. You can set a wallet later too, but for now, you will see questions like 👇
There are no wallets in the sbt-ethereum keystore. Would you like to generate one? [y/n] yWould you like the new address '0x1144f4f7aad0c463c667e0f8d73fc13f1e7e86a2' to be the default sender on chain with ID 1? [y/n] y
Running commands in sbt-ethereum
sbt-ethereum strives for simplicity and provides easy-to-read commands. For example, it uses ethAddressAlias
rather than something like etaa, eta. This makes commands bigger and difficult to type, that's why sbt
supports rich tab completions. You can check the full list of sbt commands here.
Taking Backups
Your wallets and address aliases, as well as other information such as your transaction history, smart contract compilations, and ABIs of contracts you interact with, are stored in the sbt-ethereum “shoebox”, which you will want to get into the habit of backing up. So, using the command ethShoeboxBackup
(which takes no arguments).
The command is interactive. It will ask us for a directory in which we would like to store backups (which will be retained — in the shoebox! — for optional future reuse). Provide a directory appropriate to your system. You may want to back up to a thumb drive or external disk, so if something happens to your computer’s hard disk, you have a copy elsewhere.
We can restore our shoebox, if something bad happens, from the generated file using ethShoeboxRestore
.
Connect your QuikNode to sbt-ethereum
We can connect our Ethereum node to sbt-ethereum (sbt may have a default ETH node you can use for testing, however their documentation recommends using a personal node for reliability and performance).
Signup for QuikNode, if you want the fastest and best experience for interacting with an Ethereum node.
Remember you can use TAB
to complete your commands. Let’s connect to our Ethereum node (I masked my QuikNode Web3 URL, you can get yours here.)
sbt:eth-command-line> ethNodeUrlDefaultSet https://xxxx-xxxx-xxxx.quiknode.io/uuid/token/
To check the current node URL, let’s run command to check the latest block number:
sbt:eth-command-line> ethNodeBlockNumberPrint
You can override or change your default Node configuration whenever you like.
For that, sbt
provides the following commands:
ethNodeBlockNumberPrint ethNodeChainId ethNodeChainIdDefaultDrop ethNodeChainIdDefaultPrint ethNodeChainIdDefaultSet
ethNodeChainIdOverride ethNodeChainIdOverrideDrop ethNodeChainIdOverridePrint ethNodeChainIdOverrideSet ethNodeChainIdPrint
ethNodeUrl ethNodeUrlDefaultDrop ethNodeUrlDefaultPrint ethNodeUrlDefaultSet ethNodeUrlOverride
ethNodeUrlOverrideDrop ethNodeUrlOverridePrint ethNodeUrlOverrideSet ethNodeUrlPrint
Using Alias
Everyone knows that working with addresses can be problematic. We, humans, are not designed for working with hexadecimal values (machines are) — so remembering them or even just matching them correctly can be difficult. That's why sbt
uses aliases for addresses. It already added an alias for your default address: to check it, run the command below:
sbt:eth-command-line> ethAddressAliasList
You will see a “default-sender” in front of your address. To add a new alias for an address or an existing alias, just use this command:
ethAddressAliasSet new-name default-sender
To check an alias, you can run ethAddressAliasList
again.
Wallet commands
To manage wallets, addresses, and keys, let's check some commands provided by sbt
.
Create a new wallet
ethKeystoreWalletV3Create
This command creates a new eth-rpc “v3” JSON wallet representing an Ethereum address and a passcode-encrypted private key in sbt-ethereum’s “shoebox” keystore.
ethKeystoreList
command displays the Ethereum addresses in sbt-ethereum’s “shoebox” keystore, and any aliases associated with those addresses.
To check the private key for your wallet, use the command below:
ethKeystorePrivateKeyReveal <hex address> or <alias-name>
Import wallet
There are multiple ways to import a wallet to sbt
. Let’s see them one by one:
- Using private keys — you can import a wallet to
sbt
using private keys
ethKeystoreWalletV3FromPrivateKeyImport
2. Using eth-rpc v3 JSON
> ethKeystoreWalletV3FromJsonImportV3 Wallet JSON: {"address":"d78fe1d978ad8cc5a94484725d059bec694f215e","crypto":{"mac":"98c53c7d05c7daeb1b8d2bef6af8643bf679a73a34d014f09a45f7035088f89b","kdf":"pbkdf2","cipherparams":{"iv":"70c4340f5305dca3fad9e54d47db4a2b"},"ciphertext":"9a2fc0212827877068d5a54f0ad64fab8767d52849535305e984682db25be23d","cipher":"aes-128-ctr","kdfparams":{"salt":"b9562670465f5ec13a4babe91aea6bd41d3400dfb0f97b1fb21617cbd62e9782","dklen":32,"c":262144,"prf":"hmac-sha256"}},"id":"f2f3bad7-4da0-424b-a363-fde7a6e3cb49","version":3}
[info] Imported JSON wallet for address '0xd78fe1d978ad8cc5a94484725d059bec694f215e', but have not validated it.
[info] Consider validating the JSON using 'ethKeystoreWalletV3Validate 0xd78fe1d978ad8cc5a94484725d059bec694f215e'.
[success] Total time: 3 s, completed Mar 16, 2019 12:35:14 AM
Always validate your wallet after importing! To validate the wallet use the command below:
ethKeystoreWalletV3Validate <address-hex> or <alias-name>
To print the wallet JSON (v3), run the command below:
ethKeystoreWalletV3Print <address-hex> or <alias-name>
Conclusion
sbt
provides rich functionality and we will dig deeper into it in future articles. We can create smart contracts and also ENS names using sbt
command line tool. In the next article, we will create, deploy and read a smart contact using sbt-ethereum
.
further reading:
About QuikNode
QuikNode is building infrastructure to support the future of Web3. Since 2017, we’ve worked with hundreds of developers & companies, helping scale dApps and providing high-performance Ethereum nodes. We’re working on something interesting from the past few months and will be launching soon, so subscribe our newsletter for more updates!! 😃