What are covenant declaration macros in Silverscript?
Silverscript uses Rust-style attribute macros to declare how a covenant behaves on the Kaspa blockchain. A covenant is a rule baked into a transaction that controls how funds can move — think of it as a spending condition written in code. The canonical macro form lets developers specify several parameters at once: whether the covenant uses auth-context or shared covenant-context, which inputs and outputs it covers, whether it verifies a condition or triggers a state change, whether it enforces uniqueness across the transaction, and whether the covenant can be terminated. For a beginner, this matters because these macros are the building blocks that make Kaspa's scripting system expressive yet structured — they let developers write complex spending rules without reinventing the wheel each time.