---
# System prepended metadata

title: ECDSA Custom Signature Module

---

# ECDSA Custom Signature Module

## Overview

The Substrate does not allow the users to sign custom transactions with arbitrary data by using a Web3 wallet (like Metamask) through standard API calls. For example, JSON-RPC API defines the eth_sign call which is used for signing arbitrary data. However, this call requires a standard prefix to all data by `"\0x19Ethereum Signed Message\n"` due to security concerns. This is done to prevent users from unknowingly signing transactions, and by design, it is impossible to sign binary data, like Substrate Extrinsic. This module mitigates the limitations in eth_sign call. The main idea is to move the transaction signature validation out of the Substrate core and provide a custom signature method for runtime developers. Because the signature is expected to be prefixed, this call can be used with the personal_sign method as well, which is recommended by the Ethereum community. [`more...`](https://docs.plasmnet.io/build/metamask-signatures)

## Storage
* None

## Calls
* `fn call` - Custom signature method for the Runtime

## Enums
* None

## Constants
* None

## Events
* Executed(AccountId, DispatchResult)

## Errors
* `DecodeFailure` - Signature decode fails
* `InvalidSignature` - Signature and account mismatched


* * *

Plasm is licensed under the GPLv3.0 by Stake Technologies Inc.