Live#…
Reading the chain…
Network now · GullyChain Testnet
Block
—
Txs · 30 blocks
—
Gas, gwei
—
Launches
—

Gully Safe

On this page

Live

Live on testnet. safe.gullychain.xyz runs the Safe{Wallet} app, Gully's own Safe backend and the Safe 1.4.1 contracts on GullyChain Testnet (chain 485590). Test funds only.

Gully Safe is a Safe multisig for teams, treasuries and DAOs on GullyChain: several owners, a confirmation threshold, batched transactions and an on-chain record of every confirmation. It is the Safe product you know, branded for GullyChain.

#What runs where

Piece What
App safe.gullychain.xyz: a fork of the Safe{Wallet} web app with GullyChain as its network
Backend Gully's own Safe transaction service, config service and client gateway, indexing chain 485590
Contracts Safe 1.4.1 and the Safe passkey modules, unmodified code and salts, at Gully's own addresses (below)
Sponsored gas Safe accounts can run as ERC-4337 accounts through the Safe 4337 module, the Alto bundler and the Gully paymaster (Accounts and passkeys)

#Why the addresses differ

Safe's canonical addresses come from Safe's signed singleton factory, which the Safe team deploys per chain on request. It is not on GullyChain yet (Not deployed yet). So Gully Labs replayed the exact canonical deployments (same creation code, same salts) through the Arachnid CREATE2 factory. The code is byte-for-byte Safe's audited code; only the deployer, and therefore the address, differs.

Heads up

Pass the Gully addresses to Safe tooling explicitly. Libraries that look up Safe's canonical addresses for a chain ID will not find GullyChain, and calls to the canonical 1.4.1 addresses on chain 485590 hit empty accounts.

#Contracts

Contract Address
Safe 1.4.1 (singleton) 0x639245e8476E03e789a244f279b5843b9633b2E7
SafeL2 1.4.1 (singleton used by every Gully Safe) 0x76667330c237Fb40f28d74563cdAAae4b06C23Ec
SafeProxyFactory 1.4.1 0xd9d2Ba03a7754250FDD71333F444636471CACBC4
CompatibilityFallbackHandler 1.4.1 0xcB4a8d3609A7CCa2D9c063a742f75c899BF2f7b5
MultiSend 1.4.1 0x7B21BBDBdE8D01Df591fdc2dc0bE9956Dde1e16C
MultiSendCallOnly 1.4.1 0x32228dDEA8b9A2bd7f2d71A958fF241D79ca5eEC
SignMessageLib 1.4.1 0x309C7b0A0D2f250Be322739753386911E1187C4E
CreateCall 1.4.1 0x8BbCaE989A0Bdf15c8E783357a0E5848e36233d0
SafeWebAuthnSharedSigner 0.2.1 (passkey owners) 0xB3a6Aa3eDDD715dbD84aD465Ab0f98919eBB6d5C
SafeWebAuthnSignerFactory 0.2.1 0xfF25690FC38De1572c2C8075966Bb813f60a095F
Safe4337Module 0.3.0 (canonical address) 0x75cf11467937ce3F2f357CE24ffc3DBF8fD5c226
SafeModuleSetup 0.3.0 (canonical address) 0x2dd68b007B46fBe91B9A7c3EDa5A7a1063cB5b47

The rest of the suite (SimulateTxAccessor, SafeToL2Setup, SafeToL2Migration, TokenCallbackHandler) is on Contract addresses.

#Passkey owners

The Safe passkey modules are deployed, so a passkey can be a Safe owner: SafeWebAuthnSignerFactory creates a signer contract for a passkey's public key, and SafeWebAuthnSharedSigner lets a new Safe use a passkey owner from its first transaction. P-256 signatures verify through the RIP-7212 precompile (0x…0100, GullyChain runs ArbOS 51) with the Daimo verifier at 0xc2b78104907F722DABAc4C69f826a522B2754De4 as the fallback.

#Use Gully Safe from code

With permissionless.js on viem, pass the Gully addresses:

TypeScript
import { toSafeSmartAccount } from "permissionless/accounts";

const safe = await toSafeSmartAccount({
  client: publicClient,                       // a viem client on chain 485590
  owners: [owner],
  version: "1.4.1",
  entryPoint: { address: "0x0000000071727De22E5E9d8BAf0edAc6f37da032", version: "0.7" },
  safeSingletonAddress: "0x76667330c237Fb40f28d74563cdAAae4b06C23Ec",   // SafeL2 1.4.1
  safeProxyFactoryAddress: "0xd9d2Ba03a7754250FDD71333F444636471CACBC4",
  multiSendAddress: "0x7B21BBDBdE8D01Df591fdc2dc0bE9956Dde1e16C",
  multiSendCallOnlyAddress: "0x32228dDEA8b9A2bd7f2d71A958fF241D79ca5eEC",
  safe4337ModuleAddress: "0x75cf11467937ce3F2f357CE24ffc3DBF8fD5c226",
  safeModuleSetupAddress: "0x2dd68b007B46fBe91B9A7c3EDa5A7a1063cB5b47",
});

Then use it with a smart account client on the bundler and paymaster, exactly like a Kernel account. Check the option names against the permissionless.js version you install.

#Not available yet

  • Spending limits. The Safe AllowanceModule is not deployed, so the spending-limit feature is off in the app.
  • Canonical addresses. If the Safe team deploys its singleton factory on GullyChain, the canonical addresses can be deployed next to these. Existing Gully Safes keep working at their addresses.