Skip to content

An SDK for controlling Ethereum Smart Accounts via ERC4337 from a Near Account.

Notifications You must be signed in to change notification settings

BitteProtocol/near-safe

Repository files navigation

Near-Safe

TLDR; This project provides a TypeScript implementation for controling Ethereum Smart Accounts via ERC4337 standard from a Near Account. It includes utilities for packing data, managing transactions, and interacting with a bundler.

The account structure is defined as follows:

  1. Near Account produces signatures for a deterministic EOA via Near's MPC Contract for Chain Signatures
  2. This EOA (controled by the Near Account) is the owner of a deterministic Safe with configured support for ERC4337 standard.

Features

  1. Users first transaction is bundled together with the Safe's deployement (i.e. Safe does not need to be created before it is used). This is achived as multisend transaction.
  2. No need to fund the EOA Account (it is only used for signatures).
  3. Account Recovery: Near's MPC service provides signatures for accounts that users control, but do not hold the private key for. Provide a "recoveryAddress" that will be added as an additional owner of the Safe.
  4. Paymaster Support for an entirely gasless experience!
  5. Same address on all chains!

Installation & Configuration

To get started, clone the repository and install the dependencies:

yarn install

Create a .env (or use our .env.sample) file in the root of the project and add the following environment variables:

NEAR_ACCOUNT_ID=
# Head to https://www.pimlico.io/ for an API key
PIMLICO_KEY=

To use the CLI tool provided here in examples/* you will also need to provide a privateKey for your Near account.

NEAR_ACCOUNT_PRIVATE_KEY=

Usage

Running the Example

The example script examples/send-tx.ts demonstrates how to use the transaction manager. You can run it with the following command:

yarn start --usePaymaster --recoveryAddress <recovery_address> --safeSaltNonce <safe_salt_nonce>

Example Arguments

The example script accepts the following arguments:

  • --usePaymaster: Boolean flag to indicate if the transaction should be sponsored by a paymaster service.
  • --recoveryAddress: The recovery address to be attached as the owner of the Safe (immediately after deployment).
  • --safeSaltNonce: The salt nonce used for the Safe deployment.