Skip to content

Commit 85d5bc9

Browse files
committed
docs(Modules): added module userguide
1 parent 0c47e93 commit 85d5bc9

2 files changed

Lines changed: 58 additions & 0 deletions

File tree

docs/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- transactions
55
- safe_management
66
- multisend
7+
- modules
78
:commands:
89
- mgmt
910
- pending

docs/userguides/modules.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# Modules
2+
3+
The modules feature of your Safe account allows you to manage "extensions" to the behavior of your Safe,
4+
unlocking the ability to support automated actions or custom transaction logic _without signer approval_.
5+
6+
```{warning}
7+
Safe Modules can be very dangerous to enable on your Safe, as it allows the Module
8+
(and accounts with access to the Module) to completely bypass the authentication logic in your Safe smart contract.
9+
Use at your own risk.
10+
```
11+
12+
```{note}
13+
Read more about Safe Modules in the [docs](https://docs.safe.global/advanced/smart-account-modules).
14+
```
15+
16+
## Basic Usage
17+
18+
To enable or disable a Module in your Safe, you can do so via:
19+
20+
```python
21+
from ape import accounts
22+
from ape_safe import multisend
23+
from ape_tokens import tokens
24+
25+
me = accounts.load("my-key")
26+
safe = accounts.load("my-safe")
27+
28+
module = Contract(...) # NOTE: Deploy it yourself, or use vetted Safe modules
29+
30+
# Check if module is enabled
31+
assert module not in safe.modules
32+
33+
# Then add it
34+
receipt = safe.modules.enable(module, submitter=me)
35+
assert module in safe.modules
36+
37+
# You can always disable it later
38+
receipt = safe.modules.disable(module, submitter=me)
39+
```
40+
41+
## Advanced Usage
42+
43+
Safe Modules also come with a Module Guard functionality, similiar to your Safe's Guard functionality.
44+
45+
To set (or unset) a Module Guard, do so via:
46+
47+
```python
48+
guard = Contract(...) # NOTE: Deploy it yourself, or use a vetted Safe Module Guard
49+
50+
assert not safe.modules.guard # NOTE: Not set by default
51+
52+
# Add a Module Guard
53+
safe.modules.set_guard(guard, submitter=me)
54+
55+
# Remove a Module Guard
56+
safe.modules.remove_guard(submitter=me)
57+
```

0 commit comments

Comments
 (0)