Deploy a contract

Deploy a Clarity smart contract to the Stacks blockchain using Stacks.js

import { STACKS_TESTNET } from "@stacks/network";
import {
makeContractDeploy,
broadcastTransaction,
AnchorMode,
PostConditionMode
} from "@stacks/transactions";
const contractCode = `
(define-data-var counter uint u0)
(define-public (increment)
(ok (var-set counter (+ (var-get counter) u1))))
(define-read-only (get-counter)
(ok (var-get counter)))
`;
const txOptions = {
contractName: "my-counter",
codeBody: contractCode,
senderKey: "753b7cc01a1a2e86221266a154af739463fce51219d97e4f856cd7200c3bd2a601",
network: STACKS_TESTNET,
anchorMode: AnchorMode.Any,
postConditionMode: PostConditionMode.Allow,
fee: 100000n, // Set an appropriate fee
};
const transaction = await makeContractDeploy(txOptions);
const broadcastResponse = await broadcastTransaction({ transaction });
console.log("Contract deployed!");
console.log("Transaction ID:", broadcastResponse.txid);

Use cases

  • Deploying new smart contracts to mainnet or testnet
  • Automating contract deployments in CI/CD pipelines
  • Programmatic contract deployment for dApp initialization
  • Deploying contract upgrades or new versions

Key concepts

Contract deployment requires:

  • Contract name: Unique identifier for your contract (letters, numbers, hyphens)
  • Code body: The Clarity contract code as a string
  • Sender key: Private key of the account deploying the contract
  • Network: Target network (mainnet, testnet, or devnet)