Deep Dive into Soroban-CLI : soroban serve & soroban events
Tags: soroban, sorobanathon, stellar, smartcontract
Published: 2023-03-20 08:26:53

Hi there! This is the third post of the "Deep Dive into Soroban-CLI" series where we'll explore the soroban-cli in depth. Soroban-CLI is a command-line tool for interacting with soroban smart contracts on the Stellar network. Soroban-CLI provides a set of subcommands that can be used to perform various tasks related to smart contract development and deployment on the Stellar network.

In this post i will explaining `soroban serve` and `soroban events` subcommands.

## `soroban serve` Subcommand
The `soroban serve` subcommand is used to launches a local development server for soroban web app.It's useful for a few reasons:

- Rapid testing - You can quickly test changes to your app's intents, dialogs, etc. by refreshing the browser
- Local work - No need to deploy your app to a staging/production server every time you make a change
- Live reload - The server will automatically reload when you make changes to your app's code, so you see updates immediately

Usage:

```
soroban serve
```
It will use port 8000, makes sure no service running on port 8000.

## `soroban events` Subcommand
The `soroban events` subcommand is used to watches for events on a blockchain from a deployed soroban smart contract. It allows you to:

- See your soroban smart contract events on the blockchain.
- Get details about each event like the event name, parameters, and contract hash, ledger.

This is useful for:

- Monitoring your smart contracts activity and usage
- Checking for errors or issues with your smart contracts
- Debugging by watching for specific events

Usage:

```
soroban events --rpc-url <RPC_URL> --start-ledger <START_LEDGER> --cursor <CURSOR>
```
Usage Example :
Before we can use the `soroban events` command to check events on the network i will demonstrating soroban events contract example from [soroban-example github repo](https://github.com/stellar/soroban-examples/tree/main/events). Build that contract using this command :

```
cargo build --target wasm32-unknown-unknown --release
```
Then deploy that contract to Futurenet using this command :

```
$ soroban contract deploy --wasm /workspace/soroban-quest/soroban-examples/target/wasm32-unknown-unknown/release/soroban_events_contract.wasm --rpc-url https://rpc-futurenet.stellar.org:443

success
success
dc1d42101e4daa1f70bc7d79610c59e1e5df17b45aeec3a94904b352bcb39083
```
Invoke the deployed contract using this command :

```
$ soroban contract invoke \
> --rpc-url https://rpc-futurenet.stellar.org:443/ \
>     --id dc1d42101e4daa1f70bc7d79610c59e1e5df17b45aeec3a94904b352bcb39083 \
>     --fn increment 
success
1
```
Last we will see events created by that contract using this command :

```
$ soroban events --rpc-url https://rpc-futurenet.stellar.org:443/ --start-ger 518086
Event 0002225291275538432-0000000000 [CONTRACT]:
  Ledger:   518116 (closed at 2023-03-20T08:11:12Z)
  Contract: 0xdc1d42101e4daa1f70bc7d79610c59e1e5df17b45aeec3a94904b352bcb39083
  Topics:
            Symbol(StringM(COUNTER))
            Symbol(StringM(increment))
  Value: U32(1)
Latest Ledger: 518127
```
We should see events from our events contract showing ledger time the contract `increment` function invoked, contract hash, parameters used, type and value of `COUNTER`, and Latest ledger of the rpc network used.

##Conclusion
The `soroban serve` subcommand is used to launches a local development server for soroban web app. The `soroban events` subcommand is used to watches for events on a blockchain from a deployed soroban smart contract. I will explain the other main subcommands in the next post of this series. Happy Sorobaning!