This is a Next.js project, demoing how to build a dapp frontend backed by smart contracts on Stellar.
-
soroban-cli
. See https://soroban.stellar.org/docs/getting-started/setup#install-the-soroban-cli, but instead ofcargo install soroban-cli
, runcargo install_soroban
. This is an alias set up in .cargo/config.toml, which pins the local soroban-cli to a specific version. If you add./target/bin/
to your PATH, then you'll automatically use this version ofsoroban-cli
when you're in this directory. -
If you want to run everything locally:
docker
(you can run both Standalone and Futurenet backends with it) -
Node.js v18
-
Freighter Wallet ≥v5.0.2. Or from the Firefox / Chrome extension store. Once installed, enable "Experimental Mode" in the settings (gear icon).
-
If you want to run everything locally, build the
soroban-preview
docker image:make build-docker
Building the docker image lets you avoid installing the specific version of soroban-cli in step (1), if desired.
You have three options: 1. Deploy on Futurenet using a remote RPC endpoint, 2. Run your own Futerenet RPC node with Docker and deploy to it, 3. run in localnet/standalone mode.
-
Make sure you have soroban-cli installed, as explained above
-
Deploy the contracts and initialize them
npm run setup
This runs
./initialize.sh futurenet
behind the scenes, which will create atoken-admin
identity for you (soroban config identity create token-admin
) and deploy a Fungible Token contract as well as the crowdfund contract, with this account as admin. -
Select the Futurenet network in your Freighter browser extension
-
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 is0
, the quickstart image is not ready yet. The quickstart container also prints console statements on start status, it will printsoroban rpc: waiting for ready state...
at first and thensoroban rpc: up and ready
when network sync has been reached. -
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
-
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 -
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.
-
If you didn't yet, build the
soroban-preview
docker image, as described above:make build-docker
-
In one terminal, run the backend docker containers and wait for them to start:
./quickstart.sh standalone
You know that it fully started if it goes into a loop publishing & syncing checkpoints.
You can stop this process with ctrlc
-
Keep that running, then deploy the contracts and initialize them:
You can use your own local soroban-cli:
NETWORK=standalone npm run setup
Or run it inside the soroban-preview docker container:
docker exec soroban-preview ./initialize.sh standalone
Note: this state will be lost if the quickstart docker container is removed, which will happen if you stop the
quickstart.sh
process. You will need to re-run./initialize.sh
every time you restart the container. -
Add the Standalone custom network in Freighter
Name Standalone URL http://localhost:8000/soroban/rpc Passphrase Standalone Network ; February 2017 Allow HTTP connection Enabled Switch to this network Enabled -
Add some Standalone network lumens to your Freighter wallet.
- Copy the address for your freighter wallet.
- Visit
http://localhost:8000/friendbot?addr=<your address>
Now that you're running the backend, you can run the development server:
npm run dev
Open http://localhost:3000 with your browser to see the result.
Note: Before you can "Back this project", you'll need to have some EXT (example token) in your freighter wallet. There is a "Mint 100 EXT" button, which will gift you 100 EXT tokens for that purpose.
The contract dev should be able to:
- Clone the example repo (this one)
- Choose their target amount and deadline
- Deploy their contract to futurenet
- Deploy a soroban rpc server somewhere (TBD)
- Deploy the example web ui somewhere (e.g. netlify)
Then via the web UI, users should be able to:
- Connect their wallet (freighter for now)
- See their current balance(s)
- See the current fundraising status (total amount & time remaining)
- See allowed assets (xlm-only for now?)
- Deposit an allowed asset
- See their deposit(s) appear on the page as the transactions are confirmed.
- "Live"-Update the page with the total amount with the new amount