Auditing smart contracts for composability risks across emerging DeFi primitives