Implementing Post-Conditions
Learn how to add post-conditions to protect your Stacks transactions.
Post-conditions are a powerful security feature in Stacks that protect users from unexpected transaction outcomes. This tutorial will walk you through implementing post-conditions in your applications to ensure transactions behave exactly as users expect.
What you'll learn
Construct post-conditions using the
Pchelper APIAdd post-conditions to different transaction types
Configure post-condition modes for transaction security
Implement post-conditions for STX, fungible tokens, and NFTs
Handle semi-fungible tokens (SFTs) with post-conditions
Prerequisites
Basic understanding of Stacks transactions
Stacks.js library installed (
npm install @stacks/transactions)A development environment set up for Stacks
Constructing post-conditions
The Pc helper in Stacks.js provides a fluent, BDD-inspired API for constructing post-conditions. Start with Pc.principal() to specify which address will be verified, then chain methods to define the condition.
import { Pc } from '@stacks/transactions';
// Basic structure of a post-condition
const postCondition = Pc
.principal('STB44HYPYAT2BB2QE513NSP81HTMYWBJP02HPGK6')
.willSendEq(1000)
.ustx();The Pc helper uses method chaining for intuitive condition building. Your IDE will provide auto-completion for available methods at each step.
Available transfer methods
Post-conditions support different comparison operators and asset types. Choose the appropriate method based on your security requirements.
STX and fungible token methods
Comparison methods available:
.willSendEq(amount)- Exactly equal to amount.willSendGte(amount)- Greater than or equal to amount.willSendGt(amount)- Greater than amount.willSendLte(amount)- Less than or equal to amount.willSendLt(amount)- Less than amount
Asset type methods
NFT-specific methods
Setting the post-condition mode
The post-condition mode determines how the Stacks blockchain handles asset transfers not explicitly covered by your post-conditions. This is a critical security setting.
Mode options:
PostConditionMode.Deny (default): Transaction fails if any unspecified transfers occur
PostConditionMode.Allow: Transaction allows transfers beyond specified post-conditions
Common implementation patterns
STX transfer post-conditions
Protect STX transfers by specifying exact amounts or ranges.
Fungible token post-conditions
Ensure fungible tokens are transferred as expected in contract calls.
NFT transfer post-conditions
Control NFT ownership changes with specific post-conditions.
Use willNotSendAsset() to protect valuable NFTs from being transferred unexpectedly.
Semi-fungible token (SFT) post-conditions
SFTs require special handling as they have both fungible and non-fungible properties.
Multiple post-conditions
Complex transactions often require multiple post-conditions to fully protect all asset transfers.
Last updated
Was this helpful?
