Skip to content

zscole/safe-message-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Safe Tools

The easiest way to sign and verify messages with your Gnosis Safe. Built for simple, reliable message signing with an authentic retro terminal interface. Features EIP-712 message signing, EIP-1271 verification, and MEW/MyCrypto-compatible output formats.

Live App License: MIT

🚀 Quick Start

Use the Safe App

  1. Go to app.safe.global
  2. Open the Apps tab in your Safe
  3. Click Add Custom App
  4. Paste: https://www.safetools.io

Once added, Safe Tools will appear in your Safe's app drawer for easy message signing.

Install CLI Tools

npm install -g safe-message-tools

🎯 What it's for

  • Sign messages from your Safe
  • Authenticate with apps and services
  • Prove Safe ownership onchain or offchain
  • Generate verifiable signatures for any use case

🛠️ Usage

Safe App Interface

The web interface provides an authentic retro terminal experience for signing messages directly from your Safe:

  • Retro terminal UI: Authentic 80s hacker aesthetic with scanlines and terminal effects
  • Simple workflow: Enter any message, approve the Safe transaction, get verifiable results
  • Multiple output formats: Standard signature + MEW/MyCrypto-compatible JSON
  • Copy-to-clipboard: One-click copying for all signature data and JSON formats
  • Multi-signature support: Automatically handles Safe threshold requirements (2/3, 3/5, etc.)
  • EIP-1271 verification: Onchain signature validation using Safe's SignMessageLib contract

CLI Tools

For developers and automation:

# Sign with private key
safe-sign --safe 0x... --key 0x... --message "Hello World" --rpc https://...

# Verify signature onchain
safe-verify --safe 0x... --signature 0x... --message "Hello World" --rpc https://... --onchain

# Hardware wallet signing (Ledger)
safe-hw --safe 0x... --message "Hello World" --rpc https://...

# Coordinate multiple signatures  
safe-collect --safe 0x... --message "Hello World" --rpc https://... --sig 0x... --signer 0x...

🏗️ How it works

Safe Tools uses the official Safe SignMessageLib contract and EIP-1271 standard:

  1. EIP-712 hashing: Messages are hashed using Safe's domain separator for security
  2. Onchain transaction: Creates a transaction to SignMessageLib contract (0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
  3. Multi-signature coordination: Safe interface handles threshold requirements automatically
  4. Dual output formats: Standard signature + MEW/MyCrypto-compatible JSON for broad compatibility
  5. EIP-1271 verification: Onchain signature validation that any service can verify
  6. Cross-platform support: Works in Safe Apps interface and as standalone CLI tools

🔧 Development

Repository Structure

├── safe-app/          # Safe App (React + Vite)
├── cli/               # Command-line tools  
├── lib/               # Shared utilities
└── package.json       # CLI package configuration

Local Development

# Clone repository
git clone https://github.com/zscole/safe-message-cli.git
cd safe-message-cli

# Install dependencies
npm run install-all

# Start development server
npm run dev

The Safe App will be available at http://localhost:5174 - add this URL as a custom app in your Safe interface for testing.

Building

# Build Safe App for production
npm run build

# Install CLI tools globally from source
npm install -g .

📋 Output Formats

Standard Signature Output

  • Original message text
  • Safe address used for signing
  • Signature/transaction hash
  • EIP-1271 verification status

MEW/MyCrypto-Compatible JSON

{
  "address": "0x9CFe9dc15b6cA16147dF1b93E487bAaDd422F693",
  "msg": "Prove ownership of Safe for domain verification", 
  "sig": "0xbfddd739e0a9a49d6885ccded16267760649505bdd589703cc833364904a9e4c",
  "version": "2"
}

📋 Standards

  • EIP-712: Typed data signing with Safe domain separation
  • EIP-1271: Onchain signature verification standard
  • Safe Apps SDK: Official integration with Safe interface
  • MEW/MyCrypto: Compatible JSON signature format
  • Browser compatible: No Node.js dependencies in web interface

🛡️ Security

  • Uses official Safe SignMessageLib contract (0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
  • No custom smart contracts deployed
  • All operations require Safe owner approval
  • Open source and auditable code

📄 License

MIT License - see LICENSE file for details.

🔗 Links


Built by Zak Cole at Number Group