Interblockchain Transaction using Starport
===
### Set up Starport
`git clone https://github.com/tendermint/starport && cd starport && make`
Then move Starport binaries to $PATH or add the binary directory to environment variable. Make sure the $GOPATH is correctly set. Most problems are solved with a fresh install or checking if the variables are set right. Also ensure your Golang is at the most updated stable version. Currently I used Go1.15.8 with Starport v0.13.2-52-g7f8bd92.
Adding the following to `.bashrc` solved most problems I had.
```
export GO_PATH=~/go
export PATH=$PATH:/$GO_PATH/bin
export PATH=$PATH:$(go env GOPATH)/bin
```
### Install Relayer
Relayer is a package used to relay packets between IBC compatible chains. You might have to build it locally for Stargate update. Please make sure you relayer versions match with Starport's requirements.
`git clone https://github.com/cosmos/relayer && make install`
### (Optional) Use the Web IDE with preinstalled binaries
If you're building a Proof-of-Concept, you might want to use the [Gitpod Environment](https://gitpod.io/#https://github.com/tendermint/starport/). Starport and Relayer come installed in this environment.
### Initiate two Stargate versioned chains
```bash
starport app github.com/bar/bar --sdk-version stargate
cd bar
starport serve
```
You should see a `🌠relayer info` in the terminal output for foo. Copy this somewhere, we will be needing it to link foo and bar. For me, it was `eyJDaGFpbklEIjoiYmFyIiwiTW5lbW9uaWMiOiJyZXNwb25zZSBub21pbmVlIGVtZXJnZSB0YW5rIGNodXJuIGhvdmVyIGJhdHRsZSBhbmtsZSBjaGlja2VuIHRvbmlnaHQgYnVzeSBtZWRhbCBlY2hvIGVsYm93IG1lYXN1cmUgZGlzY292ZXIgc3dhcCByYXpvciBkdW1iIHN3YXAgc2VsZWN0IGJ1ZGR5IHdpbnRlciBob3Jyb3IiLCJSUENBZGRyZXNzIjoiaHR0cHM6Ly8yNjY1Ny1wbHVtLWJhdC01YmxzbGFzOS53cy11czAzLmdpdHBvZC5pbzo0NDMifQ`
In another directory and terminal tab, run
```bash
starport app github.com/foo/foo --sdk-version stargate
cd foo
starport serve
```
### Add the Chains together
Once you have the two chains running, open two more terminal windows.
Now do the following.
```
cd foo
starport chain add eyJDaGFpbklEIjoiYmFyIiwiTW5lbW9uaWMiOiJyZXNwb25zZSBub21pbmVlIGVtZXJnZSB0YW5rIGNodXJuIGhvdmVyIGJhdHRsZSBhbmtsZSBjaGlja2VuIHRvbmlnaHQgYnVzeSBtZWRhbCBlY2hvIGVsYm93IG1lYXN1cmUgZGlzY292ZXIgc3dhcCByYXpvciBkdW1iIHN3YXAgc2VsZWN0IGJ1ZGR5IHdpbnRlciBob3Jyb3IiLCJSUENBZGRyZXNzIjoiaHR0cHM6Ly8yNjY1Ny1wbHVtLWJhdC01YmxzbGFzOS53cy11czAzLmdpdHBvZC5pbzo0NDMifQ
```
Replace the string with the string on your screen.
### Transact from Foo to Bar
First we need the address of the chain Foo and use that to check the balance of tokens on the Chain.
```
cd foo
food q bank balances $(rly chains address foo)
```
We get something like this
```
balances:
- amount: "800"
denom: token
pagination:
next_key: null
total: "0"
```
We have about 800 of the token, we can play around with this in `secret.yml`.
With that in mind, let's commit an interblockchain transaction!
```
rly tx transfer foo bar 2tokens $(rly chains address bar)
rly tx relay foo-bar
```
### Check that the transaction has been committed
```
bard q bank balances $(bard keys show bar -a --keyring-backend test)
```
When we check the balances, we can see that we have 2 tokens of the denom `ibc/F45CC9774FF2C21CD8F2C6DC850D05E45B5B83325C93388233AFC2446F96F16A` and 800 of the denom `token`.