btc-connect
npx skills add https://github.com/microck/ordinary-claude-skills --skill btc-connect
Agent 安装分布
Skill 文档
BTC-Connect ä¸ä¸éææè½
æè½æ¦è¿°
btc-connect æ¯ä¸ä¸ºæ¯ç¹å¸ Web3 åºç¨è®¾è®¡çé±å è¿æ¥å·¥å ·å ï¼æä¾ç»ä¸çè¿æ¥æ¥å£ãäºä»¶çå¬åéé å±ãæ¤æè½æ¯æå¨ ReactãVueãNext.jsãNuxt 3 项ç®ä¸å®æ´éæææ°çæ¬ç btc-connect (v0.5.0+)ï¼å®ç° UniSat å OKX é±å çè¿æ¥ãç½ç»åæ¢ãç¶æç®¡çï¼å¹¶è§£å³ SSR ç¯å¢å ¼å®¹æ§é®é¢ã
ææ°ç¹æ§ (v0.5.0): ç»ä¸Hook APIè®¾è®¡ãæºè½ä¸»é¢æ£æµç³»ç»ã代ç è´¨éå ¨é¢ä¼åãå®åç±»åå®å ¨ãå¢å¼ºæå»ºæ§è½ã宿´æµè¯è¦çã
使ç¨åºæ¯
å¨ä»¥ä¸æ åµä¸ä½¿ç¨æ¤æè½ï¼
- éè¦å¨ React/Vue 项ç®ä¸éææ¯ç¹å¸é±å è¿æ¥åè½
- éè¦å¨ Next.js/Nuxt 3 SSR 项ç®ä¸é ç½® btc-connect
- éè¦å®ç°æ¯ç¹å¸ç½ç»åæ¢ï¼ä¸»ç½/æµè¯ç½/å彿µè¯ç½ï¼
- éè¦éæ UniSat æ OKX é±å
- éå° btc-connect API éææé ç½®é®é¢
- éè¦ææ¥é±å è¿æ¥å¤±è´¥æ SSR å ¼å®¹æ§é®é¢
- éè¦åçº§å°ææ°çæ¬ç btc-connect å (v0.4.0+)
æ ¸å¿åè½
1. ä¾èµå®è£ åçæ¬ç®¡ç
- èªå¨å®è£ ææ°çæ¬ç @btc-connect/coreã@btc-connect/reactã@btc-connect/vue
- æä½çæ¬è¦æ± v0.4.0+ï¼èªå¨éæ©ææ°ç¨³å®çæ¬
- çæ¬å ¼å®¹æ§æ£æ¥åæºè½éªè¯
- ä¾èµå ³ç³»éªè¯åå²çªè§£å³
- Bun å 管çå¨ä¼å
2. æ¡æ¶éæé ç½®
- React 项ç®é ç½®å Hooks 使ç¨ï¼Context Provider 模å¼ï¼
- Vue 项ç®é ç½®å Composables 使ç¨ï¼æä»¶ç³»ç»ï¼
- Next.js SSR ç¯å¢é ç½®ï¼å®¢æ·ç«¯ç»ä»¶æ¨¡å¼ï¼
- Nuxt 3 SSR ç¯å¢é ç½®ï¼å®¢æ·ç«¯æä»¶æ¨¡å¼ï¼
3. ð ç½ç»åæ¢åè½ (v0.3.11+)
- æ¯æä¸»ç½ (livenet)ãæµè¯ç½ (testnet)ãå彿µè¯ç½ (regtest)
- UniSat é±å å®å ¨æ¯æç¨åºåç½ç»åæ¢
- OKX é±å ç½ç»åæ¢æå¯¼
- ç½ç»ååäºä»¶çå¬åå¤ç
4. é±å éé åå¢å¼ºæ£æµ
- UniSat é±å éæå宿´ API 使ç¨
- OKX é±å éæåéé å¤ç
- ð å¢å¼ºé±å æ£æµæºå¶ï¼20ç§å æ¯300msè½®è¯¢å»¶è¿æ³¨å ¥ï¼
- é±å ç¶æç®¡çåäºä»¶çå¬
- å¤é±å å ¼å®¹æ§å¤ç
5. éè¯¯ææ¥åæ§è½ä¼å
- è¿æ¥å¤±è´¥è¯æåè§£å³æ¹æ¡
- SSR ç¯å¢é®é¢ææ¥åä¿®å¤
- çæ¬å ¼å®¹æ§é®é¢è§£å³
- ð æ§è½ä¼åï¼ç¼åç³»ç»ãé误å¤çãè¿æ¥ä¼åï¼
ä½¿ç¨æµç¨
1. 项ç®è¯ä¼°åç¯å¢æ£æ¥
é¦å æ£æ¥é¡¹ç®ç±»ååå½åç¯å¢ï¼
- æ£æ¥é¡¹ç®æ¡æ¶ç±»åï¼React/Vue/Next.js/Nuxt 3ï¼
- æ£æ¥ç°æçä¾èµåé ç½®ï¼ç¡®ä¿æ çæ¬å²çªï¼
- ç¡®å®SSRæCSRç¯å¢
- æ£æ¥ Node.js çæ¬ï¼éè¦ >= 18ï¼å Bun å 管çå¨
2. ä¾èµå®è£ åçæ¬ç®¡ç
æ ¹æ®é¡¹ç®ç±»åå®è£ ç¸åºå ï¼
# ä½¿ç¨ Bunï¼æ¨èï¼
bun add @btc-connect/core @btc-connect/react # React 项ç®
bun add @btc-connect/core @btc-connect/vue # Vue 项ç®
# æä½¿ç¨ npm
npm install @btc-connect/core @btc-connect/react
çæ¬è¦æ±ï¼
- @btc-connect/core: v0.4.0+ (èªå¨å®è£ ææ°çæ¬)
- @btc-connect/react: v0.4.0+ (èªå¨å®è£ ææ°çæ¬)
- @btc-connect/vue: v0.4.0+ (æ¶æä¼åçæ¬ï¼èªå¨å®è£ ææ°çæ¬)
ð¡ å®è£ çç¥: å®è£ èæ¬èªå¨éæ©ææ°ç¨³å®çæ¬ï¼ç¡®ä¿æä½çæ¬è¦æ±ä¸º v0.4.0+
3. æ¡æ¶éæé ç½®
æ ¹æ®æ¡æ¶åç¯å¢è¿è¡é ç½®ï¼
React é ç½®ï¼
- é ç½® BTCWalletProvider å è£ åºç¨
- ä½¿ç¨ useWalletãuseNetworkãuseAccount ç Hooks
- SSR ç¯å¢ä½¿ç¨ ‘use client’ æä»¤æå¨æå¯¼å ¥
Vue é ç½®ï¼
- é ç½® BTCWalletPlugin æä»¶ç³»ç»
- ä½¿ç¨ useWalletãuseNetworkãuseAccount ç Composables
- ð v0.4.0+ ç»ä¸ API 使ç¨
useWallet()
SSR ç¯å¢é ç½®ï¼
- Next.jsï¼å®¢æ·ç«¯ç»ä»¶æ¨¡å¼ + å¨æå¯¼å ¥
- Nuxt 3ï¼å®¢æ·ç«¯æä»¶æ¨¡å¼ + onMounted çå½å¨æ
4. ð ç½ç»åæ¢åè½é ç½®
å®ç°æ¯ç¹å¸ç½ç»åæ¢ï¼
// React Hook 使ç¨
const { network, switchNetwork } = useNetwork()
await switchNetwork('testnet') // 忢尿µè¯ç½
// Vue Composable 使ç¨
const { network, switchNetwork } = useNetwork()
await switchNetwork('mainnet') // 忢å°ä¸»ç½
æ¯æç½ç»ï¼livenetï¼ä¸»ç½ï¼ãtestnetï¼æµè¯ç½ï¼ãregtestï¼å彿µè¯ç½ï¼
5. é±å éæåæ£æµ
鿩并éæç®æ é±å ï¼
- UniSat é±å ï¼å®å ¨æ¯æç¨åºåæä½åç½ç»åæ¢
- OKX é±å ï¼åºç¡è¿æ¥åç¾åï¼ç½ç»åæ¢éè¦æå¨æä½
- ð å¢å¼ºæ£æµï¼èªå¨æ£æµå»¶è¿æ³¨å ¥çé±å ï¼20ç§å 轮询ï¼
6. é®é¢ææ¥åæ§è½ä¼å
å¦éé®é¢ï¼æä»¥ä¸æ¥éª¤ææ¥ï¼
- æ£æ¥çæ¬å ¼å®¹æ§ï¼ç¡®ä¿ä½¿ç¨ææ°çæ¬ï¼
- éªè¯é ç½®æä»¶åæ¡æ¶éæ
- æµè¯é±å è¿æ¥åç½ç»åæ¢
- æ¥ç SSR ç¯å¢é误æ¥å¿
- æ£æ¥ç¼åç³»ç»åæ§è½ä¼å设置
æ¡æ¶éææå
React éæï¼ææ°çæ¬ v0.4.0+ï¼
- å®è£ ä¾èµï¼@btc-connect/core + @btc-connect/react
- é ç½® Providerï¼ä½¿ç¨ BTCWalletProvider å è£ åºç¨
- ä½¿ç¨ Hooksï¼useWalletãuseNetworkãuseAccountãuseAutoConnect ç
- ç½ç»åæ¢ï¼ä½¿ç¨ useNetwork Hook å®ç°ç½ç»åæ¢
- SSR 注æï¼ä½¿ç¨ ‘use client’ æä»¤æå¨æå¯¼å ¥
å¿«é示ä¾ï¼
'use client'
import { BTCWalletProvider, useWallet } from '@btc-connect/react'
function App() {
return (
<BTCWalletProvider>
<WalletComponent />
</BTCWalletProvider>
)
}
function WalletComponent() {
const { isConnected, connect, account, network } = useWallet()
// å®ç°é±å
è¿æ¥é»è¾
}
Vue éæï¼ææ°çæ¬ v0.4.0+ æ¶æä¼åï¼
- å®è£ ä¾èµï¼@btc-connect/core + @btc-connect/vue (v0.4.0+)
- é ç½®æä»¶ï¼ä½¿ç¨ BTCWalletPlugin
- ð ç»ä¸ APIï¼ä½¿ç¨
useWallet()è·åææåè½ - ç»ä»¶ä½¿ç¨ï¼ConnectButtonãWalletModal ç
- ç½ç»åæ¢ï¼å ç½®ç½ç»åæ¢åè½
å¿«é示ä¾ï¼
<template>
<div>
<ConnectButton @connect="handleConnect" />
<!-- v0.4.0+ 已鿿¨¡ææ¡å° ConnectButton -->
</div>
</template>
<script setup>
import { ConnectButton, useWallet } from '@btc-connect/vue'
const wallet = useWallet() // ð ç»ä¸ API
const handleConnect = (walletId) => {
console.log('è¿æ¥å°é±å
:', walletId)
}
</script>
Next.js SSR éæï¼å®æ´å ¼å®¹ï¼
- å¨æå¯¼å ¥ï¼é±å ç»ä»¶å¿ é¡»å¨æå¯¼å ¥
- 客æ·ç«¯ç»ä»¶ï¼ä½¿ç¨ ‘use client’ æä»¤æ è®°
- ç¶æåæ¥ï¼é¿å SSR/客æ·ç«¯ç¶æä¸å¹é
- é误边çï¼é 置客æ·ç«¯é误å¤ç
å ³é®é ç½®ï¼
// components/WalletConnect.tsx
'use client'
import { useWallet } from '@btc-connect/react'
export default function WalletConnect() {
const { connect, isConnected } = useWallet()
// é±å
è¿æ¥é»è¾
}
// pages/index.tsx
import dynamic from 'next/dynamic'
const WalletConnect = dynamic(() => import('./WalletConnect'), {
ssr: false
})
Nuxt 3 SSR éæï¼å®æ´æ¯æï¼
- 客æ·ç«¯æä»¶ï¼å建客æ·ç«¯ä¸ç¨æä»¶
- çå½å¨æï¼ä½¿ç¨ onMounted ç¡®ä¿å®¢æ·ç«¯æ§è¡
- è¿è¡æ¶é ç½®ï¼é 置客æ·ç«¯ç¯å¢åé
- ç»ä»¶ä¿æ¤ï¼ä½¿ç¨ ClientOnly ç»ä»¶å è£
å ³é®é ç½®ï¼
// plugins/btc-connect.client.ts
import { BTCWalletPlugin } from '@btc-connect/vue'
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.vueApp.use(BTCWalletPlugin)
})
<template>
<ClientOnly>
<ConnectButton />
</ClientOnly>
</template>
é±å ç¹å®å¤ç
UniSat é±å ï¼å®å ¨æ¯æï¼
- â 宿´ç¨åºåç½ç»åæ¢ï¼æ¯æä¸»ç½ãæµè¯ç½ãå彿µè¯ç½
- â 宿´ API æ¯æï¼æ¶æ¯ç¾åãPSBT ç¾åãæ¯ç¹å¸åé
- â äºä»¶çå¬å®æ´ï¼è´¦æ·ååãç½ç»ååãè¿æ¥ç¶æ
- â å¢å¼ºæ£æµæºå¶ï¼èªå¨æ£æµå»¶è¿æ³¨å ¥ï¼20ç§å 轮询ï¼
- â æ§è½ä¼åï¼ç¼åç³»ç»ãé误å¤çãè¿æ¥ä¼å
ç½ç»åæ¢ç¤ºä¾ï¼
// å®å
¨æ¯æç¨åºå忢
await switchNetwork('testnet') // ç«å³åæ¢å°æµè¯ç½
await switchNetwork('mainnet') // ç«å³åæ¢å°ä¸»ç½
OKX é±å ï¼é¨åæ¯æï¼
- â ï¸ æéç½ç»åæ¢ï¼é常éè¦ç¨æ·å¨é±å 䏿å¨åæ¢
- â åºç¡è¿æ¥åç¾åï¼æ¯æé±å è¿æ¥ååºç¡ç¾ååè½
- â è´¦æ·ç®¡çï¼æ¯æå¤è´¦æ·åä½é¢æ¥è¯¢
- â ï¸ ç¹æ®é误å¤çï¼éè¦é对 OKX çé误å¤çé»è¾
- â ï¸ ç¨æ·ä½éªæç¤ºï¼éè¦å¼å¯¼ç¨æ·è¿è¡æå¨æä½
ç½ç»åæ¢æå¯¼ï¼
// OKX é±å
ç½ç»åæ¢éè¦ç¨æ·æå¨æä½
try {
await switchNetwork('testnet')
} catch (error) {
// æç¤ºç¨æ·å¨ OKX é±å
䏿å¨åæ¢ç½ç»
console.log('è¯·å¨ OKX é±å
䏿å¨åæ¢å°æµè¯ç½')
}
ð ç½ç»åæ¢åè½è¯¦è§£ (v0.3.11+)
æ¯æçç½ç»ç±»å
- livenet/mainnet: æ¯ç¹å¸ä¸»ç½
- testnet: æ¯ç¹å¸æµè¯ç½
- regtest: å彿µè¯ç½
æ ¸å¿å ç½ç»åæ¢
import { BTCWalletManager } from '@btc-connect/core'
const manager = new BTCWalletManager()
await manager.switchNetwork('testnet')
// çå¬ç½ç»åå
manager.on('networkChange', ({ walletId, network }) => {
console.log(`é±å
${walletId} åæ¢å° ${network} ç½ç»`)
})
React Hook ç½ç»åæ¢
import { useNetwork } from '@btc-connect/react'
function NetworkSwitcher() {
const { network, switchNetwork, isSwitching } = useNetwork()
const handleSwitch = async () => {
try {
await switchNetwork('mainnet')
console.log('忢å°ä¸»ç½æå')
} catch (error) {
console.error('åæ¢å¤±è´¥:', error.message)
}
}
return (
<div>
<p>å½åç½ç»: {network}</p>
<button onClick={handleSwitch} disabled={isSwitching}>
{isSwitching ? '忢ä¸...' : '忢å°ä¸»ç½'}
</button>
</div>
)
}
Vue Composable ç½ç»åæ¢
<template>
<div class="network-switcher">
<p>å½åç½ç»: {{ network.name }}</p>
<button @click="switchToTestnet" :disabled="isSwitching">
{{ isSwitching ? '忢ä¸...' : '忢尿µè¯ç½' }}
</button>
</div>
</template>
<script setup>
import { useNetwork } from '@btc-connect/vue'
const { network, switchNetwork, isSwitching } = useNetwork()
const switchToTestnet = async () => {
try {
await switchNetwork('testnet')
} catch (error) {
console.error('åæ¢å¤±è´¥:', error.message)
}
}
</script>
常è§é®é¢è§£å³
è¿æ¥é®é¢
- é±å æ£æµå¤±è´¥ï¼æ£æ¥é±å æ¯å¦æ£ç¡®å®è£ åå¯ç¨
- å»¶è¿æ³¨å ¥å¤çï¼ä½¿ç¨å¢å¼ºæ£æµæºå¶ï¼20ç§å æ¯300ms轮询ï¼
- ç¨æ·åæ¶è¿æ¥ï¼æ£ç¡®å¤çç¨æ·åæ¶è¿æ¥çæ åµ
- ç½ç»æéï¼ç¡®ä¿é±å ææé访é®ç®æ ç½ç»
SSR é®é¢
- å¨æå¯¼å ¥ï¼ä½¿ç¨å¨æå¯¼å ¥é¿å æå¡ç«¯é误
- Window å¯¹è±¡ï¼æ£æ¥ window 对象çå¯ç¨æ§
- ç¶æåæ¥ï¼å¤ç SSR/客æ·ç«¯ç¶æä¸å¹é é®é¢
- 客æ·ç«¯æä»¶ï¼å¨ Nuxt 3 ä¸ä½¿ç¨å®¢æ·ç«¯ä¸ç¨æä»¶
çæ¬å ¼å®¹æ§é®é¢
- çæ¬å¹é ï¼ç¡®ä¿ coreãreactãvue å çæ¬å ¼å®¹
- API åæ´ï¼æ³¨æ v0.4.0+ Vue å çæ¶æåå
- ç±»åå®ä¹ï¼é ç½®æ£ç¡®ç TypeScript ç±»å
- ä¾èµå²çªï¼æ£æ¥æ¯å¦åå¨ä¾èµçæ¬å²çª
æ§è½é®é¢
- ç¼åç³»ç»ï¼å©ç¨æºè½ç¼åæåæ§è½
- è¿æ¥ä¼åï¼é¿å ä¸å¿ è¦çéå¤è¿æ¥
- äºä»¶ç®¡çï¼æ£ç¡®æ¸ çäºä»¶çå¬å¨
- å åæ³æ¼ï¼æ£æ¥ç»ä»¶å¸è½½æ¶çèµæºæ¸ ç
æä½³å®è·µ
- çæ¬ä¸è´æ§ï¼ä½¿ç¨å®è£ èæ¬èªå¨å®è£ ææ°çæ¬ï¼ç¡®ä¿æä½çæ¬è¦æ±ï¼core v0.4.0+, vue v0.4.0+ï¼
- é误å¤çï¼å®ç°å®æ´çé误å¤çåç¨æ·å馿ºå¶
- ç¶æç®¡çï¼æ£ç¡®å¤çé±å è¿æ¥ç¶æåç½ç»ç¶æåå
- ç¨æ·ä½éªï¼æä¾æ¸ æ°çç¶ææç¤ºåæä½æå¯¼
- å®å ¨æ§ï¼éªè¯é±å è¿æ¥å交æè¯·æ±çå®å ¨æ§
- æ§è½ä¼åï¼å©ç¨ç¼åç³»ç»åå¢å¼ºæ£æµæºå¶ä¼åæ§è½
- SSR å ¼å®¹ï¼å¨ SSR 项ç®ä¸æ£ç¡®é 置客æ·ç«¯ç»ä»¶
- ç½ç»åæ¢ï¼ä¸ºä¸åé±å æä¾åéçç½ç»åæ¢ä½éª