Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
178 commits
Select commit Hold shift + click to select a range
07378e9
feat: add frontend auth validation and user-friendly error messages
Henry3029 Jan 23, 2026
faa7c5d
update handleGithubSignIn function
Henry3029 Jan 24, 2026
14803f9
feat: implement robust error handling for unauthorized access
Henry3029 Jan 24, 2026
e6eaedb
feat: fetch and display real contributor stats data from backend
Dairus01 Jan 25, 2026
a6c7a3a
fix(backend): fix syntax error in stats_public.go
Dairus01 Jan 25, 2026
869dace
feat(billing): add custom error message for kyc verification
Henry3029 Jan 25, 2026
1b6c70c
feat:(billingTab.tsx) add custom error messages and UI feedback for K…
Henry3029 Jan 26, 2026
83760d7
feat(mobile): optimize BrowsePage for mobile screens
soma-enyi Jan 26, 2026
c5944d4
Merge branch 'master' into feat/fetch-contributor-stats-data
Dairus01 Jan 26, 2026
48b1a69
feat: implement comprehensive event indexing and monitoring
Jan 26, 2026
4bd8e29
feat: Implement comprehensive error recovery and retry mechanisms for…
Georgechisom Jan 27, 2026
c960b24
fix: restore clean payout file
Henry3029 Jan 27, 2026
d3e863b
feat(payOutTab.tsx): add custom error message
Henry3029 Jan 27, 2026
1d8f152
fix conflict and mobile responsiveness
Pee-pheelips Jan 27, 2026
a8a2a0d
Merge branch 'master' into merge-conflict-fix
Pee-pheelips Jan 27, 2026
f805c2c
Merge branch 'master' into feat/error-recovery-retry
Georgechisom Jan 27, 2026
82c5620
feat: add contract interaction SDK and examples
JerryIdoko Jan 27, 2026
70c9b5e
Merge branch 'master' into feat-frontend-fix
Henry3029 Jan 27, 2026
34fe611
Merge branch 'Jagadeeshftw:master' into master
soma-enyi Jan 27, 2026
3a520b8
chore: update frontend dependencies
soma-enyi Jan 27, 2026
5e30a48
bug: notification fixed
caxtonacollins Jan 27, 2026
1f2515a
chore: remove node_modules and update gitignore
JerryIdoko Jan 27, 2026
452583c
Merge branch 'master' into feat/contract-interaction-sdk
JerryIdoko Jan 27, 2026
371e78f
Merge branch 'master' into merge-conflict-fix
Pee-pheelips Jan 27, 2026
5b4d15e
Merge branch 'master' into feat/error-recovery-retry
Georgechisom Jan 27, 2026
0e27b42
fix: resolve CI/CD errors - clean corrupted code, fix clippy warnings…
Georgechisom Jan 27, 2026
1c2c7b0
Fixed #49
gaius01 Jan 27, 2026
bddb1b4
Merge branch 'master' into notification
caxtonacollins Jan 27, 2026
bd32469
feat: implement pause and emergency stop functionality for escrow con…
Samaro1 Jan 27, 2026
d60cc28
fix: correct error codes and pause functionality in bounty escrow
Samaro1 Jan 28, 2026
0b102df
fix: correct program-escrow test parameter order and warnings
Samaro1 Jan 28, 2026
3d1b257
feat: add wallet edit flow and disable already-configured tokens in a…
Tola-byte Jan 28, 2026
ae22d72
chore(format): apply rustfmt to contracts to satisfy CI formatting check
Samaro1 Jan 28, 2026
179e680
Add pointer cursor to all clickable elements across the website
Luluameh Jan 28, 2026
5f15774
feat: show fallback description text for recommended projects
AbuTuraab Jan 28, 2026
8c0a046
fix: prevent duplicate wallet entries for the same token
Luluameh Jan 28, 2026
226e604
Refactor: Implement audit system, shared types, and cleanup
rainwaters11 Jan 28, 2026
95b872d
test: verify governance flow and fix minor bugs
Mosas2000 Jan 28, 2026
a56ea94
Merge pull request #84 from Henry3029/feat-frontend-fix
Jagadeeshftw Jan 28, 2026
490cf5f
Merge pull request #267 from Samaro1/feat/new-pause-emergency-stop
Jagadeeshftw Jan 28, 2026
f3a3fbf
Merge pull request #239 from JerryIdoko/feat/contract-interaction-sdk
Jagadeeshftw Jan 28, 2026
0a67d1e
Merge pull request #258 from caxtonacollins/notification
Jagadeeshftw Jan 28, 2026
9378f37
feat(admin): add project management functionality
Macnelson9 Jan 28, 2026
83a2336
Merge pull request #269 from AbuTuraab/filterrefactor
Jagadeeshftw Jan 28, 2026
9202a61
Merge pull request #268 from Luluameh/feat/cursor-allwebsite
Jagadeeshftw Jan 28, 2026
577be9b
Merge pull request #270 from JoyLight00/feat/duplicate-walletfix
Jagadeeshftw Jan 28, 2026
993481a
Merge pull request #273 from bitstarkbridge/SmartContract
Jagadeeshftw Jan 28, 2026
69042dc
Merge branch 'master' into add/edit-functionality
Tola-byte Jan 28, 2026
7c6f575
Revert "Merge pull request #118 from Samaro1/issue-97"
Jagadeeshftw Jan 27, 2026
dfa1aee
Revert "Merge pull request #84 from Henry3029/feat-frontend-fix"
Jagadeeshftw Jan 28, 2026
f507b54
feat: enhance NotificationsDropdown with mobile navigation props
Jagadeeshftw Jan 28, 2026
7b2680c
Merge pull request #271 from Mosas2000/feat/upgrade-governance-voting
Jagadeeshftw Jan 28, 2026
0b274d5
fix: build errors
Tola-byte Jan 28, 2026
42b27aa
Merge pull request #266 from Tola-byte/add/edit-functionality
Jagadeeshftw Jan 28, 2026
0d75713
Merge branch 'master' into fix/projects-tab-in-admin-page
Macnelson9 Jan 28, 2026
9f18eb3
Save local changes before merging master
MerlinTheWhiz Jan 28, 2026
5de93c2
Save local changes before merging master
MerlinTheWhiz Jan 28, 2026
f275cbd
fix: clean up and restyle GitHub resync toast in settings profile
MerlinTheWhiz Jan 28, 2026
95f5160
Merge branch 'master' into merge-conflict-fix
Pee-pheelips Jan 28, 2026
4307fbf
chore: merge master with pause functionality and resolve conflicts
Georgechisom Jan 28, 2026
b6aba8f
Merge pull request #236 from Pee-pheelips/merge-conflict-fix
Jagadeeshftw Jan 28, 2026
9b84c21
Merge pull request #231 from Georgechisom/feat/error-recovery-retry
Jagadeeshftw Jan 28, 2026
a86b240
Merge pull request #274 from Macnelson9/fix/projects-tab-in-admin-page
Jagadeeshftw Jan 28, 2026
9e47ec7
feat(profile): temporarily remove Contribution Heatmap for build stab…
Jagadeeshftw Jan 28, 2026
18e9e89
Commit before merge with main
MerlinTheWhiz Jan 29, 2026
dfd498d
Merge remote-tracking branch 'origin/master' into fix/profile-resync-…
MerlinTheWhiz Jan 29, 2026
36ff240
Resolving merge conflicts
MerlinTheWhiz Jan 29, 2026
e20d623
Edited the styling of the toast
MerlinTheWhiz Jan 29, 2026
e96d9eb
frontend: implement functional search with real projects, issues, and…
devJaja Jan 29, 2026
5bf7756
Merge remote-tracking branch 'origin/master' into fix/profile-resync-…
MerlinTheWhiz Jan 30, 2026
9216005
feat: implement escrow expiration and auto-refund
Georgechisom Jan 30, 2026
90b4a8a
Merge origin/master into state-verification-audit
rainwaters11 Jan 30, 2026
7f409fa
feat: add configurable min/max amount limits for lock and payout oper…
soma-enyi Jan 30, 2026
89945fa
fix: update program-escrow tests for new initialize_program signature
Georgechisom Jan 30, 2026
8a46b2d
Merge branch 'master' into feat/configurable-amount-limits
soma-enyi Jan 30, 2026
0aed038
fix: restore missing amount limits functions and correct imports
soma-enyi Jan 30, 2026
934f229
docs: add summary of fixes applied for CI/CD compliance
soma-enyi Jan 30, 2026
cc0e907
fix: restructure data page layout - move contributor activity to left…
MerlinTheWhiz Jan 30, 2026
4f6879a
feat: add escrow metadata and tagging for indexing
abdulomeiza Jan 30, 2026
edbf7fe
fix: correct CI workflow paths and add program escrow build steps
soma-enyi Jan 30, 2026
960b31b
Merge branch 'master' into feat/escrow-metadata-tagging
abdulomeiza Jan 30, 2026
a60f158
Feat/event indexing query functions
ryzen-xp Jan 30, 2026
dbb3fed
fixing script errors
abdulomeiza Jan 30, 2026
ffa695b
Merge pull request #322 from ryzen-xp/feat/event-indexing-query-function
Jagadeeshftw Jan 30, 2026
7f590a2
Merge pull request #319 from MerlinTheWhiz/fix/restructure-data-page-…
Jagadeeshftw Jan 30, 2026
2e3417a
error handling2
abdulomeiza Jan 30, 2026
f17cc62
Data page with sidebar and topbar responsiveness
MerlinTheWhiz Jan 30, 2026
9627abd
Merge remote-tracking branch 'origin/master' into fix/restructure-dat…
MerlinTheWhiz Jan 30, 2026
a23e6e3
fix: resolve code formatting issues in CI pipeline
abdulomeiza Jan 30, 2026
f17c0ce
feat: Multiple token support
Jan 30, 2026
45fdfb3
feat: define cross-contract standard interfaces
codebestia Jan 30, 2026
01bace4
feat: add pause and emergency stop functionality
Xoulomon Jan 30, 2026
b6364e6
feat: implement traits for bounty escrow
codebestia Jan 30, 2026
5143fba
test: fix tests to accomodate new implementation
codebestia Jan 30, 2026
384a8a8
feat: implement traits for grainlify-core
codebestia Jan 30, 2026
03d073e
feat: implement traits for program-escrow
codebestia Jan 30, 2026
64a3eb3
Merge pull request #325 from MerlinTheWhiz/fix/restructure-data-page-…
Jagadeeshftw Jan 30, 2026
7ee422c
Merge pull request #320 from abdulomeiza/feat/escrow-metadata-tagging
Jagadeeshftw Jan 30, 2026
46a55d0
Merge pull request #328 from Xoulomon/pause-stop
Jagadeeshftw Jan 30, 2026
9cc4911
Merge branch 'master' into feat/cross-contract-standard-interfaces
codebestia Jan 30, 2026
7193aec
feat: add GitHub organization avatars to repository selector dropdown
Marvelousmicheal Jan 30, 2026
ef28cdf
fix: build
Tola-byte Jan 30, 2026
228c4c6
Merge upstream/master into docs/mev - resolve conflicts
Tola-byte Jan 30, 2026
782fcc6
Merge: keep local changes and integrate incoming updates
soma-enyi Jan 30, 2026
4095ac3
Fix program-escrow compilation errors after merge
Tola-byte Jan 30, 2026
adcaebd
fix: ensure cargo environment is sourced in all CI steps
soma-enyi Jan 30, 2026
65e88d2
Add network selection and risk warning to payment method modal is fixed
Tybravo Jan 30, 2026
13091cb
Merge pull request #331 from Tola-byte/docs/mev
Jagadeeshftw Jan 30, 2026
f8767e4
fix: add missing cargo environment sourcing in contracts.yml
soma-enyi Jan 30, 2026
2b7592a
feat: implement refund deadline extension
Tola-byte Jan 30, 2026
45ee47e
Merge pull request #335 from Tybravo/frontend/add-network-selection-r…
Jagadeeshftw Jan 30, 2026
5e15a78
Merge origin/master into feat/escrow-expiration-auto-refund
Georgechisom Jan 30, 2026
56c9321
fix: ci for contracts
Tola-byte Jan 30, 2026
9228eaa
fix: contracts-build
Tola-byte Jan 30, 2026
9e5051d
Merge pull request #334 from Tola-byte/feat/refund-deadline-extension
Jagadeeshftw Jan 30, 2026
0970dfd
docs: implement comprehensive contract documentation
walterthesmart Jan 30, 2026
17e02e2
feat: add invariant testing and documented invariants
Sendi0011 Jan 30, 2026
e6a3565
fix: lid duplicated line
Sendi0011 Jan 30, 2026
1d1f6f0
feat: add multi-signature approval for large releases
Jan 30, 2026
ca60fe4
Merge branch 'master' into feat/cross-contract-standard-interfaces
codebestia Jan 30, 2026
51854de
update
Jan 30, 2026
bf6789d
mobile responsiveness sidebar navigation
Pee-pheelips Jan 30, 2026
d5c117d
Resolve merge conflicts: merge contributor stats + search in client, …
Dairus01 Jan 31, 2026
dd93ac7
Accept merged frontend/package-lock.json
Dairus01 Jan 31, 2026
be12c51
WIP: Update test snapshots before merge
Georgechisom Jan 31, 2026
e2cb4fa
Merge master into feat/escrow-expiration-auto-refund
Georgechisom Jan 31, 2026
527188d
Fix merge conflicts: remove duplicate enum values and fix clippy warn…
Georgechisom Jan 31, 2026
2b3283b
Fix formatting: remove trailing spaces in DataKey enum
Georgechisom Jan 31, 2026
f54fdbf
Merge pull request #169 from Dairus01/feat/fetch-contributor-stats-data
Jagadeeshftw Jan 31, 2026
de1ba3e
Merge branch 'master' into FirstLastName
Jagadeeshftw Jan 31, 2026
8553f14
Merge pull request #262 from gaius01/FirstLastName
Jagadeeshftw Jan 31, 2026
0ace31e
Merge pull request #272 from rainwaters11/state-verification-audit
Jagadeeshftw Jan 31, 2026
bdf1659
Merge pull request #317 from Georgechisom/feat/escrow-expiration-auto…
Jagadeeshftw Jan 31, 2026
6de0020
Merge pull request #330 from Marvelousmicheal/feat/maintainer-dashboa…
Jagadeeshftw Jan 31, 2026
effd1ae
Merge pull request #342 from Pee-pheelips/mobile-responsiveness-sideb…
Jagadeeshftw Jan 31, 2026
5de7318
fix: Public-Profile-menu-should-always-open-the-current-users-profile
legend4tech Jan 31, 2026
4feef92
fix: resolved merged conflicts
legend4tech Jan 31, 2026
902cb5c
Merge pull request #344 from legend4tech/Public-Profile-menu-should-a…
Jagadeeshftw Jan 31, 2026
4e06f0e
Merge pull request #337 from walterthesmart/feat/contract-documentati…
Jagadeeshftw Jan 31, 2026
c59bf27
feat: add fuzzing tests contracts
FabianSanchezD Jan 31, 2026
22bbf44
feat: implement fuzz testing
FabianSanchezD Jan 31, 2026
712927d
Merge branch 'master' into feat/fuzzing-property-tests
FabianSanchezD Jan 31, 2026
6774e88
Merge pull request #345 from FabianSanchezD/feat/fuzzing-property-tests
Jagadeeshftw Jan 31, 2026
0fee48f
fix conflict
hakymulla Jan 31, 2026
ad4bc4d
Merge branch 'master' into feat/new-feature-name
soma-enyi Jan 31, 2026
69b3920
feat: implement participant blacklist and whitelist enforcement
Samaro1 Jan 31, 2026
2584139
style: apply code formatting with cargo fmt
Samaro1 Jan 31, 2026
e8dd4f9
docs: reentrancy threat model and audit documentation
Mosas2000 Jan 31, 2026
c41ab59
security: implement reentrancy guard infrastructure
Mosas2000 Jan 31, 2026
7a0cded
security: apply explicit guards to contract entry points
Mosas2000 Jan 31, 2026
27066e6
test: reentrancy attack simulation tests
Mosas2000 Jan 31, 2026
14ae955
Fixed CI test issue
Samaro1 Jan 31, 2026
c52bf85
Merge branch 'master' into feat/cross-contract-standard-interfaces
codebestia Jan 31, 2026
d51bf9b
update
Jan 31, 2026
23beaaf
update
Jan 31, 2026
822936e
Merge pull request #347 from Samaro1/feat/participant-blacklist-white…
Jagadeeshftw Jan 31, 2026
e1829ac
merge: resolve conflicts with upstream/master
Mosas2000 Jan 31, 2026
1fe3b0f
Merge branch 'master' into multiple-token-support
Oluwatos94 Jan 31, 2026
2b17521
Merge branch 'master' into security/reentrancy-guard-audit
Jagadeeshftw Jan 31, 2026
c2be92b
Merge pull request #348 from Mosas2000/security/reentrancy-guard-audit
Jagadeeshftw Jan 31, 2026
25acca8
Merge branch 'master' into feat/cross-contract-standard-interfaces
codebestia Jan 31, 2026
e11a284
Merge pull request #336 from hakymulla/feat/admin-functions
Jagadeeshftw Jan 31, 2026
3c62a9c
Merge branch 'master' into feat/new-feature-name
Jagadeeshftw Jan 31, 2026
88ad478
Merge pull request #333 from soma-enyi/feat/new-feature-name
Jagadeeshftw Jan 31, 2026
83958e4
Merge branch 'master' into feat/cross-contract-standard-interfaces
codebestia Jan 31, 2026
bbeb321
feat(scripts): implement deployment and migration scripts
od-hunter Jan 31, 2026
189472e
Merge pull request #329 from codebestia/feat/cross-contract-standard-…
Jagadeeshftw Jan 31, 2026
43eaa7a
Merge pull request #349 from od-hunter/feat/deployment-migration-scripts
Jagadeeshftw Jan 31, 2026
8fbff8e
Merge branch 'master' into feat/invariant-testing
Jagadeeshftw Jan 31, 2026
79eb768
Merge pull request #339 from Sendi0011/feat/invariant-testing
Jagadeeshftw Jan 31, 2026
88d0860
update
Jan 31, 2026
75ddb22
Merge branch 'master' into multiple-token-support
Jagadeeshftw Jan 31, 2026
ba8536f
Merge pull request #326 from Oluwatos94/multiple-token-support
Jagadeeshftw Jan 31, 2026
9970060
feat: add contract testing utilities and helpers
Tola-byte Jan 31, 2026
f81f300
Merge pull request #351 from Tola-byte/feat/contract-test-utilities
Jagadeeshftw Jan 31, 2026
4e92315
fix: resolve merge conflicts with upstream/master
Feb 3, 2026
fe30e9e
Merge branch 'master' into feat/multisig-large-releases
anumukul Feb 3, 2026
9b1583a
Merge branch 'master' into feat/multisig-large-releases
anumukul Feb 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
29 changes: 16 additions & 13 deletions .github/workflows/contracts-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,14 @@ jobs:
name: Format, Build, Test, and Stellar Build Check
runs-on: macos-latest

defaults:
run:
working-directory: contracts/bounty_escrow

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install Rust
run: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
echo "$HOME/.cargo/bin" >> $GITHUB_PATH

- name: Install Rust target for Soroban
run: |
Expand All @@ -52,41 +48,48 @@ jobs:
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
contracts/**/target/
key: ${{ runner.os }}-cargo-${{ hashFiles('contracts/**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-

- name: Check code formatting
run: |
source $HOME/.cargo/env
cd contracts/escrow
cd contracts/bounty_escrow/contracts/escrow
cargo fmt --check --all

- name: Build contracts
run: |
source $HOME/.cargo/env
cd contracts/escrow
cd bounty_escrow/contracts/escrow
cd contracts/bounty_escrow/contracts/escrow
cargo build --release --target wasm32v1-none

- name: Run tests
run: |
source $HOME/.cargo/env
cd contracts/escrow
cd bounty_escrow/contracts/escrow
cargo test --verbose --lib

- name: Build Soroban contract
run: |
cd contracts/bounty_escrow/contracts/escrow
stellar contract build --verbose

- name: Build Program Escrow contract
run: |
source $HOME/.cargo/env
cd contracts/escrow
cd program-escrow
cargo build --release --target wasm32v1-none
cargo test --verbose --lib
stellar contract build --verbose

- name: Stellar build check
run: |
source $HOME/.cargo/env
# Verify WASM files were generated
echo "Checking for generated WASM files..."
wasm_file="target/wasm32v1-none/release/bounty_escrow.wasm"
wasm_file="contracts/bounty_escrow/target/wasm32v1-none/release/bounty_escrow.wasm"
if [ ! -f "$wasm_file" ]; then
echo "Error: WASM file not found"
echo "Expected: $wasm_file"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/contracts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
- name: Install Rust
run: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
echo "$HOME/.cargo/bin" >> $GITHUB_PATH

- name: Install Rust target for Soroban
run: |
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ contract-issues.md
!.elasticbeanstalk/*.global.yml
wasm_hash.txt

# Node modules
node_modules/

# Deployment Scripts - Sensitive Files
# Keep templates, ignore local overrides
contracts/scripts/config/*.env.local
Expand All @@ -22,3 +25,4 @@ contracts/deployments/*.json
.soroban/
soroban/.soroban/identity/
soroban/.soroban/network/
test_snapshots/
103 changes: 103 additions & 0 deletions ERROR_FIXES_SUMMARY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# Codebase Error Fixes Summary

## Issues Identified and Fixed

### 1. Inconsistent Error Handling
**Problem**: Program-escrow contract used panic-based error handling while bounty-escrow contract used Result-based error handling.

**Fix Applied**:
- Added `Error` enum to program-escrow contract with consistent error codes
- Converted all panic-based functions to use Result-based error handling
- Updated function signatures to return `Result<T, Error>`
- Replaced `panic!()` calls with appropriate `Err(Error::*)` returns
- Updated tests to handle Result-based returns

### 2. Error Enum Standardization
**Problem**: Program-escrow lacked a standardized error enum.

**Fix Applied**:
```rust
#[contracterror]
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
#[repr(u32)]
pub enum Error {
AlreadyInitialized = 1,
NotInitialized = 2,
InsufficientBalance = 3,
Unauthorized = 4,
InvalidAmount = 5,
BatchMismatch = 6,
MetadataTooLarge = 7,
}
```

### 3. Function Signature Updates
**Problem**: Several functions in program-escrow returned direct values instead of Results.

**Functions Fixed**:
- `init_program()` → `Result<ProgramData, Error>`
- `lock_program_funds()` → `Result<ProgramData, Error>`
- `batch_payout()` → `Result<ProgramData, Error>`
- `single_payout()` → `Result<ProgramData, Error>`
- `get_program_info()` → `Result<ProgramData, Error>`
- `get_program_metadata()` → `Result<Option<ProgramMetadata>, Error>`
- `get_program_with_metadata()` → `Result<ProgramWithMetadata, Error>`
- `get_remaining_balance()` → `Result<i128, Error>`
- `set_program_metadata()` → `Result<(), Error>`

### 4. Panic Replacements
**Replaced panic calls with appropriate errors**:
- `panic!("Program already initialized")` → `Err(Error::AlreadyInitialized)`
- `panic!("Amount must be greater than zero")` → `Err(Error::InvalidAmount)`
- `panic!("Program not initialized")` → `Err(Error::NotInitialized)`
- `panic!("Unauthorized: only authorized payout key can trigger payouts")` → `Err(Error::Unauthorized)`
- `panic!("Recipients and amounts vectors must have the same length")` → `Err(Error::BatchMismatch)`
- `panic!("Cannot process empty batch")` → `Err(Error::BatchMismatch)`
- `panic!("Payout amount overflow")` → `Err(Error::InvalidAmount)`
- `panic!("Insufficient balance: requested {}, available {}")` → `Err(Error::InsufficientBalance)`

### 5. Test Updates
**Updated program-escrow tests** to handle Result-based returns:
- Added `.unwrap()` calls where appropriate
- Replaced `std::panic::catch_unwind` with `try_*` client methods
- Updated assertions to check specific error types
- Maintained test coverage for all error conditions

## Benefits of Fixes

### 1. Consistency
- Both contracts now use the same error handling pattern
- Predictable error types across the codebase
- Easier maintenance and debugging

### 2. Better Error Reporting
- Specific error codes instead of generic panics
- More informative error messages
- Better integration with calling applications

### 3. Improved Reliability
- Graceful error handling instead of contract termination
- Better resource cleanup on errors
- More robust contract behavior

### 4. Enhanced Developer Experience
- Clearer function contracts (explicit Result returns)
- Better documentation of possible error conditions
- Easier testing of error scenarios

## Files Modified

1. `contracts/program-escrow/src/lib.rs`
- Added Error enum
- Updated function signatures
- Replaced panic calls with Result returns
- Updated documentation

2. `contracts/program-escrow/tests/metadata_tests.rs`
- Updated test assertions
- Replaced panic-based tests with Result-based tests
- Maintained full test coverage

## Verification

All changes maintain backward compatibility for successful operations while providing better error handling for failure cases. The contracts now follow consistent patterns that make them more robust and easier to integrate with.
Loading