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…