Skip to content

Multisig wallet contract#558

Merged
Xhristin3 merged 6 commits into
Gatheraa:mainfrom
clintjeff2:multisig-wallet-contract
Jun 25, 2026
Merged

Multisig wallet contract#558
Xhristin3 merged 6 commits into
Gatheraa:mainfrom
clintjeff2:multisig-wallet-contract

Conversation

@clintjeff2

Copy link
Copy Markdown
Contributor

The MultisigWalletContract has been transformed from a "Not Implemented" skeleton into a fully functional and secure multi-signature wallet.

Key Changes:

  • State Management: Implemented initialize, submit_transaction, approve_transaction, and execute_transaction with robust state transitions (Pending -> Approved -> Executed/Expired).
  • Execution Engine: Transactions now perform actual contract calls using env.invoke_contract once the required threshold is met.
  • Secure Governance: Methods like add_owner, remove_owner, and change_threshold now require authentication from the contract itself, meaning they are only reachable through the multisig's own execution path.
  • No-std Compatibility: Refined ID generation to use a persistent counter, avoiding format! and ensuring compatibility with Soroban's WASM target.
  • Security Enhancements:
    • Re-entrancy protection by updating status before external calls.
    • Prevention of self-approvals (creators cannot approve their own transactions).
    • Threshold and owner validation during initialization and owner management.
  • Testing: Re-aligned and expanded the security test suite to cover re-entrancy, unauthorized access, and governance reachability. All tests pass.

Closes #500

Copy link
Copy Markdown
Contributor

Multisig wallet contract @clintjeff2 is solid work, appreciate it ✅ Merging!

Copy link
Copy Markdown
Contributor

@clintjeff2 — quick follow-up: real merge conflicts against main now. Please rebase onto main and I'll merge on the next push. 🙏

- Replaced skeleton methods with full state machine logic.
- Implemented actual contract invocation in `execute_transaction`.
- Secured governance methods with internal-only access via multisig.
- Added counter-based unique transaction IDs (no-std compatible).
- Added rejection for self-approvals.
- Implemented comprehensive security and logic tests.

Co-authored-by: clintjeff2 <119521983+clintjeff2@users.noreply.github.com>
@clintjeff2 clintjeff2 force-pushed the multisig-wallet-contract branch from 98be7f0 to 657052a Compare June 24, 2026 21:23
@clintjeff2 clintjeff2 force-pushed the multisig-wallet-contract branch from 334bd6b to 2205cb8 Compare June 24, 2026 21:55
@clintjeff2

Copy link
Copy Markdown
Contributor Author

@Xhristin3 please review and merge. If there is a way to review contributors, I'd have loved to get one

@Xhristin3

Copy link
Copy Markdown
Contributor

@Xhristin3 please review and merge. If there is a way to review contributors, I'd have loved to get one

I sure will. Thanks.

@Xhristin3 Xhristin3 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM

@Xhristin3 Xhristin3 merged commit f840562 into Gatheraa:main Jun 25, 2026
11 checks passed
@clintjeff2

Copy link
Copy Markdown
Contributor Author

@Xhristin3 More issues please

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[contract][multisig] Implement multisig wallet contract entry points

2 participants