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:
- Near Account produces signatures for a deterministic EOA via Near's MPC Contract for Chain Signatures
- This EOA (controled by the Near Account) is the owner of a deterministic Safe with configured support for ERC4337 standard.
- 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.
- No need to fund the EOA Account (it is only used for signatures).
- 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.
- Paymaster Support for an entirely gasless experience!
- Same address on all chains!
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:
ETH_RPC=https://rpc2.sepolia.org
NEAR_ACCOUNT_ID=
NEAR_ACCOUNT_PRIVATE_KEY=
# Head to https://www.pimlico.io/ for an API key
ERC4337_BUNDLER_URL=
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>
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.