# Safe (Gnosis Safe) Multisig — Developer Guide > Safe is the most widely used smart account / multisig on EVM chains. Supports 15+ networks. ## Creating a 2/3 Multisig (Minimal Steps) ```typescript import Safe, { SafeFactory } from '@safe-global/protocol-kit' // Step 1: Prepare 3 owner addresses const owners = ['0xOwner1...', '0xOwner2...', '0xOwner3...'] const threshold = 2 // 2-of-3 // Step 2: Deploy via SafeFactory const safeFactory = await SafeFactory.create({ provider, signer }) const safeAccountConfig = { owners, threshold } const safeSdk = await safeFactory.deploySafe({ safeAccountConfig }) const safeAddress = await safeSdk.getAddress() console.log('Safe deployed at:', safeAddress) ``` Or use the **safe.global** web UI: connect wallet → New Safe → Add owners → Set threshold → Deploy. ## Proposing and Confirming Transactions ```typescript import SafeApiKit from '@safe-global/api-kit' const apiKit = new SafeApiKit({ chainId: 1n }) // Propose a transaction (owner 1) const safeTransactionData = { to: recipientAddress, value: '100000000000000000', // 0.1 ETH in wei data: '0x', } const safeTransaction = await safeSdk.createTransaction({ transactions: [safeTransactionData] }) const safeTxHash = await safeSdk.getTransactionHash(safeTransaction) const signature = await safeSdk.signHash(safeTxHash) await apiKit.proposeTransaction({ safeAddress, safeTransactionData: safeTransaction, safeTxHash, senderSignature: signature, senderAddress }) // Confirm (owner 2 signs) const signature2 = await safeSdk2.signHash(safeTxHash) await apiKit.confirmTransaction(safeTxHash, signature2.data) // Execute after threshold reached await safeSdk.executeTransaction(safeTransaction) ``` ## Key Concepts | Concept | Description | |---------|-------------| | threshold | Min signatures required to execute (e.g. 2 of 3) | | owners | EOAs or smart contracts that can sign | | SafeFactory | Deploys new Safe proxies via CREATE2 (deterministic address) | | Safe Transaction Service | Off-chain API for collecting signatures | | Modules | Optional extensions (spending limits, recovery, etc.) | | Guards | Pre/post-execution hooks for custom validation | ## EIP-1271 Signature Validation Safe implements EIP-1271 — contracts can verify Safe signatures on-chain: ```solidity bytes4 result = ISafe(safeAddress).isValidSignature(hash, signatures); require(result == 0x1626ba7e, "Invalid signature"); ``` ## Supported Networks Mainnet, Arbitrum, Optimism, Polygon, Base, BNB Chain, Avalanche, Gnosis Chain, zkSync, Scroll, Linea, Celo, Blast, Mantle, and more. ## Installation ```bash npm install @safe-global/protocol-kit @safe-global/api-kit @safe-global/types-kit ```