Overview
Ruffsack: A rugged multisig wallet for everyday adventures
Design
Ruffsack is a simple, yet flexible, multi-owner smart contract wallet designed for high-value, day-to-day activities. It is designed to support multiple users (up to 11) working together to co-sign and execute important transactions.
Out of the box, Ruffsack is designed to be used via RuffsackProxy,
which is a simple, upgradeable forwarding proxy that calls (via delegateproxy)
to a singleton deployment of Ruffsack.
It is only designed to be used via the Proxy, as it is intended to be a long-term stateful contract containing important assets
that we don't want to lose when upgrading to a newer version of the code.
The singleton deployment is deployed once per chain and is used as that chain's official copy of that particular version.
The versioning of this repo matches the versioning of the deployments on-chain, where the git tag should match 1:1 to
the value of VERSION() on the singleton (as well as your personal proxy).
There are two types of EIP712 structures used within Ruffsack: Update and Execute.
They are designed to ensure that only important administrative updates occur via Update,
and common, non-admin transactions occur via Execute.
This is done to create a physical separation between critical, configuration-modifying transactions, and non-critical ones.
It is highly recommended to downstream signing infra that works w/ Ruffsack to create a clear UX distinction between
these two types of calls, making it clear that critical actions can impact the operational safety of Ruffsack.
Additionally, both types of transactions have "Guards" which are 3rd party contracts that should implement pre- and post-execution
checks on their respective transaction types.
Use cases for Guards can include (for admin Updates) adding timelocked update restrictions, blacklisting certain addresses,
or (for normal Executes) adding per diem limits on asset transfers, restricting calls to certain contracts, etc.
Having two separate Guards, one for each transaction type, is useful because an Execute Guard being non-functional does
not represent an existential threat to the operation of the wallet, only with an Update Guard.
This should encourage the use of Guards for proper operation of the wallet in day-to-day operational scenarios,
increasing overall safety when using Ruffsack.
Finally, Ruffsack implements "Modules" which are contracts that can be enabled in the wallet (through an Update action)
that are allowed to bypass the signer signature check when commiting arbitrary Execute transactions.
This functionality is extremely useful for adding automation to your day-to-day operations, making your operation of the
wallet safer and less prone to social engineering exploits.
Technically, while it is possible to use Ruffsack for a "personal" multisig (where you own all the signers on the wallet),
it is suggested to make use of something like Purse (with a secure cold wallet instead)
to add automation and advanced capabilities to your personal, high-valued wallets.
Ruffsack is inspired by Safe Smart Account.
Contributing
This project is written in Vyper.
This project uses ape to compile, test and script it.
See the Installation Guide for help installing it.
Metadata
Release files for ruffsack 0.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ruffsack-0.0.0.tar.gz | 7.1 kB | Without provenance | Details for ruffsack-0.0.0.tar.gz |
Release files / ruffsack-0.0.0.tar.gz
| Download URL | ruffsack-0.0.0.tar.gz |
|---|---|
| Size | 7.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a6fb916ae23acd8b1a8d106145cfe0ac7ec65a57c9aa3375be8e1ddec717bb4e
|
|
BLAKE2b-256 checksum How to use checksums |
4aec7a4fcec75e81614e8bde022580ba00ebaa5ced707f5107ab34e44010c0ea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Security for ruffsack 0.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.