# Getting Started

bw is a command-line application, so you'll first need the files to run it. We have not released the tool openly at this point.

If you'd like access to the tool, contact us on Telegram.

# Basic Usage

To see a list of global options and commands, you can run:

./bw

# Running a command

To run a command, simply give the name of the command as the first argument. For example, to use the private-key command run:

./bw private-key

# Walkthrough

This walkthrough will go over a few basic commands to get you started with bw. You should start by opening your terminal and connecting to the bw Server.

There is also a video walkthrough available.

# Reading token information

Let's start with something simple: reading some token information from the blockchain using the contract-call command.

Run the following command:

./bw contract-call name

The output will look something like this:

info: Network: Rinkeby
Food Coin

The first line begins with info:, which means it's just an informative log message. It's telling you the network bw is currently configured to use.

The second line is the actual output of the command, which in this case was Food Coin. That's the name of the token.

With that, we've read the name of the token from the blockchain!

TIP

The exact output you see may be slightly different, since it depends on bw's current configuration.

If you're seeing Network: Mainnet instead of Rinkeby and want to follow this walkthrough, you should edit the config.yaml file in the same directory and change the second line to read:

network: rinkeby

instead of mainnet.

We can read other information as well. All ERC20 tokens should have a symbol as well. We can read that the same way:

./bw contract-call symbol

The output is similar to before:

info: Network: Rinkeby
FC

This time, it's giving us FC, which is the symbol of the Food Coin token.

# Reading token balances

We've read basic info on the token using contract-call. Those are simple and easy, because there's only one "name" in a contract.

We'd also like to read token balances for wallets, which can be done using the balanceOf function in ERC20 tokens. However, we need to tell the command which wallet's balance we want to know.

This can be provided by giving additional arguments to contract-call. In this case, I want to know the balance of the wallet 0x96cfe56665be4e5819416b352c4c86c525a7cf7d. I can do that by simply adding the address as an additional argument:

./bw contract-call balanceOf 0x96cfe56665be4e5819416b352c4c86c525a7cf7d

Here's the output from this command:

info: Network: Rinkeby
7000000000000000000

Okay, we have the balance, but there's an awful lot of zeroes. That's because Ethereum doesn't support decimals, so instead it's just a really big number. To get the value with decimals, you divide it:

bw has a utility to do this for you as well:

./bw from-wei 7000000000000000000

Output:

7

Note that this time it didn't show the info: Network line. That's because the from-wei conversion doesn't require connecting to Ethereum.

WARNING

The above assumes the token you're working with has 18 decimals. If it has a different number of decimals, you can specify that with the from-wei command. For example, with 6 decimals:

./bw from-wei 7000000 -d 6

Because reading token balances is such a common need, bw has a simpler command that does the decimal conversion for you:

./bw balance 0x96cfe56665be4e5819416b352c4c86c525a7cf7d

Here's the output:

info: Network: Rinkeby
7

# Changing contracts

So far we've been using the default contract already configured in bw, but chances are you'll want to look at a different contract.

You can set the default contract bw uses by editing the config.yaml file and changing the value of contract_address:

# Address of the contract. This must be in quotes, otherwise it's interpreted 
# as a hex number
contract_address: "0xe8340FdfE79851e9E117b3033E147a654dbDb0Ae"

0xe8340FdfE79851e9E117b3033E147a654dbDb0Ae is the address for Food Coin. You can change it to any contract address you want.

Instead of editing config.yaml, you can also use a different contract address with the --address option. For example:

./bw --address 0xE595564689D6E0206b095915C219a8c7a130cF7B contract-call name

Output:

info: Network: Rinkeby
Rinkeby Roar

We're reading the name of the contract like in the beginning of this walkthrough, but this time the contract address is for Blockwell Roar on Rinkeby.

# Changing networks

Sooner or later you'll probably also want to look at different Ethereum networks. So far we've been looking at Rinkeby, let's switch over to the Main Ethereum Network.

Like with the contract address, you can change the network by either editing config.yaml:

# Name of the network to connect to. You can configure the specific nodes to use below.
network: rinkeby

If you change rinkeby to mainnet and save the file, bw will use the Main Network.

Alternatively, you can use the -n option and specify a network. Try running this command:

./bw --address 0xB8c77482e45F1F44dE1745F52C74426C631bDD52 -n mainnet \
    contract-call name

You should see the following output:

info: Network: Mainnet
BNB

With that command we asked it to use the Main Network with -n mainnet, and gave it the Binance token's contract address with --address 0xB8c77482e45F1F44dE1745F52C74426C631bDD52. "BNB" is what the Binance token has for a name.

TIP

You may have noticed that the command above is split into two lines, and has a \ at the end of it.

Using \ is a way in terminal to split your command on to multiple lines so it's easier to read. For example, these two commands are identical:

./bw contract-call name
./bw \
    contract-call \
    name

Every time you want to use multiple lines for easier reading, just put in \ before you hit enter.

# Get all balances for a token

As the last part of this walkthrough, let's get a list of all wallets for a token and their balances. Run the following command:

./eth-tool -n rinkeby token-balances 0xe8340FdfE79851e9E117b3033E147a654dbDb0Ae

This will get all balances for Food Coin on Rinkeby. The output will start like this:

info: Network: Rinkeby
address,balance
0x8f5dfA044fB51a4F392689F0f67AB19FBB869BE4,99990298.9
0xfD8894e1E78Bbe44fF49Fd5c5996177bB6EC6305,87
0xdb6B13013A0Ba6e724c3f81537670959F97BC9C1,154.00048
0xCF1f8E012E55044472FCb98367C3cF8574AdE8Dc,100
...lots more

That output may look confusing at first, but it's actually just CSV data that you can open as a spreadsheet in Excel or Google Sheets.

We'll want it in a file rather than the terminal though. Fortunately there's a handy terminal trick for that:

./eth-tool -n rinkeby --plain \ 
    token-balances 0xe8340FdfE79851e9E117b3033E147a654dbDb0Ae > foodcoin.csv

There are two changes from the previous command. First, we added --plain, which tells bw to not output any info, because that would interfere with the spreadsheet.

Secondly, the end has > foodcoin.csv. This is a standard method to tell your terminal that instead of showing the output, you want it to go into a file called foodcoin.csv.

After running that command, you should see the file in your current directory.

TIP

You'll probably want the csv file on your computer to load it into a spreadsheet, so here's how you can get it from the bw Server.

You can use a tool called scp that comes installed on most computers. Open another terminal on your own computer without connecting to the bw Server, and run the following command. Note! change "username" to what your actual username for bw.blockwell.ai is.

scp username@bw.blockwell.ai:~/bw/foodcoin.csv .

That may be a lot to unpack, but we're telling the tool we want to copy a file from the server bw.blockwell.ai. The file's location is ~/bw/foodcoin.csv. The last . just means we want to copy it to our current directory.