ape-safe


Nameape-safe JSON
Version 0.8.5 PyPI version JSON
download
home_pagehttps://github.com/ApeWorX/ape-safe
Summaryape-safe: Gnosis Safe account plugin for Ape
upload_time2024-12-17 03:41:07
maintainerNone
docs_urlNone
authorApeWorX Ltd.
requires_python<4,>=3.9
licenseApache-2.0
keywords ethereum
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Quick Start

Account plugin for the [Safe](https://safe.global//) Multisig wallet (previously known as Gnosis Safe).

## Dependencies

- [python3](https://www.python.org/downloads) version 3.9 up to 3.12.

## Installation

### via `ape`

You can install using the [ape](https://github.com/ApeWorX/ape) built-in plugin manager:

```bash
$ ape plugins install safe
```

### via `pip`

You can install the latest release via [`pip`](https://pypi.org/project/pip/):

```bash
$ pip install ape-safe
```

### via `setuptools`

You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:

```bash
$ git clone https://github.com/ApeWorX/ape-safe.git
$ cd ape-safe
$ python3 setup.py install
```

## Quick Usage

To use the plugin, first use the CLI extension to add a safe you created:

```sh
ape safe add --network ethereum:mainnet "my-safe.eth" my-safe
```

If you made a mistake or just need to remove the safe, use the `remove` command:

```sh
ape safe remove my-safe --yes
```

**NOTE** `--yes` is a way to skip the prompt.

If you only add one safe, you will not have to specify which safe to use other commands.
Otherwise, for most `pending` commands, you specify the safe to use (by alias) via the `--safe` option.

Additionally, you can configure a safe to use as the default in your `ape-config.yaml` file:

```yaml
safe:
  default_safe: my-safe
```

**NOTE**: Also, to avoid always needing to specify `--network`, you can set a default ecosystem, network, and provider in your config file.
The rest of the guide with not specify `--network` on each command but assume the correct one is set in the config file.
Here is an example:

```yaml
default_ecosystem: optimism

ethereum:
  default_network: sepolia
  sepolia:
    default_provider: infura
```

Once you have a safe, you can view pending transactions:

```sh
ape safe pending list
```

It should show transactions like this:

```sh
Transaction 8 rejection (1/2) safe_tx_hash=0x09ab9a229fc60da66ec0fa8fa886ab7c95902fdf5df5a5009ba06010fbb9a9a7
Transaction 8 transfer  (1/2) safe_tx_hash=0xed43d80255bcd5ffacb755e8f51bee825913373705d6baea006419d2a33a0a5b
```

**NOTE**: Use the `--verbose` flag to see more information about each transaction.

```sh
ape safe pending list --verbose
```

There are several operations you can do on a pending transaction.
One of them is "approve" which adds your local signers' signatures to the transaction.

```sh
ape safe pending approve 0x09ab9a229fc60da66ec0fa8fa886ab7c95902fdf5df5a5009ba06010fbb9a9a7
```

**NOTE**: Here we are using the transaction hash `0x09ab9a229fc60da66ec0fa8fa886ab7c95902fdf5df5a5009ba06010fbb9a9a7` to specify the transaction because there are more than one.
However, you can also use the nonce if there is only a single transaction.

If you want to both execute and approve at the same time, you can use the `--execute` option on approve and specify a sender:

```sh
ape safe pending approve 2 --execute my_account
```

Else, you can use the `execute` command directly:

```sh
ape safe pending execute 2
```

**NOTE**: `execute` requires a full signed transaction ready to be submitted on-chain.

The last main operation is `reject`.
Rejecting a transaction replaces that transaction with a zero-value transfer from the safe to itself.

```sh
ape safe pending reject 2
```

### Multisend

The following example shows how to use multisend:

```python
from ape_safe import multisend
from ape import accounts
from ape_tokens import tokens

safe = accounts.load("my-safe")

# Load some contracts (here using ape-tokens)
dai = tokens["DAI"]
vault = tokens["yvDAI"]
amount = dai.balanceOf(safe)  # How much we want to deposit

# Create a multisend transaction (a transaction that executes multiple calls)
txn = multisend.MultiSend()
txn.add(dai.approve, vault, amount)
txn.add(vault.deposit, amount)

# Fetch signatures from any local signers, and broadcast if confirmations are met
# Note that in case the user intends to only stage a transaction, then `submit=False` argument can also be added
# It is normal that when a user only intend to stage a transaction, an error is thrown
# this can be ignored by including the necessary try-catch (from ape.exceptions import SignatureError)
# Note that transaction is automatically prompted for execution if enough signers are available in local
txn(sender=safe,gas=0)
```

## Development

Please see the [contributing guide](CONTRIBUTING.md) to learn more how to contribute to this project.
Comments, questions, criticisms and pull requests are welcomed.

## Acknowledgements

This package was inspired by [the original ape-safe](https://github.com/banteg/ape-safe#readme) by [banteg](https://github.com/banteg).
For versions prior to v0.6.0, the original package should be referenced.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/ApeWorX/ape-safe",
    "name": "ape-safe",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4,>=3.9",
    "maintainer_email": null,
    "keywords": "ethereum",
    "author": "ApeWorX Ltd.",
    "author_email": "admin@apeworx.io",
    "download_url": "https://files.pythonhosted.org/packages/0f/5d/d316399dc94dc11398772c237c32508dee2b9224092d9ff4e03f073ab8a6/ape_safe-0.8.5.tar.gz",
    "platform": null,
    "description": "# Quick Start\n\nAccount plugin for the [Safe](https://safe.global//) Multisig wallet (previously known as Gnosis Safe).\n\n## Dependencies\n\n- [python3](https://www.python.org/downloads) version 3.9 up to 3.12.\n\n## Installation\n\n### via `ape`\n\nYou can install using the [ape](https://github.com/ApeWorX/ape) built-in plugin manager:\n\n```bash\n$ ape plugins install safe\n```\n\n### via `pip`\n\nYou can install the latest release via [`pip`](https://pypi.org/project/pip/):\n\n```bash\n$ pip install ape-safe\n```\n\n### via `setuptools`\n\nYou can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version:\n\n```bash\n$ git clone https://github.com/ApeWorX/ape-safe.git\n$ cd ape-safe\n$ python3 setup.py install\n```\n\n## Quick Usage\n\nTo use the plugin, first use the CLI extension to add a safe you created:\n\n```sh\nape safe add --network ethereum:mainnet \"my-safe.eth\" my-safe\n```\n\nIf you made a mistake or just need to remove the safe, use the `remove` command:\n\n```sh\nape safe remove my-safe --yes\n```\n\n**NOTE** `--yes` is a way to skip the prompt.\n\nIf you only add one safe, you will not have to specify which safe to use other commands.\nOtherwise, for most `pending` commands, you specify the safe to use (by alias) via the `--safe` option.\n\nAdditionally, you can configure a safe to use as the default in your `ape-config.yaml` file:\n\n```yaml\nsafe:\n  default_safe: my-safe\n```\n\n**NOTE**: Also, to avoid always needing to specify `--network`, you can set a default ecosystem, network, and provider in your config file.\nThe rest of the guide with not specify `--network` on each command but assume the correct one is set in the config file.\nHere is an example:\n\n```yaml\ndefault_ecosystem: optimism\n\nethereum:\n  default_network: sepolia\n  sepolia:\n    default_provider: infura\n```\n\nOnce you have a safe, you can view pending transactions:\n\n```sh\nape safe pending list\n```\n\nIt should show transactions like this:\n\n```sh\nTransaction 8 rejection (1/2) safe_tx_hash=0x09ab9a229fc60da66ec0fa8fa886ab7c95902fdf5df5a5009ba06010fbb9a9a7\nTransaction 8 transfer  (1/2) safe_tx_hash=0xed43d80255bcd5ffacb755e8f51bee825913373705d6baea006419d2a33a0a5b\n```\n\n**NOTE**: Use the `--verbose` flag to see more information about each transaction.\n\n```sh\nape safe pending list --verbose\n```\n\nThere are several operations you can do on a pending transaction.\nOne of them is \"approve\" which adds your local signers' signatures to the transaction.\n\n```sh\nape safe pending approve 0x09ab9a229fc60da66ec0fa8fa886ab7c95902fdf5df5a5009ba06010fbb9a9a7\n```\n\n**NOTE**: Here we are using the transaction hash `0x09ab9a229fc60da66ec0fa8fa886ab7c95902fdf5df5a5009ba06010fbb9a9a7` to specify the transaction because there are more than one.\nHowever, you can also use the nonce if there is only a single transaction.\n\nIf you want to both execute and approve at the same time, you can use the `--execute` option on approve and specify a sender:\n\n```sh\nape safe pending approve 2 --execute my_account\n```\n\nElse, you can use the `execute` command directly:\n\n```sh\nape safe pending execute 2\n```\n\n**NOTE**: `execute` requires a full signed transaction ready to be submitted on-chain.\n\nThe last main operation is `reject`.\nRejecting a transaction replaces that transaction with a zero-value transfer from the safe to itself.\n\n```sh\nape safe pending reject 2\n```\n\n### Multisend\n\nThe following example shows how to use multisend:\n\n```python\nfrom ape_safe import multisend\nfrom ape import accounts\nfrom ape_tokens import tokens\n\nsafe = accounts.load(\"my-safe\")\n\n# Load some contracts (here using ape-tokens)\ndai = tokens[\"DAI\"]\nvault = tokens[\"yvDAI\"]\namount = dai.balanceOf(safe)  # How much we want to deposit\n\n# Create a multisend transaction (a transaction that executes multiple calls)\ntxn = multisend.MultiSend()\ntxn.add(dai.approve, vault, amount)\ntxn.add(vault.deposit, amount)\n\n# Fetch signatures from any local signers, and broadcast if confirmations are met\n# Note that in case the user intends to only stage a transaction, then `submit=False` argument can also be added\n# It is normal that when a user only intend to stage a transaction, an error is thrown\n# this can be ignored by including the necessary try-catch (from ape.exceptions import SignatureError)\n# Note that transaction is automatically prompted for execution if enough signers are available in local\ntxn(sender=safe,gas=0)\n```\n\n## Development\n\nPlease see the [contributing guide](CONTRIBUTING.md) to learn more how to contribute to this project.\nComments, questions, criticisms and pull requests are welcomed.\n\n## Acknowledgements\n\nThis package was inspired by [the original ape-safe](https://github.com/banteg/ape-safe#readme) by [banteg](https://github.com/banteg).\nFor versions prior to v0.6.0, the original package should be referenced.\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "ape-safe: Gnosis Safe account plugin for Ape",
    "version": "0.8.5",
    "project_urls": {
        "Homepage": "https://github.com/ApeWorX/ape-safe"
    },
    "split_keywords": [
        "ethereum"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "aba297e21ab46eb10450b9c94a9fc2eba2a04738215370cd47979a1c88ec0255",
                "md5": "18de605895837f37ca8b6b161d345f1f",
                "sha256": "0a9d6c369a054c472d7369146b49b7e6cb5de2763313b552948e8e673aa43cfb"
            },
            "downloads": -1,
            "filename": "ape_safe-0.8.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "18de605895837f37ca8b6b161d345f1f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4,>=3.9",
            "size": 38154,
            "upload_time": "2024-12-17T03:41:04",
            "upload_time_iso_8601": "2024-12-17T03:41:04.608715Z",
            "url": "https://files.pythonhosted.org/packages/ab/a2/97e21ab46eb10450b9c94a9fc2eba2a04738215370cd47979a1c88ec0255/ape_safe-0.8.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0f5dd316399dc94dc11398772c237c32508dee2b9224092d9ff4e03f073ab8a6",
                "md5": "230228d73660bc576be4e7f1af5eb5de",
                "sha256": "ca54fc69a892f30cc04a51cdf86cdeb9b49fd682a2b40f3f7dc802261e274406"
            },
            "downloads": -1,
            "filename": "ape_safe-0.8.5.tar.gz",
            "has_sig": false,
            "md5_digest": "230228d73660bc576be4e7f1af5eb5de",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4,>=3.9",
            "size": 94823,
            "upload_time": "2024-12-17T03:41:07",
            "upload_time_iso_8601": "2024-12-17T03:41:07.144372Z",
            "url": "https://files.pythonhosted.org/packages/0f/5d/d316399dc94dc11398772c237c32508dee2b9224092d9ff4e03f073ab8a6/ape_safe-0.8.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-17 03:41:07",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ApeWorX",
    "github_project": "ape-safe",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "ape-safe"
}
        
Elapsed time: 0.42237s