Chain Module Architecture
Each blockchain requires a specialized module to parse its unique transaction format into VisualSign JSON. This section explains the architecture and design patterns used across all chain modules.
See our comprehensive Adding a New Chain guide for step-by-step instructions on integrating your blockchain into VisualSign.
Core Architecture
All chain modules implement two core traits that define the parsing and conversion interface:
/// Trait for blockchain transactions that can be parsed from raw data
pub trait Transaction: Debug + Clone {
/// Parse a transaction from a string representation (hex, base64, etc.)
fn from_string(data: &str) -> Result<Self, TransactionParseError>
where
Self: Sized;
/// Get the transaction type name (e.g., "Solana", "Ethereum", "Bitcoin")
fn transaction_type(&self) -> String;
}
/// Trait for converting parsed transactions to VisualSign format
pub trait VisualSignConverter<T: Transaction> {
fn to_visual_sign_payload(
&self,
transaction: T,
options: VisualSignOptions,
) -> Result<SignablePayload, VisualSignError>;
}
Each chain module implements these traits:
- Transaction - Handles parsing raw transaction bytes into chain-specific structures
- VisualSignConverter - Transforms parsed transactions into the VisualSign JSON format
Key Design Principles
1. Progressive Disclosure
Show the most important information first, with details available on demand through expandable sections.
2. Risk Highlighting
Critical information like warnings, first-time addresses, or large amounts should be prominently displayed.
3. Chain-Specific Context
Each chain has unique concepts that need appropriate visualization:
- Ethereum: Gas fees, contract interactions, token standards
- Solana: Instructions, programs, compute units
- Sui: Objects, Move modules, gas objects
- Tron: Energy, bandwidth, TRC standards
Implementation Pattern
Each chain module follows this general pattern:
- Decode - Parse raw transaction bytes into chain-specific structures
- Extract - Pull out key information (sender, recipient, amounts, etc.)
- Enrich - Add context (resolve names, check contracts, calculate fees)
- Transform - Convert to VisualSign field types
- Organize - Structure fields for optimal user understanding
Supported Chains
- Ethereum - Account-based model with smart contracts
- Solana - High-performance chain with parallel processing
- Sui - Object-oriented blockchain with Move
- Tron - EVM-compatible with energy system
Field Type Mapping
Each chain's native data types map to VisualSign field types:
| Chain Data | VisualSign Field | Example |
|---|---|---|
| Token amounts | amount_v2 | ETH, SOL, USDC |
| Addresses | address_v2 | Recipients, contracts |
| Methods/Instructions | text_v2 or preview_layout | Function calls |
| Multiple operations | list_layout | Batch transactions |
| Gas/Fees | preview_layout | Expandable fee details |
Source Code
The full implementation of all chain modules can be found in the visualsign-parser repository:
Adding New Chains
To add support for a new blockchain:
- Study the transaction format - Understand how transactions are encoded
- Identify key information - What users need to see for this chain
- Implement the Transaction and VisualSignConverter traits - Follow the pattern of existing modules
- Map to field types - Use appropriate VisualSign fields for visualization
- Add tests - Ensure parsing works with real transaction data
See the contribution guide for detailed instructions.
Best Practices
Performance
- Cache frequently accessed data (names, ABIs, token info)
- Avoid blocking operations in the parse path
- Use efficient decoding libraries
Accuracy
- Validate all decoded data
- Handle malformed transactions gracefully
- Provide clear error messages
Maintainability
- Follow existing patterns for consistency
- Document chain-specific quirks
- Keep modules isolated and testable
Next Steps
- Review individual chain documentation for specific details
- Explore the Field Types reference
- Check visualization patterns for UI guidance
- View the source code for implementation details