Que fait stx-contract-deployment-hiro ?
Collection de contrats intelligents Clarity + SDK premium pour la blockchain Stacks. Déployez, interagissez et surveillez des contrats intelligents Stacks — détection de portefeuille, requêtes de solde, encodage Clarity et prise en charge complète des appels de contrat, le tout dans un seul package.
GitHub · NPM — @earnwithalee/stx-contract
Ce que ce skill enseigne
Ce skill couvre :
- Déploiement et interaction avec des contrats intelligents Clarity sur Stacks Mainnet/Testnet
- Utilisation du SDK
@earnwithalee/stx-contractpour des appels de contrat typés - Détection et connexion de portefeuille pour Leather, Xverse et autres portefeuilles Stacks
- Lecture de l'état on-chain — soldes, transactions, hauteur de bloc, données de contrat
- Encodage des valeurs Clarity en JavaScript/TypeScript pur
- Configuration de Chainhook pour le streaming d'événements en temps réel
- Test des contrats avec Clarinet avant le déploiement sur mainnet
Outils recommandés
- search : ripgrep — recherche rapide dans le code
- deploy : Acme Deploy — déploiement sur Vercel ou en production
- format : prettier — formatage du code (
npm run format) - lint : eslint — analyse statique (
npm run lint) - contracts : Clarinet — test et déploiement local de Clarity
- explorer : Hiro Explorer — vérification des contrats déployés sur la chaîne
- runtime : Node.js >= 18
- blockchain : Stacks — L2 sécurisé par Bitcoin
Installation
npm install @earnwithalee/stx-contract
# ou
yarn add @earnwithalee/stx-contract
# ou
pnpm add @earnwithalee/stx-contract
Démarrage rapide
import { StxContractClient } from '@earnwithalee/stx-contract';
const client = new StxContractClient({ network: 'mainnet' });
Connexion du portefeuille
import sdk from '@earnwithalee/stx-contract';
// Connexion du portefeuille (Leather / Xverse détecté automatiquement)
const address = await sdk.wallet.connectWallet();
console.log('Connecté :', address);
// Détection du fournisseur de portefeuille
const { available, provider } = sdk.wallet.detectWallet();
// Formatage de l'adresse pour l'affichage
const short = sdk.wallet.formatAddress(address); // "SP2F...NFBT"
Données on-chain — soldes et transactions
import sdk from '@earnwithalee/stx-contract';
// Obtenir le solde STX
const balance = await sdk.api.getBalance('SP2F500B8DTRK1EANJQ054BRAB8DDKN6QCMXGNFBT');
console.log('Solde :', balance.stx, 'STX');
// Obtenir l'historique des transactions
const txs = await sdk.api.getTransactions('SP2F500B8DTRK1EANJQ054BRAB8DDKN6QCMXGNFBT');
// Obtenir la hauteur de bloc actuelle
const height = await sdk.api.getBlockHeight();
// Vérifier le statut d'une transaction
const status = await sdk.api.getTransactionStatus('0xabc...');
// Lire une fonction read-only d'un contrat
const result = await sdk.api.readContract({
contractAddress: 'SP2F500B8DTRK1EANJQ054BRAB8DDKN6QCMXGNFBT',
contractName: 'builder-rewards-v3',
functionName: 'get-total-fees-collected',
functionArgs: [],
});
Encodage des valeurs Clarity
import sdk from '@earnwithalee/stx-contract';
// Encoder différents types Clarity pour les appels de contrat
const asciiStr = sdk.encoding.encodeStringAscii('hello');
const uint256 = sdk.encoding.encodeUint(1000000n);
const principal = sdk.encoding.encodePrincipal('SP2F500B8DTRK1EANJQ054BRAB8DDKN6QCMXGNFBT');
const boolVal = sdk.encoding.encodeBool(true);
const buff = sdk.encoding.encodeBuffer(Buffer.from('deadbeef', 'hex'));
Appel d'une fonction de contrat (écriture)
import sdk from '@earnwithalee/stx-contract';
import { AnchorMode, PostConditionMode } from '@stacks/transactions';
const txId = await sdk.contract.callPublic({
contractAddress: 'SP2F500B8DTRK1EANJQ054BRAB8DDKN6QCMXGNFBT',
contractName: 'builder-rewards-v3',
functionName: 'register-builder',
functionArgs: [
sdk.encoding.encodePrincipal('SP2F500B8DTRK1EANJQ054BRAB8DDKN6QCMXGNFBT'),
],
anchorMode: AnchorMode.Any,
postConditionMode: PostConditionMode.Allow,
network: 'mainnet',
});
console.log('TX soumise :', txId);
Déploiement d'un contrat Clarity (Clarinet)
# Installer l'interface CLI Clarinet
brew install hirosystems/tap/clarinet # macOS
# ou télécharger depuis https://github.com/hirosystems/clarinet/releases
# Initialiser le projet
clarinet new my-contract && cd my-contract
# Créer un nouveau contrat
clarinet contract new my-token
# Vérifier et tester
clarinet check
clarinet test
# Déployer sur testnet
clarinet deployments generate --testnet
clarinet deployments apply --testnet
# Déployer sur mainnet
clarinet deployments generate --mainnet
clarinet deployments apply --mainnet
Chainhook — streaming d'événements en temps réel
// chainhooks/builder-event.json
{
"name": "builder-registered",
"version": 1,
"chain": "stacks",
"networks": {
"mainnet": {
"start_block": 150000,
"predicate": {
"scope": "contract_call",
"contract_identifier": "SP2F500B8DTRK1EANJQ054BRAB8DDKN6QCMXGNFBT.builder-rewards-v3",
"method": "register-builder"
},
"expire_after_occurrence": null
}
}
}
Exemple de contrat Clarity
;; builder-rewards-v3.clar
(define-map builder-scores principal uint)
(define-public (register-builder (builder principal))
(begin
(asserts! (is-eq tx-sender CONTRACT_OWNER) (err u403))
(map-set builder-scores builder u0)
(ok true)
)
)
(define-read-only (get-score (builder principal))
(default-to u0 (map-get? builder-scores builder))
)
(define-public (increment-score (builder principal) (points uint))
(let ((current (get-score builder)))
(map-set builder-scores builder (+ current points))
(ok (+ current points))
)
)
Exécution locale
git clone https://github.com/Earnwithalee7890/stx-contract-deployment-hiro.git
cd stx-contract-deployment-hiro
npm install
cp .env.example .env # définir STX_PRIVATE_KEY et HIRO_API_KEY
npm run dev # serveur de développement Next.js
Variables d'environnement
# .env.example
STX_NETWORK=mainnet # mainnet | testnet
STX_PRIVATE_KEY=votre_clé_privée_ici
HIRO_API_KEY=votre_clé_api_hiro # https://platform.hiro.so
NEXT_PUBLIC_CONTRACT_ADDRESS=SP2F500B8DTRK1EANJQ054BRAB8DDKN6QCMXGNFBT
Stack technique
| Couche | Technologie |
|---|---|
| SDK | @earnwithalee/stx-contract (npm) |
| Framework | Next.js (App Router) |
| Contrats intelligents | Clarity (Stacks Mainnet) |
| Tests | Clarinet + Vitest |
| Portefeuille | Leather, Xverse (injection de fournisseur) |
| API Chaîne | Hiro Extended API v1 |
| Blockchain | Stacks L2 (sécurisé par Bitcoin) |
| Langage | TypeScript |
Licence
MIT — voir LICENSE