Skip to content
Back to skills

Voltaire Effect Signer

ASecurity

Transaction signing with local keys or wallets. Use when sending transactions or signing messages.

  • 9 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 10, 2026
blockchaintypescript

Security analysis

A100/100

Scanned September 10, 2026

npx -y skills add cyotee/indexedex --skill voltaire-effect-signer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Voltaire Effect Signer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Voltaire Effect Signer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/cyotee-voltaire-effect-signer/badge)](https://www.skillsdirectory.com/skills/cyotee-voltaire-effect-signer)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: voltaire-effect-signer
description: Transaction signing with local keys or wallets. Use when sending transactions or signing messages.
---

# Signer Service

Transaction signing with local accounts.

## From Private Key

```typescript
import { Effect, Layer } from 'effect'
import { Signer, Provider, HttpTransport } from 'voltaire-effect'
import { Secp256k1Live, KeccakLive } from 'voltaire-effect/crypto'
import { Hex } from '@tevm/voltaire'

const privateKey = Hex.fromHex('0xac0974bec...')

const CryptoLayer = Layer.mergeAll(Secp256k1Live, KeccakLive)
const TransportLayer = HttpTransport('https://eth.llamarpc.com')

const SignerLayer = Signer.fromPrivateKey(privateKey, Provider).pipe(
  Layer.provide(Layer.mergeAll(CryptoLayer, TransportLayer))
)
```

## From Mnemonic

```typescript
import { MnemonicAccount } from 'voltaire-effect/native'

const mnemonic = 'word1 word2 word3 ...'

const AccountLayer = MnemonicAccount(mnemonic).pipe(
  Layer.provide(CryptoLayer)
)

const SignerLayer = Layer.mergeAll(Signer.Live, AccountLayer)
```

## Send Transaction

```typescript
import { sendTransaction } from 'voltaire-effect'

const program = Effect.gen(function* () {
  const txHash = yield* sendTransaction({
    to: recipientAddress,
    value: 1000000000000000000n, // 1 ETH
    data: '0x...'
  })
  return txHash
}).pipe(Effect.provide(SignerLayer))
```

## Sign Message

```typescript
import { sign, signTypedData } from 'voltaire-effect'

const signature = yield* sign('Hello world', signerAddress)

const typedSig = yield* signTypedData({
  domain: { name: 'Example', version: '1', chainId: 1, verifyingContract: '0x...' },
  types: { Person: [{ name: 'name', type: 'string' }] },
  message: { name: 'Bob' }
})
```

## With Contract Write

```typescript
import { Contract } from 'voltaire-effect'

const program = Effect.gen(function* () {
  const token = yield* Contract(tokenAddress, erc20Abi)
  
  // Simulate first
  const success = yield* token.simulate.transfer(recipient, amount)
  if (!success) return yield* Effect.fail(new Error('Would fail'))
  
  // Send transaction
  const txHash = yield* token.write.transfer(recipient, amount)
  return txHash
}).pipe(Effect.provide(SignerLayer))
```

## Full Wallet Setup

```typescript
import { Effect, Layer } from 'effect'
import { Signer, Provider, HttpTransport, MnemonicAccount } from 'voltaire-effect'
import { Secp256k1Live, KeccakLive } from 'voltaire-effect/crypto'

const CryptoLayer = Layer.mergeAll(Secp256k1Live, KeccakLive)
const TransportLayer = HttpTransport('https://eth.llamarpc.com')
const ProviderLayer = Provider.pipe(Layer.provide(TransportLayer))

const WalletLayer = Layer.mergeAll(
  Signer.Live,
  CryptoLayer,
  ProviderLayer
).pipe(
  Layer.provideMerge(MnemonicAccount(mnemonic).pipe(Layer.provide(CryptoLayer)))
)

const program = Effect.gen(function* () {
  return yield* sendTransaction({ to: '0x...', value: 1n })
}).pipe(Effect.provide(WalletLayer))
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.