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

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] y

Would 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:

  1. Using private keys — you can import a wallet to sbt using private keys
ethKeystoreWalletV3FromPrivateKeyImport

2. Using eth-rpc v3 JSON

> ethKeystoreWalletV3FromJsonImport

V3 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:

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!! 😃