This skill should be used when the user asks to "broadcast transaction", "submit to ARC", "broadcast via ARC", "broadcast BEEF", "broadcast EF", "use GorillaPool ARC", "use TAAL ARC", "arc.gorillapool.io", "arc.taal.com", "ArcConfig", "broadcastMany", or needs to submit a signed BSV transaction to the network using the ARC broadcaster from @bsv/sdk.
From bsv-skillsnpx claudepluginhub b-open-io/claude-plugins --plugin bsv-skillsThis skill is limited to using the following tools:
scripts/broadcast.tsGuides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Proposes cuts, reorganization, and simplification to improve document structure, clarity, and flow while preserving comprehension. Use for structural or editorial reviews.
Broadcast signed BSV transactions using the ARC (Application Runtime & Certificate) protocol via @bsv/sdk.
ARC is the production-grade transaction broadcaster for BSV. Unlike simple REST broadcast endpoints, ARC:
txStatusTwo public ARC endpoints are available:
| Provider | URL | API Key Required |
|---|---|---|
| GorillaPool | https://arc.gorillapool.io | No (mainnet, public beta) |
| TAAL | https://api.taal.com/arc | Yes — get from console.taal.com |
GorillaPool is the default for development. Use TAAL for production if a guaranteed SLA is needed.
import { Transaction, ARC } from '@bsv/sdk'
// GorillaPool — no API key needed
const result = await tx.broadcast(new ARC('https://arc.gorillapool.io'))
// TAAL — API key required
const result = await tx.broadcast(new ARC('https://api.taal.com/arc', 'mainnet_xxxxxx'))
// Check result
if (result.status === 'success') {
console.log('txid:', result.txid)
console.log('status:', result.message) // e.g. "SEEN_ON_NETWORK"
} else {
console.error('broadcast failed:', result.description)
}
Use ArcConfig for advanced configuration:
import { ARC, ArcConfig } from '@bsv/sdk'
const config: ArcConfig = {
apiKey: 'mainnet_xxxxxx', // Optional for GorillaPool
callbackUrl: 'https://myapp.com/arc-callback', // Webhook for confirmations
callbackToken: 'my-secret-token', // Sent as Authorization header in callbacks
deploymentId: 'my-app-v1', // Identifies your app in ARC logs
headers: { 'X-Custom': 'value' }, // Extra headers on all requests
}
const broadcaster = new ARC('https://arc.gorillapool.io', config)
await tx.broadcast(broadcaster)
When callbackUrl is set, ARC will POST to that URL when the transaction is:
SEEN_ON_NETWORK)MINED)DOUBLE_SPEND_ATTEMPTED)The callback body contains { txid, txStatus, blockHash?, blockHeight? }.
The ARC broadcaster internally calls tx.toHexEF() (Extended Format). EF includes source transaction data so ARC can validate scripts and fees without looking up inputs separately.
If EF serialization fails (source transactions not attached), it falls back to raw hex.
// Manually build with source tx attached (enables EF)
tx.addInput({
sourceTXID: '...',
sourceOutputIndex: 0,
sourceTransaction: parentTx, // Attaches parent → enables EF
unlockingScriptTemplate: new P2PKH().unlock(key),
})
Broadcast multiple transactions in one call:
const broadcaster = new ARC('https://arc.gorillapool.io')
const results = await broadcaster.broadcastMany([tx1, tx2, tx3])
for (const r of results) {
console.log(r)
}
broadcastMany posts to /v1/txs (vs /v1/tx for single). Results are mixed — some may succeed while others fail.
When using WalletClient with noSend: true, the wallet returns a BEEF transaction. To broadcast it via ARC:
import { Transaction, ARC } from '@bsv/sdk'
// Parse BEEF bytes from WalletClient
const tx = Transaction.fromBEEF(beefBytes)
// Or from hex BEEF string
const tx = Transaction.fromHexBEEF(beefHex)
// Broadcast
const result = await tx.broadcast(new ARC('https://arc.gorillapool.io'))
# Broadcast a raw/EF tx hex
bun run skills/broadcast-arc/scripts/broadcast.ts <tx-hex>
# Broadcast BEEF hex
bun run skills/broadcast-arc/scripts/broadcast.ts --beef <beef-hex>
# Use TAAL with API key
bun run skills/broadcast-arc/scripts/broadcast.ts <tx-hex> --key mainnet_xxxxxx --url https://api.taal.com/arc
| Code | Meaning |
|---|---|
200 | Success — transaction accepted |
409 | Already known — txid exists (not an error) |
422 | Invalid transaction — script/fee error |
465 | Cumulative fee too low |
473 | Double spend detected |
A 409 response (already known) should be treated as success — the tx is already on the network.
| Status | Meaning |
|---|---|
STORED | Received, not yet validated |
ANNOUNCED_TO_NETWORK | Propagated to nodes |
SEEN_ON_NETWORK | Seen by multiple nodes |
MINED | Included in a block |
SEEN_IN_ORPHAN_MEMPOOL | In an orphan branch |
DOUBLE_SPEND_ATTEMPTED | Competing transaction detected |
wallet-brc100 — create transactions with WalletClient including noSend: true BEEF patternwallet-send-bsv — build and sign transactions with a WIF key before broadcastingdecode-bsv-transaction — inspect a transaction before or after broadcast