Skip to content

Commit

Permalink
feat: default 'futurenet' to use remote rpc url (#114)
Browse files Browse the repository at this point in the history
Fixes #113

When `./initialize.sh futurenet` is used, default to using a remote RPC
URL rather than the local Docker node.
  • Loading branch information
chadoh committed Jun 6, 2023
1 parent 804366a commit f4f90a8
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 82 deletions.
89 changes: 51 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ Install Dependencies
--------------------

1. `soroban-cli v0.8.0`. See https://soroban.stellar.org/docs/getting-started/setup#install-the-soroban-cli
2. `docker` (both Standalone and Futurenet backends require it).
2. If you want to run everything locally: `docker` (you can run both Standalone and Futurenet backends with it)
3. `Node.js v17`
4. `Freighter wallet v2.9.1`. Download it from https://github.com/stellar/freighter/releases/tag/2.9.1 and Enable "Experimental Mode" in the settings (gear icon).
5. Build the `soroban-preview` docker image:
4. [Freighter Wallet](https://www.freighter.app/)[v2.9.1](https://github.com/stellar/freighter/releases/tag/2.9.1). Once installed, enable "Experimental Mode" in the settings (gear icon).
5. If you want to run everything locally, build the `soroban-preview` docker image:

make build-docker

Expand All @@ -25,9 +25,55 @@ Install Dependencies
Run Backend
-----------

You have two options: 1. run in [localnet/standalone](https://soroban.stellar.org/docs/getting-started/deploy-to-a-local-network) mode, or 2. run on [Futurenet](https://soroban.stellar.org/docs/getting-started/deploy-to-futurenet)
You have three options: 1. Deploy on [Futurenet](https://soroban.stellar.org/docs/getting-started/deploy-to-futurenet) using a remote [RPC](https://soroban.stellar.org/docs/getting-started/run-rpc) endpoint, 2. Run your own Futerenet RPC node with Docker and deploy to it, 3. run in [localnet/standalone](https://soroban.stellar.org/docs/getting-started/deploy-to-a-local-network) mode.

### Option 1: Localnet/Standalone
### Option 1: Deploy on Futurenet

0. Make sure you have soroban-cli installed, as explained above

1. Deploy the contracts and initialize them

./initialize.sh futurenet

This will create a `token-admin` identity for you (`soroban config identity create token-admin`) and deploy a Fungible Token contract as well as the [crowdfund contract](./contracts/crowdfund), with this account as admin.

2. Select the Futurenet network in your Freighter browser extension

### Option 2: Run your own Futurenet node

1. Run the backend docker container with `./quickstart.sh futurenet`, and wait for it to start.

**Note:** This can take up to 5 minutes to start syncing. You can tell it is
working by visiting http://localhost:8000/, and look at the
`ingest_latest_ledger`, field. If it is `0`, the quickstart image is not ready yet. The quickstart container also prints console statements on start status, it will print `soroban rpc: waiting for ready state...` at first and then `soroban rpc: up and ready` when network sync has been reached.

2. Load the contracts and initialize them

Use your own local soroban-cli:

./initialize.sh futurenet http://localhost:8000

Or run it inside the soroban-preview docker container:

docker exec soroban-preview ./initialize.sh futurenet

3. Add the Futurenet custom network in Freighter (Note, the out-of-the-box
"Future Net" network in Freighter will not work with a local quickstart
container, so we need to add our own):

| | |
|---|---|
| Name | Futurenet Local RPC|
| URL | http://localhost:8000/soroban/rpc |
| Passphrase | Test SDF Future Network ; October 2022 |
| Allow HTTP connection | Enabled |
| Switch to this network | Enabled |

4. Add some Futurenet network lumens to your Freighter wallet.

Visit https://laboratory.stellar.org/#create-account, and follow the instructions to create your freighter account on Futurenet.

### Option 3: Localnet/Standalone

0. If you didn't yet, build the `soroban-preview` docker image, as described above:

Expand Down Expand Up @@ -68,39 +114,6 @@ You have two options: 1. run in [localnet/standalone](https://soroban.stellar.or
1. Copy the address for your freighter wallet.
2. Visit `http://localhost:8000/friendbot?addr=<your address>`

### Option 2: Futurenet

1. Run the backend docker container with `./quickstart.sh futurenet`, and wait for it to start.

**Note:** This can take up to 5 minutes to start syncing. You can tell it is
working by visiting http://localhost:8000/, and look at the
`ingest_latest_ledger`, field. If it is `0`, the quickstart image is not ready yet. The quickstart container also prints console statements on start status, it will print `soroban rpc: waiting for ready state...` at first and then `soroban rpc: up and ready` when network sync has been reached.

2. Load the contracts and initialize them

Use your own local soroban-cli:

./initialize.sh futurenet

Or run it inside the soroban-preview docker container:

docker exec soroban-preview ./initialize.sh futurenet

3. Add the Futurenet custom network in Freighter (Note, the out-of-the-box
"Future Net" network in Freighter will not work with a local quickstart
container, so we need to add our own):

| | |
|---|---|
| Name | Futurenet Local RPC|
| URL | http://localhost:8000/soroban/rpc |
| Passphrase | Test SDF Future Network ; October 2022 |
| Allow HTTP connection | Enabled |
| Switch to this network | Enabled |

4. Add some Futurenet network lumens to your Freighter wallet.

Visit https://laboratory.stellar.org/#create-account, and follow the instructions to create your freighter account on Futurenet.

Frontend
--------
Expand Down
98 changes: 55 additions & 43 deletions initialize.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,35 @@ set -e

NETWORK="$1"

# If soroban-cli is called inside the soroban-preview docker containter,
# it can call the stellar standalone container just using its name "stellar"
if [[ "$IS_USING_DOCKER" == "true" ]]; then
SOROBAN_RPC_HOST="http://stellar:8000"
else
SOROBAN_RPC_HOST="http://localhost:8000"
SOROBAN_RPC_HOST="$2"

if [[ "$SOROBAN_RPC_HOST" == "" ]]; then
# If soroban-cli is called inside the soroban-preview docker container,
# it can call the stellar standalone container just using its name "stellar"
if [[ "$IS_USING_DOCKER" == "true" ]]; then
SOROBAN_RPC_HOST="http://stellar:8000"
elif [[ "$NETWORK" == "futurenet" ]]; then
SOROBAN_RPC_HOST="https://rpc-futurenet.stellar.org:443"
else
SOROBAN_RPC_HOST="http://localhost:8000"
fi
fi

SOROBAN_RPC_URL="$SOROBAN_RPC_HOST/soroban/rpc"

case "$1" in
standalone)
echo "Using standalone network"
echo "Using standalone network with RPC URL: $SOROBAN_RPC_URL"
SOROBAN_NETWORK_PASSPHRASE="Standalone Network ; February 2017"
FRIENDBOT_URL="$SOROBAN_RPC_HOST/friendbot"
;;
futurenet)
echo "Using Futurenet network"
echo "Using Futurenet network with RPC URL: $SOROBAN_RPC_URL"
SOROBAN_NETWORK_PASSPHRASE="Test SDF Future Network ; October 2022"
FRIENDBOT_URL="https://friendbot-futurenet.stellar.org/"
;;
*)
echo "Usage: $0 standalone|futurenet"
echo "Usage: $0 standalone|futurenet [rpc-host]"
exit 1
;;
esac
Expand Down Expand Up @@ -56,37 +62,43 @@ curl --silent -X POST "$FRIENDBOT_URL?addr=$TOKEN_ADMIN_ADDRESS" >/dev/null
ARGS="--network $NETWORK --source token-admin"

echo Wrap the Stellar asset
TOKEN_ID=$(soroban lab token wrap $ARGS --asset "EXT:$TOKEN_ADMIN_ADDRESS")
echo "Token wrapped succesfully with TOKEN_ID: $TOKEN_ID"

# TODO - remove this workaround when
# https://github.com/stellar/soroban-tools/issues/661 is resolved.
TOKEN_ADDRESS="$(node ./address_workaround.js $TOKEN_ID)"
echo "Token Address converted to StrKey contract address format:" $TOKEN_ADDRESS

echo -n "$TOKEN_ID" > .soroban-example-dapp/token_id

echo Build the crowdfund contract
make build

echo Deploy the crowdfund contract
CROWDFUND_ID="$(
soroban contract deploy $ARGS \
--wasm target/wasm32-unknown-unknown/release/soroban_crowdfund_contract.wasm
)"
echo "Contract deployed succesfully with ID: $CROWDFUND_ID"
echo "$CROWDFUND_ID" > .soroban-example-dapp/crowdfund_id

echo "Initialize the crowdfund contract"
deadline="$(($(date +"%s") + 86400))"
soroban contract invoke \
$ARGS \
--id "$CROWDFUND_ID" \
-- \
initialize \
--recipient "$TOKEN_ADMIN_ADDRESS" \
--deadline "$deadline" \
--target_amount "1000000000" \
--token "$TOKEN_ADDRESS"

echo "Done"
TOKEN_ID=$(soroban lab token wrap $ARGS --asset "EXT:$TOKEN_ADMIN_ADDRESS" 2>/dev/null)

if [[ "$TOKEN_ID" == "" ]]; then
echo "Token already wrapped; everything initialized."
exit 0
else
echo "Token wrapped succesfully with TOKEN_ID: $TOKEN_ID"

# TODO - remove this workaround when
# https://github.com/stellar/soroban-tools/issues/661 is resolved.
TOKEN_ADDRESS="$(node ./address_workaround.js $TOKEN_ID)"
echo "Token Address converted to StrKey contract address format:" $TOKEN_ADDRESS

echo -n "$TOKEN_ID" > .soroban-example-dapp/token_id

echo Build the crowdfund contract
make build

echo Deploy the crowdfund contract
CROWDFUND_ID="$(
soroban contract deploy $ARGS \
--wasm target/wasm32-unknown-unknown/release/soroban_crowdfund_contract.wasm
)"
echo "Contract deployed succesfully with ID: $CROWDFUND_ID"
echo "$CROWDFUND_ID" > .soroban-example-dapp/crowdfund_id

echo "Initialize the crowdfund contract"
deadline="$(($(date +"%s") + 86400))"
soroban contract invoke \
$ARGS \
--id "$CROWDFUND_ID" \
-- \
initialize \
--recipient "$TOKEN_ADMIN_ADDRESS" \
--deadline "$deadline" \
--target_amount "1000000000" \
--token "$TOKEN_ADDRESS"

echo "Done"
fi
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"version": "0.1.0",
"private": true,
"scripts": {
"setup": "./initialize.sh standalone",
"setup": "./initialize.sh futurenet",
"reset": "rm -rf .soroban-example-dapp ; npm run setup",
"dev": "next dev",
"build": "next build",
Expand Down

0 comments on commit f4f90a8

Please sign in to comment.