Skip to content
This repository was archived by the owner on Jan 8, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
5eff63f
feat: switch from soroban-react to generated libs
chadoh Jun 2, 2023
056c436
feat: add ft-contract source; rm `../examples`
chadoh Jun 9, 2023
6489764
fix: use workspace dependency versions; update sdk
chadoh Jun 9, 2023
f679b8e
feat: no more embedding secret keys
chadoh Jun 12, 2023
c81b30a
fix: add mint_100 and comment out events
willemneal Jun 13, 2023
8d2fa49
fix: start tryna fix event subscriptions
chadoh Jun 13, 2023
8494dfb
fix: update UI after minting 100 ABND
chadoh Jun 13, 2023
9ad0ac9
fix: signAndSend `deposit`; fix modal; update form
chadoh Jun 14, 2023
d885ceb
docs: update AlmostUnnecessaryProvider comment
chadoh Jun 14, 2023
4c17f32
build: allow newer node versions; improve package name
chadoh Jun 14, 2023
5488b42
build: generate contract clients
chadoh Jun 14, 2023
3e327e8
build: fill in .soroban-example-dapp/* first
chadoh Jun 14, 2023
54eb663
build: install locked CLI version with alias
chadoh Jun 14, 2023
97e9ab7
build: build contracts before generating clients
chadoh Jun 14, 2023
98a1e2c
build: s/run-script/run/
chadoh Jun 14, 2023
d62f3b3
build: make convert.ts pass strict; exclude target/ from type checking
chadoh Jun 14, 2023
a3e74c3
build: use node 18 in CI
chadoh Jun 15, 2023
66547fa
build: update lockfile; cat lockfiles during build
chadoh Jun 15, 2023
a1a5d5d
build: switch to yarn; will it work better?
chadoh Jun 15, 2023
6d845de
build: omg yarn works with relative paths but not file:
chadoh Jun 15, 2023
10c60a9
build: rm busted debug steps; update docs for yarn
chadoh Jun 15, 2023
d56d609
build: s/yarn ci/yarn install --frozen-lockfile
chadoh Jun 15, 2023
3c39750
build: back to npm we go
chadoh Jun 15, 2023
a77507c
build: switch to postinstall script
chadoh Jun 15, 2023
cb9f650
build: rm outdated build step
chadoh Jun 15, 2023
afd29e5
build: warn, don't deny, on clippy complaints
chadoh Jun 16, 2023
18b404d
feat: use freighter-api@1.5
chadoh Jun 16, 2023
ac00a3b
feat: straightforward copy/paste of subscribe logic
chadoh Jun 16, 2023
4c86660
feat: move subscribe logic to useSubscription hook
chadoh Jun 16, 2023
fa09e62
fix: update all relevant UI after pledging
chadoh Jun 16, 2023
b74d052
fix: avoid Freighter error if not yet connected
chadoh Jun 16, 2023
a9e40b3
fix: can't default build to wasm because tests
chadoh Jun 16, 2023
842aea3
build: use latest soroban-cli
chadoh Jun 16, 2023
24ba3d7
build: use latest cli/soroban-client; rm stellar-base pin
chadoh Jun 19, 2023
4eab280
build: use latest CLI rev from stellar repo
chadoh Jun 19, 2023
c8cda1a
fix: deal with undefined case
chadoh Jun 19, 2023
7db004e
build: rm RUSTFLAGS from Makefile
chadoh Jun 20, 2023
8b65e62
fix: allow using standalone
chadoh Jun 20, 2023
0a214fa
build: update freighter-api
chadoh Jun 20, 2023
77cc1e3
build: update pinned soroban-cli version
chadoh Jul 5, 2023
be72e6e
build(ci): stub .soroban-example-dapp/network
chadoh Jul 5, 2023
f7793e2
fix: add 'await'
chadoh Jul 5, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
133 changes: 133 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
# paths = ["/path/to/override"] # path dependency overrides

[alias] # command aliases
install_soroban = "install --git https://github.com/stellar/soroban-tools --rev 2b343d3e6afdb5eff54fb03622627cd55e785358 --root ./target soroban-cli --debug"
b = "build --target wasm32-unknown-unknown --release"
# c = "check"
# t = "test"
# r = "run"
# rr = "run --release"
# recursive_example = "rr --example recursions"
# space_example = ["run", "--release", "--", "\"command list\""]

[build]
# jobs = 1 # number of parallel jobs, defaults to # of CPUs
# rustc = "rustc" # the rust compiler tool
# rustc-wrapper = "…" # run this wrapper instead of `rustc`
# rustc-workspace-wrapper = "…" # run this wrapper instead of `rustc` for workspace members
# rustdoc = "rustdoc" # the doc generator tool
# target = "wasm32-unknown-unknown" # build for the target triple (ignored by `cargo install`)
# target-dir = "target" # path of where to place all generated artifacts
rustflags = [ # set these to match .github/workflows/rust.yml
"-Wclippy::all", # warn for all clippy lints
"-Wclippy::pedantic", # warn for pedantic clippy lints
] # custom flags to pass to all compiler invocations
# rustdocflags = ["…", "…"] # custom flags to pass to rustdoc
# incremental = true # whether or not to enable incremental compilation
# dep-info-basedir = "…" # path for the base directory for targets in depfiles

# [doc]
# browser = "chromium" # browser to use with `cargo doc --open`,
# # overrides the `BROWSER` environment variable

# [env]
# # Set ENV_VAR_NAME=value for any process run by Cargo
# ENV_VAR_NAME = "value"
# # Set even if already present in environment
# ENV_VAR_NAME_2 = { value = "value", force = true }
# # Value is relative to .cargo directory containing `config.toml`, make absolute
# ENV_VAR_NAME_3 = { value = "relative/path", relative = true }

# [future-incompat-report]
# frequency = 'always' # when to display a notification about a future incompat report

# [cargo-new]
# vcs = "none" # VCS to use ('git', 'hg', 'pijul', 'fossil', 'none')

# [http]
# debug = false # HTTP debugging
# proxy = "host:port" # HTTP proxy in libcurl format
# ssl-version = "tlsv1.3" # TLS version to use
# ssl-version.max = "tlsv1.3" # maximum TLS version
# ssl-version.min = "tlsv1.1" # minimum TLS version
# timeout = 30 # timeout for each HTTP request, in seconds
# low-speed-limit = 10 # network timeout threshold (bytes/sec)
# cainfo = "cert.pem" # path to Certificate Authority (CA) bundle
# check-revoke = true # check for SSL certificate revocation
# multiplexing = true # HTTP/2 multiplexing
# user-agent = "…" # the user-agent header

# [install]
# root = "/some/path" # `cargo install` destination directory

# [net]
# retry = 2 # network retries
# git-fetch-with-cli = true # use the `git` executable for git operations
# offline = true # do not access the network

# [net.ssh]
# known-hosts = ["..."] # known SSH host keys

# [patch.<registry>]
# # Same keys as for [patch] in Cargo.toml

# [profile.<name>] # Modify profile settings via config.
# inherits = "dev" # Inherits settings from [profile.dev].
# opt-level = 0 # Optimization level.
# debug = true # Include debug info.
# split-debuginfo = '...' # Debug info splitting behavior.
# debug-assertions = true # Enables debug assertions.
# overflow-checks = true # Enables runtime integer overflow checks.
# lto = false # Sets link-time optimization.
# panic = 'unwind' # The panic strategy.
# incremental = true # Incremental compilation.
# codegen-units = 16 # Number of code generation units.
# rpath = false # Sets the rpath linking option.
# [profile.<name>.build-override] # Overrides build-script settings.
# # Same keys for a normal profile.
# [profile.<name>.package.<name>] # Override profile for a package.
# # Same keys for a normal profile (minus `panic`, `lto`, and `rpath`).

# [registries.<name>] # registries other than crates.io
# index = "…" # URL of the registry index
# token = "…" # authentication token for the registry

# [registry]
# default = "…" # name of the default registry
# token = "…" # authentication token for crates.io

# [source.<name>] # source definition and replacement
# replace-with = "…" # replace this source with the given named source
# directory = "…" # path to a directory source
# registry = "…" # URL to a registry source
# local-registry = "…" # path to a local registry source
# git = "…" # URL of a git repository source
# branch = "…" # branch name for the git repository
# tag = "…" # tag name for the git repository
# rev = "…" # revision for the git repository

# [target.<triple>]
# linker = "…" # linker to use
# runner = "…" # wrapper to run executables
# rustflags = ["…", "…"] # custom flags for `rustc`

# [target.<cfg>]
# runner = "…" # wrapper to run executables
# rustflags = ["…", "…"] # custom flags for `rustc`

# [target.<triple>.<links>] # `links` build script override
# rustc-link-lib = ["foo"]
# rustc-link-search = ["/path/to/foo"]
# rustc-flags = ["-L", "/some/path"]
# rustc-cfg = ['key="value"']
# rustc-env = {key = "value"}
# rustc-cdylib-link-arg = ["…"]
# metadata_key1 = "value"
# metadata_key2 = "value"

# [term]
# quiet = false # whether cargo output is quiet
# verbose = false # whether cargo provides verbose output
# color = 'auto' # whether cargo colorizes output
# progress.when = 'auto' # whether cargo shows progress bar
# progress.width = 80 # width of progress bar
19 changes: 9 additions & 10 deletions .github/workflows/nodejs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,16 @@ jobs:
- uses: stellar/actions/rust-cache@main
- run: rustup update
- run: rustup target add wasm32-unknown-unknown
- run: cargo install --target-dir ~/.cargo/target --locked --version 0.8.0 soroban-cli
- name: Use Node.js 17.x
uses: actions/setup-node@v3
- run: make build
- run: cargo install_soroban
- uses: actions/setup-node@v3
with:
node-version: 17.x
node-version: 18.x
cache: 'npm'
- run: npm ci
- run: |
mkdir -p .soroban-example-dapp
echo 'a9ab643486dc0dbcdc1485e6589e8bb3bcbbd8e69ad66c703556b4d6645a6dc8' > .soroban-example-dapp/token_id
echo '42798d5db884626e57f96630e7d02ba8210b4629d2959ef79ebb9e6538676ef9' > .soroban-example-dapp/crowdfund_id
echo 'GDT2NORMZF6S2T4PT4OBJJ43OPD3GPRNTJG3WVVFB356TUHWZQMU6C3U' > .soroban-example-dapp/token_admin_address
echo 'SAKCFFFNCE7XAWYMYVRZQYKUK6KMUCDIINLWISJYTMYJLNR2QLCDLFVT' > .soroban-example-dapp/token_admin_secret
- run: npm run-script build
echo 'futurenet' > .soroban-example-dapp/network
echo 'CC757WDV3G442WQCNPNOA2UEXOC7UJD5VP4BLLCRDW5LRM6UZZR6ISVU' > .soroban-example-dapp/abundance_token_id
echo 'CCHCPXECLYGX4QU34ZZOHP6C6KVAPIDTUNPIUA6GF4SP6ECFF5BX57OG' > .soroban-example-dapp/crowdfund_id
- run: npm ci
- run: npm run build
2 changes: 1 addition & 1 deletion .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
pull_request:

env:
RUSTFLAGS: -Dwarnings -Dclippy::all -Dclippy::pedantic
RUSTFLAGS: -Wclippy::all -Wclippy::pedantic

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR copied in the token example from https://github.com/stellar/soroban-examples. But the examples repo does not have the pedantic clippy linting, so this more rigid check failed. This makes the clippy check only warn (-W) rather than deny (-D).


jobs:

Expand Down
17 changes: 17 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 4 additions & 9 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
resolver = "2"

members = [
"contracts/crowdfund",
"contracts/*",
]

[profile.release]
Expand All @@ -15,11 +15,6 @@ panic = "abort"
codegen-units = 1
lto = true

[workspace.dependencies.soroban-sdk]
version = "0.8.2"






[workspace.dependencies]
soroban-sdk = "0.8.4"
soroban-token-sdk = "0.8.4"
1 change: 0 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ ENV PATH="$PATH:/root/.cargo/bin"
RUN rustup target add wasm32-unknown-unknown

RUN apt install -y build-essential
RUN cargo install --locked --version 0.8.0 soroban-cli
# WORKDIR /
RUN mkdir /workspace
WORKDIR /workspace
Expand Down
1 change: 0 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
all: check build test

export RUSTFLAGS=-Dwarnings -Dclippy::all -Dclippy::pedantic
CARGO_BUILD_TARGET?=wasm32-unknown-unknown

test: fmt
Expand Down
21 changes: 5 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ Getting Started
Install Dependencies
--------------------

1. `soroban-cli v0.8.0`. See https://soroban.stellar.org/docs/getting-started/setup#install-the-soroban-cli
1. `soroban-cli`. See https://soroban.stellar.org/docs/getting-started/setup#install-the-soroban-cli, but instead of `cargo install soroban-cli`, run `cargo install_soroban`. This is an alias set up in [.cargo/config.toml](./.cargo/config.toml), which pins the local soroban-cli to a specific version. If you add `./target/bin/` [to your PATH](https://linuxize.com/post/how-to-add-directory-to-path-in-linux/), then you'll automatically use this version of `soroban-cli` when you're in this directory.
2. If you want to run everything locally: `docker` (you can run both Standalone and Futurenet backends with it)
3. `Node.js v17`
3. Node.js v18
4. [Freighter Wallet](https://www.freighter.app/) ≥[v5.0.2](https://github.com/stellar/freighter/releases/tag/2.9.1). Or from the Firefox / Chrome extension store. Once installed, enable "Experimental Mode" in the settings (gear icon).
5. If you want to run everything locally, build the `soroban-preview` docker image:

Expand All @@ -33,9 +33,9 @@ You have three options: 1. Deploy on [Futurenet](https://soroban.stellar.org/doc

1. Deploy the contracts and initialize them

./initialize.sh futurenet
npm run setup

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.
This runs `./initialize.sh futurenet` behind the scenes, which 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

Expand Down Expand Up @@ -91,7 +91,7 @@ You have three options: 1. Deploy on [Futurenet](https://soroban.stellar.org/doc

You can use your own local soroban-cli:

./initialize.sh standalone
NETWORK=standalone npm run setup

Or run it inside the soroban-preview docker container:

Expand Down Expand Up @@ -148,14 +148,3 @@ Then via the web UI, users should be able to:
- 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

Wallet Integration & Data Fetching
==================================

There is a `./wallet` directory, which contains a small library to connect to
the user's freighter wallet, as well as some React hooks to talk to a
soroban-rpc server (e.g. `soroban-cli serve`), to fetch data and send
transactions.

Data from contracts is fetched using the `useContractValue` hook from @soroban-react/contracts. Transactions are submitted to the network
using the `useSendTransaction` from @soroban-react/contracts.
22 changes: 0 additions & 22 deletions components/ProviderExample.tsx

This file was deleted.

9 changes: 2 additions & 7 deletions components/atoms/connect-button/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from 'react'
import { useSorobanReact } from '@soroban-react/core'
import { setAllowed } from '@stellar/freighter-api'
import styles from './style.module.css'

export interface ConnectButtonProps {
Expand All @@ -8,16 +8,11 @@ export interface ConnectButtonProps {
}

export function ConnectButton({ label, isHigher }: ConnectButtonProps) {
const { connect } = useSorobanReact()
const openConnectModal = async () => {
await connect()
}

return (
<button
className={styles.button}
style={{ height: isHigher ? 50 : 38 }}
onClick={openConnectModal}
onClick={setAllowed}
>
{label}
</button>
Expand Down
28 changes: 8 additions & 20 deletions components/molecules/deposits/index.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,8 @@
import React from 'react'
import * as SorobanClient from 'soroban-client'
import styles from './style.module.css'
import { Utils } from '../../../shared/utils'
import { Spacer } from '../../atoms/spacer'
import * as convert from '../../../convert'
import { Constants } from '../../../shared/constants'
import {
ContractValueType,
useContractValue,
} from '@soroban-react/contracts'
import { useSorobanReact } from '@soroban-react/core'
import { balance as getBalance } from 'crowdfund-contract'

export interface IDepositsProps {
address: string
Expand All @@ -20,19 +13,14 @@ export interface IDepositsProps {
}

export function Deposits(props: IDepositsProps) {
const useLoadDeposits = (): ContractValueType => {
return useContractValue({
contractId: props.idCrowdfund,
method: 'balance',
params: [new SorobanClient.Address(props.address).toScVal()],
sorobanContext: useSorobanReact()
})
}
const [balance, setBalance] = React.useState<BigInt>(BigInt(0))

React.useEffect(() => {
getBalance({ user: props.address }).then(setBalance)
}, [props.address])

let yourDepositsXdr = useLoadDeposits()
const yourDeposits = convert.scvalToBigNumber(yourDepositsXdr.result)

if (yourDeposits.toNumber() <= 0) {
if (Number(balance) <= 0) {
return <React.Fragment />
}

Expand All @@ -42,7 +30,7 @@ export function Deposits(props: IDepositsProps) {
<h6>You’ve Pledged</h6>
<div className={styles.pledgeContainer}>
<span className={styles.values}>
{Utils.formatAmount(yourDeposits, props.decimals)}{' '}
{Utils.formatAmount(balance, props.decimals)}{' '}
<span title={props.name}>{props.symbol}</span>
</span>
{/*<a>
Expand Down
Loading