func hashWithEthereumPrefix(data []byte) ([]byte, error) {
	return LegacyKeccak256(addEthereumPrefix(data))
}
hashWithEthereumPrefix returns the hash that should be signed for the given data.
package crypto
import (
	"crypto/ecdsa"
	"errors"
	"fmt"
	"math/big"
	"github.com/btcsuite/btcd/btcec"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/core/types"
	"github.com/ethsana/sana/pkg/crypto/eip712"
)
var (
	ErrInvalidLength = errors.New("invalid signature length")
)
type Signer interface {
	Sign(data []byte) ([]byte, error)
	SignTx(transaction *types.Transaction, chainID *big.Int) (*types.Transaction, error)
	SignTypedData(typedData *eip712.TypedData) ([]byte, error)
	PublicKey() (*ecdsa.PublicKey, error)
	EthereumAddress() (common.Address, error)
}
func addEthereumPrefix(data []byte) []byte {
	return []byte(fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), data))
}