{"data":[{"shapeKey":"mainnet:tinyman:v2:addLiquidity:flexible","network":"mainnet","protocol":"tinyman","protocolVersion":"v2","action":"addLiquidity","variant":"flexible","shapeVersion":"1.0.0","title":"Tinyman v2 flexible add liquidity","description":"Adds two-sided liquidity to an existing Tinyman AMM v2 pool using flexible amounts. Generates the documented 3-transaction group (asset1 transfer, asset2 transfer/payment, add_liquidity app call) as unsigned transactions.","summary":"Adds two-sided liquidity to an existing Tinyman AMM v2 pool using flexible amounts. Generates the documented 3-transaction group (asset1 transfer, asset2 transfer/payment, add_liquidity app call) as unsigned transactions.","opportunityRole":"enter","supportedOpportunityTypes":["lp"],"requiredInputs":["userAddress","assetAId","assetAAmount","assetBId","assetBAmount","maxSlippageBps"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk AddLiquidity.v2.flexible (getQuote/generateTxns)"},{"kind":"docs","description":"Tinyman v2 integration: add subsequent liquidity (flexible)","url":"https://docs.tinyman.org/v2-integration/protocol-methods/add-subsequent-liquidity"}],"docsPath":"protocol/docs/execution-shapes/tinyman-add-liquidity-flexible.md"},{"shapeKey":"mainnet:tinyman:v2:addLiquidity:initial","network":"mainnet","protocol":"tinyman","protocolVersion":"v2","action":"addLiquidity","variant":"initial","shapeVersion":"1.0.0","title":"Tinyman v2 initial add liquidity","description":"Adds the first liquidity to a bootstrapped but empty Tinyman AMM v2 pool. Generates the documented 3-transaction group (asset1 transfer, asset2 transfer/payment, add_initial_liquidity app call) as unsigned transactions.","summary":"Adds the first liquidity to a bootstrapped but empty Tinyman AMM v2 pool. Generates the documented 3-transaction group (asset1 transfer, asset2 transfer/payment, add_initial_liquidity app call) as unsigned transactions.","opportunityRole":"enter","supportedOpportunityTypes":["lp"],"requiredInputs":["userAddress","assetAId","assetAAmount","assetBId","assetBAmount","maxSlippageBps"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk AddLiquidity.v2.initial (getQuote/generateTxns)"},{"kind":"docs","description":"Tinyman v2 integration: add initial liquidity","url":"https://docs.tinyman.org/v2-integration/protocol-methods/add-initial-liquidity"}],"docsPath":"protocol/docs/execution-shapes/tinyman-add-liquidity-initial.md"},{"shapeKey":"mainnet:tinyman:v2:addLiquidity:singleAsset","network":"mainnet","protocol":"tinyman","protocolVersion":"v2","action":"addLiquidity","variant":"singleAsset","shapeVersion":"1.0.0","title":"Tinyman v2 single-asset add liquidity","description":"Adds one-sided liquidity to an existing Tinyman AMM v2 pool. Tinyman performs an internal swap to balance the deposit and mints pool tokens. Generates the documented 2-transaction group (asset transfer/payment, add_liquidity app call) as unsigned transactions.","summary":"Adds one-sided liquidity to an existing Tinyman AMM v2 pool. Tinyman performs an internal swap to balance the deposit and mints pool tokens. Generates the documented 2-transaction group (asset transfer/payment, add_liquidity app call) as unsigned transactions.","opportunityRole":"enter","supportedOpportunityTypes":["lp"],"requiredInputs":["userAddress","assetAId","assetBId","depositAssetId","depositAmount","maxSlippageBps"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk AddLiquidity.v2.withSingleAsset (getQuote/generateTxns)"},{"kind":"docs","description":"Tinyman v2 integration: add subsequent liquidity (single asset)","url":"https://docs.tinyman.org/v2-integration/protocol-methods/add-subsequent-liquidity"}],"docsPath":"protocol/docs/execution-shapes/tinyman-add-liquidity-single-asset.md"},{"shapeKey":"mainnet:tinyman:v2:removeLiquidity:multipleAssetsOut","network":"mainnet","protocol":"tinyman","protocolVersion":"v2","action":"removeLiquidity","variant":"multipleAssetsOut","shapeVersion":"1.0.0","title":"Tinyman v2 remove liquidity (multiple assets out)","description":"Removes liquidity from an existing Tinyman AMM v2 pool, returning both pool assets proportionally. Generates the documented 2-transaction group (pool token transfer, remove_liquidity app call) as unsigned transactions.","summary":"Removes liquidity from an existing Tinyman AMM v2 pool, returning both pool assets proportionally. Generates the documented 2-transaction group (pool token transfer, remove_liquidity app call) as unsigned transactions.","opportunityRole":"exit","supportedOpportunityTypes":["lp"],"requiredInputs":["userAddress","assetAId","assetBId","poolTokenAmount","maxSlippageBps"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk RemoveLiquidity.v2 (getQuote/generateTxns)"},{"kind":"docs","description":"Tinyman v2 integration: remove liquidity (multiple assets out)","url":"https://docs.tinyman.org/v2-integration/protocol-methods/remove-liquidity"}],"docsPath":"protocol/docs/execution-shapes/tinyman-remove-liquidity-multiple-assets-out.md"},{"shapeKey":"mainnet:tinyman:v2:removeLiquidity:singleAssetOut","network":"mainnet","protocol":"tinyman","protocolVersion":"v2","action":"removeLiquidity","variant":"singleAssetOut","shapeVersion":"1.0.0","title":"Tinyman v2 remove liquidity (single asset out)","description":"Removes liquidity from an existing Tinyman AMM v2 pool, returning a single chosen pool asset via an internal swap. Generates the documented 2-transaction group (pool token transfer, remove_liquidity app call) as unsigned transactions.","summary":"Removes liquidity from an existing Tinyman AMM v2 pool, returning a single chosen pool asset via an internal swap. Generates the documented 2-transaction group (pool token transfer, remove_liquidity app call) as unsigned transactions.","opportunityRole":"exit","supportedOpportunityTypes":["lp"],"requiredInputs":["userAddress","assetAId","assetBId","outputAssetId","poolTokenAmount","maxSlippageBps"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk RemoveLiquidity.v2 (getSingleAssetRemoveLiquidityQuote/generateSingleAssetOutTxns)"},{"kind":"docs","description":"Tinyman v2 integration: remove liquidity (single asset out)","url":"https://docs.tinyman.org/v2-integration/protocol-methods/remove-liquidity"}],"docsPath":"protocol/docs/execution-shapes/tinyman-remove-liquidity-single-asset-out.md"},{"shapeKey":"mainnet:tinyman:staking-v1:farm:commit","network":"mainnet","protocol":"tinyman","protocolVersion":"staking-v1","action":"farm","variant":"commit","shapeVersion":"1.0.0","title":"Tinyman farm commit (existing LP position)","description":"Commits an existing Tinyman LP-token position to a Tinyman farm (staking program). LP tokens never leave the wallet; the commit is a staking app call that records the committed amount, optionally followed by a log_balance call for a required asset.","summary":"Commits an existing Tinyman LP-token position to a Tinyman farm (staking program). LP tokens never leave the wallet; the commit is a staking app call that records the committed amount, optionally followed by a log_balance call for a required asset.","opportunityRole":"enter","supportedOpportunityTypes":["farm"],"requiredInputs":["userAddress","commitAmount"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk prepareCommitTransactions/getStakingAppID"}],"docsPath":"protocol/docs/execution-shapes/tinyman-farm-commit.md"},{"shapeKey":"mainnet:tinyman:staking-v1:farm:uncommit","network":"mainnet","protocol":"tinyman","protocolVersion":"staking-v1","action":"farm","variant":"uncommit","shapeVersion":"1.0.0","title":"Tinyman farm uncommit (lower or clear LP commitment)","description":"Lowers or clears a Tinyman farm commitment by re-calling prepareCommitTransactions with an absolute commitment amount (typically 0 for a full uncommit). LP tokens stay in the wallet; mid-cycle eligibility loss is a product caveat.","summary":"Lowers or clears a Tinyman farm commitment by re-calling prepareCommitTransactions with an absolute commitment amount (typically 0 for a full uncommit). LP tokens stay in the wallet; mid-cycle eligibility loss is a product caveat.","opportunityRole":"exit","supportedOpportunityTypes":["farm"],"requiredInputs":["userAddress","commitAmount"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk prepareCommitTransactions (absolute commit amount; 0 = uncommit)"}],"docsPath":"protocol/docs/execution-shapes/tinyman-farm-uncommit.md"},{"shapeKey":"mainnet:tinyman:staking-v1:farm:claimRewards","network":"mainnet","protocol":"tinyman","protocolVersion":"staking-v1","action":"farm","variant":"claimRewards","shapeVersion":"1.1.0","title":"Tinyman farm claim pending rewards","description":"Claims unpaid Tinyman farm rewards for a staking program. Transaction bytes are prepared by the Tinyman Analytics API (`POST /staking/rewards/prepare-claim-transactions/`). User legs are returned for local signing; the TINY distribution leg is protocol-authorized via Analytics `POST /staking/rewards/claim/` (Tinyman cosigns the distribution account and submits). Does not call the Analytics claim endpoint itself.","summary":"Claims unpaid Tinyman farm rewards for a staking program. Transaction bytes are prepared by the Tinyman Analytics API (`POST /staking/rewards/prepare-claim-transactions/`). User legs are returned for local signing; the TINY distribution leg is protocol-authorized via Analytics `POST /staking/rewards/claim/` (Tinyman cosigns the distribution account and submits). Does not call the Analytics claim endpoint itself.","opportunityRole":"manage","supportedOpportunityTypes":["farm"],"requiredInputs":["userAddress","programId","poolAddress"],"sources":[{"kind":"api","description":"Tinyman Analytics POST /api/v1/staking/rewards/prepare-claim-transactions/ and POST /api/v1/staking/rewards/claim/"}],"docsPath":"protocol/docs/execution-shapes/tinyman-farm-claim-rewards.md"},{"shapeKey":"mainnet:tinyman:v2:addLiquidityAndFarm:flexible","network":"mainnet","protocol":"tinyman","protocolVersion":"v2","action":"addLiquidityAndFarm","variant":"flexible","shapeVersion":"1.0.0","title":"Tinyman v2 flexible add liquidity and farm commit","description":"Adds two-sided flexible liquidity to a Tinyman AMM v2 pool and, in the same atomic group, commits the newly minted LP position to a Tinyman farm. LP tokens never leave the wallet; the farm commit is a staking app call. Returns the combined, regrouped unsigned transaction group.","summary":"Adds two-sided flexible liquidity to a Tinyman AMM v2 pool and, in the same atomic group, commits the newly minted LP position to a Tinyman farm. LP tokens never leave the wallet; the farm commit is a staking app call. Returns the combined, regrouped unsigned transaction group.","opportunityRole":"enter","supportedOpportunityTypes":["farm"],"requiredInputs":["userAddress","assetAId","assetAAmount","assetBId","assetBAmount","maxSlippageBps"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk AddLiquidity.v2.flexible + prepareCommitTransactions + combineAndRegroupSignerTxns"},{"kind":"docs","description":"Tinyman v2 integration: add subsequent liquidity (flexible)","url":"https://docs.tinyman.org/v2-integration/protocol-methods/add-subsequent-liquidity"}],"docsPath":"protocol/docs/execution-shapes/tinyman-add-liquidity-and-farm-flexible.md"},{"shapeKey":"mainnet:tinyman:v2:addLiquidityAndFarm:singleAsset","network":"mainnet","protocol":"tinyman","protocolVersion":"v2","action":"addLiquidityAndFarm","variant":"singleAsset","shapeVersion":"1.0.0","title":"Tinyman v2 single-asset add liquidity and farm commit","description":"Adds one-sided liquidity to a Tinyman AMM v2 pool and, in the same atomic group, commits the newly minted LP position to a Tinyman farm. LP tokens never leave the wallet; the farm commit is a staking app call. Returns the combined, regrouped unsigned transaction group.","summary":"Adds one-sided liquidity to a Tinyman AMM v2 pool and, in the same atomic group, commits the newly minted LP position to a Tinyman farm. LP tokens never leave the wallet; the farm commit is a staking app call. Returns the combined, regrouped unsigned transaction group.","opportunityRole":"enter","supportedOpportunityTypes":["farm"],"requiredInputs":["userAddress","assetAId","assetBId","depositAssetId","depositAmount","maxSlippageBps"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk AddLiquidity.v2.withSingleAsset + prepareCommitTransactions + combineAndRegroupSignerTxns"},{"kind":"docs","description":"Tinyman v2 integration: add subsequent liquidity (single asset)","url":"https://docs.tinyman.org/v2-integration/protocol-methods/add-subsequent-liquidity"}],"docsPath":"protocol/docs/execution-shapes/tinyman-add-liquidity-and-farm-single-asset.md"},{"shapeKey":"mainnet:tinyman:liquid-stake-v1:mint:tAlgo","network":"mainnet","protocol":"tinyman","protocolVersion":"liquid-stake-v1","action":"mint","variant":"tAlgo","shapeVersion":"1.0.0","title":"Tinyman liquid stake mint tALGO","description":"Stakes ALGO into Tinyman's liquid-staking app and mints tALGO. Builds the SDK mint group (optional tALGO opt-in, ALGO payment, mint app call) as unsigned transactions.","summary":"Stakes ALGO into Tinyman's liquid-staking app and mints tALGO. Builds the SDK mint group (optional tALGO opt-in, ALGO payment, mint app call) as unsigned transactions.","opportunityRole":"enter","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","amount"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk TinymanTAlgoClient.mint"}],"docsPath":"protocol/docs/execution-shapes/tinyman-mint-talgo.md"},{"shapeKey":"mainnet:tinyman:liquid-stake-v1:burn:tAlgo","network":"mainnet","protocol":"tinyman","protocolVersion":"liquid-stake-v1","action":"burn","variant":"tAlgo","shapeVersion":"1.0.0","title":"Tinyman liquid stake burn tALGO","description":"Burns tALGO to redeem ALGO from Tinyman's liquid-staking app. Builds the SDK burn group (tALGO transfer, burn app call) as unsigned transactions.","summary":"Burns tALGO to redeem ALGO from Tinyman's liquid-staking app. Builds the SDK burn group (tALGO transfer, burn app call) as unsigned transactions.","opportunityRole":"exit","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","amount"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk TinymanTAlgoClient.burn"}],"docsPath":"protocol/docs/execution-shapes/tinyman-burn-talgo.md"},{"shapeKey":"mainnet:tinyman:restake-v1:increaseStake:stAlgo","network":"mainnet","protocol":"tinyman","protocolVersion":"restake-v1","action":"increaseStake","variant":"stAlgo","shapeVersion":"1.0.0","title":"Tinyman restake increase stALGO","description":"Restakes tALGO into Tinyman's restaking app and mints stALGO. Builds the SDK increaseStake group (optional rate-change / box MBR / stALGO opt-in, tALGO transfer, increase_stake app call) as unsigned transactions.","summary":"Restakes tALGO into Tinyman's restaking app and mints stALGO. Builds the SDK increaseStake group (optional rate-change / box MBR / stALGO opt-in, tALGO transfer, increase_stake app call) as unsigned transactions.","opportunityRole":"enter","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","amount"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk TinymanSTAlgoClient.increaseStake"}],"docsPath":"protocol/docs/execution-shapes/tinyman-increase-stake-stalgo.md"},{"shapeKey":"mainnet:tinyman:restake-v1:decreaseStake:stAlgo","network":"mainnet","protocol":"tinyman","protocolVersion":"restake-v1","action":"decreaseStake","variant":"stAlgo","shapeVersion":"1.0.0","title":"Tinyman restake decrease stALGO","description":"Unrestakes stALGO from Tinyman's restaking app and returns tALGO. Builds the SDK decreaseStake group (optional rate-change / tALGO opt-in, decrease_stake app call) as unsigned transactions.","summary":"Unrestakes stALGO from Tinyman's restaking app and returns tALGO. Builds the SDK decreaseStake group (optional rate-change / tALGO opt-in, decrease_stake app call) as unsigned transactions.","opportunityRole":"exit","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","amount"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk TinymanSTAlgoClient.decreaseStake"}],"docsPath":"protocol/docs/execution-shapes/tinyman-decrease-stake-stalgo.md"},{"shapeKey":"mainnet:tinyman:restake-v1:claimRewards:stAlgo","network":"mainnet","protocol":"tinyman","protocolVersion":"restake-v1","action":"claimRewards","variant":"stAlgo","shapeVersion":"1.0.0","title":"Tinyman restake claim TINY rewards","description":"Claims accrued TINY rewards from Tinyman's tALGO restaking app. Builds the SDK claimRewards group (optional rate-change / TINY opt-in, claim_rewards app call) as unsigned transactions.","summary":"Claims accrued TINY rewards from Tinyman's tALGO restaking app. Builds the SDK claimRewards group (optional rate-change / TINY opt-in, claim_rewards app call) as unsigned transactions.","opportunityRole":"manage","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk TinymanSTAlgoClient.claimRewards"}],"docsPath":"protocol/docs/execution-shapes/tinyman-claim-rewards-stalgo.md"},{"shapeKey":"mainnet:tinyman:v2:swap:fixedInput","network":"mainnet","protocol":"tinyman","protocolVersion":"v2","action":"swap","variant":"fixedInput","shapeVersion":"1.0.0","title":"Tinyman v2 Swap Router (fixed-input)","description":"Quotes Tinyman Swap Router vs a single Tinyman v2 pool for a fixed input and returns an unsigned group. Uses the router when it beats the single-pool path; otherwise falls back and documents why. Tinyman-pool only — not a cross-DEX aggregator. Canix does not sign or submit.","summary":"Quotes Tinyman Swap Router vs a single Tinyman v2 pool for a fixed input and returns an unsigned group. Uses the router when it beats the single-pool path; otherwise falls back and documents why. Tinyman-pool only — not a cross-DEX aggregator. Canix does not sign or submit.","opportunityRole":"enter","supportedOpportunityTypes":[],"requiredInputs":["userAddress","assetInId","assetOutId","amount","maxSlippageBps"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk getSwapRoute + direct v2 quotes compared on net return (not Swap.v2.getQuote rate), then generateSwapRouterTxns / generateTxns (unsigned)","url":"https://github.com/tinymanorg/tinyman-js-sdk"},{"kind":"docs","description":"Tinyman Swap Router (Tinyman-pool multi-hop, no extra router fee beyond AMM v2)","url":"https://docs.tinyman.org/swap-router"}],"docsPath":"protocol/docs/execution-shapes/tinyman-swap-router.md"},{"shapeKey":"mainnet:tinyman:v2:swap:fixedOutput","network":"mainnet","protocol":"tinyman","protocolVersion":"v2","action":"swap","variant":"fixedOutput","shapeVersion":"1.0.0","title":"Tinyman v2 Swap Router (fixed-output)","description":"Quotes Tinyman Swap Router vs a single Tinyman v2 pool for a fixed output and returns an unsigned group. Uses the router when it beats the single-pool path; otherwise falls back and documents why. Tinyman-pool only — not a cross-DEX aggregator. Canix does not sign or submit.","summary":"Quotes Tinyman Swap Router vs a single Tinyman v2 pool for a fixed output and returns an unsigned group. Uses the router when it beats the single-pool path; otherwise falls back and documents why. Tinyman-pool only — not a cross-DEX aggregator. Canix does not sign or submit.","opportunityRole":"enter","supportedOpportunityTypes":[],"requiredInputs":["userAddress","assetInId","assetOutId","amount","maxSlippageBps"],"sources":[{"kind":"sdk","description":"@tinymanorg/tinyman-js-sdk getSwapRoute + direct v2 quotes compared on net return (not Swap.v2.getQuote rate), then generateSwapRouterTxns / generateTxns (unsigned)","url":"https://github.com/tinymanorg/tinyman-js-sdk"},{"kind":"docs","description":"Tinyman Swap Router (Tinyman-pool multi-hop, no extra router fee beyond AMM v2)","url":"https://docs.tinyman.org/swap-router"}],"docsPath":"protocol/docs/execution-shapes/tinyman-swap-router.md"},{"shapeKey":"mainnet:folks-finance:v2:setup:depositEscrow","network":"mainnet","protocol":"folks-finance","protocolVersion":"v2","action":"setup","variant":"depositEscrow","shapeVersion":"1.1.0","title":"Folks Finance v2 add deposit escrow","description":"Creates and funds a new Folks Finance deposit escrow for the user. Returns a 3-transaction group that must be signed by both the user and the generated escrow account.","summary":"Creates and funds a new Folks Finance deposit escrow for the user. Returns a 3-transaction group that must be signed by both the user and the generated escrow account.","opportunityRole":"enter","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress"],"sources":[{"kind":"sdk","description":"@folks-finance/algorand-sdk prepareAddDepositEscrowToDeposits"},{"kind":"docs","description":"Folks Finance recoverable deposit escrow minimum-balance funding","url":"https://docs.folks.finance/introduction/need-help/fees"}],"docsPath":"protocol/docs/execution-shapes/folks-finance-setup-deposit-escrow.md"},{"shapeKey":"mainnet:folks-finance:v2:setup:optEscrowAsset","network":"mainnet","protocol":"folks-finance","protocolVersion":"v2","action":"setup","variant":"optEscrowAsset","shapeVersion":"1.1.0","title":"Folks Finance v2 opt deposit escrow into pool fAsset","description":"Funds and opts an existing Folks Finance deposit escrow into a pool fAsset so it can receive deposits.","summary":"Funds and opts an existing Folks Finance deposit escrow into a pool fAsset so it can receive deposits.","opportunityRole":"enter","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","escrowAddress"],"sources":[{"kind":"sdk","description":"@folks-finance/algorand-sdk prepareOptDepositEscrowIntoAssetInDeposits"},{"kind":"docs","description":"Folks Finance recoverable per-asset minimum-balance funding","url":"https://docs.folks.finance/introduction/need-help/fees"}],"docsPath":"protocol/docs/execution-shapes/folks-finance-setup-opt-escrow-asset.md"},{"shapeKey":"mainnet:folks-finance:v2:deposit:escrow","network":"mainnet","protocol":"folks-finance","protocolVersion":"v2","action":"deposit","variant":"escrow","shapeVersion":"1.0.0","title":"Folks Finance v2 escrow deposit","description":"Deposits an underlying asset into a Folks Finance lending pool via a deposit escrow. fAssets accrue in the escrow rather than the user's wallet. Generates the SDK deposit group (asset transfer + deposit app call), optionally prefixed with OpUp.","summary":"Deposits an underlying asset into a Folks Finance lending pool via a deposit escrow. fAssets accrue in the escrow rather than the user's wallet. Generates the SDK deposit group (asset transfer + deposit app call), optionally prefixed with OpUp.","opportunityRole":"enter","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","assetAmount"],"sources":[{"kind":"sdk","description":"@folks-finance/algorand-sdk prepareDepositIntoPool (escrow receiver) + prefixWithOpUp"}],"docsPath":"protocol/docs/execution-shapes/folks-finance-deposit-escrow.md"},{"shapeKey":"mainnet:folks-finance:v2:withdraw:escrow","network":"mainnet","protocol":"folks-finance","protocolVersion":"v2","action":"withdraw","variant":"escrow","shapeVersion":"1.0.0","title":"Folks Finance v2 escrow withdraw","description":"Withdraws underlying assets from a Folks Finance lending pool via a deposit escrow. Generates the SDK deposits-app withdraw call; assets are sent to the user wallet.","summary":"Withdraws underlying assets from a Folks Finance lending pool via a deposit escrow. Generates the SDK deposits-app withdraw call; assets are sent to the user wallet.","opportunityRole":"exit","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","amount","amountDenomination"],"sources":[{"kind":"sdk","description":"@folks-finance/algorand-sdk prepareWithdrawFromDepositEscrowInDeposits"}],"docsPath":"protocol/docs/execution-shapes/folks-finance-withdraw-escrow.md"},{"shapeKey":"mainnet:folks-finance:v2:setup:loanEscrow","network":"mainnet","protocol":"folks-finance","protocolVersion":"v2","action":"setup","variant":"loanEscrow","shapeVersion":"1.0.0","title":"Folks Finance v2 create loan escrow","description":"Creates and funds a new Folks Finance loan escrow for the user. Returns a 3-transaction group that must be signed by both the user and the generated escrow account. loanAppId defaults to MainnetLoans.GENERAL.","summary":"Creates and funds a new Folks Finance loan escrow for the user. Returns a 3-transaction group that must be signed by both the user and the generated escrow account. loanAppId defaults to MainnetLoans.GENERAL.","opportunityRole":"enter","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress"],"sources":[{"kind":"sdk","description":"@folks-finance/algorand-sdk prepareCreateUserLoan"}],"docsPath":"protocol/docs/execution-shapes/folks-finance-setup-loan-escrow.md"},{"shapeKey":"mainnet:folks-finance:v2:setup:addCollateral","network":"mainnet","protocol":"folks-finance","protocolVersion":"v2","action":"setup","variant":"addCollateral","shapeVersion":"1.0.0","title":"Folks Finance v2 add collateral slot to loan","description":"Opts a Folks Finance loan escrow into a pool fAsset so collateral can be deposited and synced. Wraps prepareAddCollateralToLoan.","summary":"Opts a Folks Finance loan escrow into a pool fAsset so collateral can be deposited and synced. Wraps prepareAddCollateralToLoan.","opportunityRole":"enter","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","escrowAddress"],"sources":[{"kind":"sdk","description":"@folks-finance/algorand-sdk prepareAddCollateralToLoan"}],"docsPath":"protocol/docs/execution-shapes/folks-finance-setup-add-collateral.md"},{"shapeKey":"mainnet:folks-finance:v2:collateral:sync","network":"mainnet","protocol":"folks-finance","protocolVersion":"v2","action":"collateral","variant":"sync","shapeVersion":"1.0.0","title":"Folks Finance v2 sync loan collateral","description":"Registers fAsset balance held by a loan escrow as collateral via prepareSyncCollateralInLoan (oracle price refresh + sync_collateral). includeOpUp defaults to true.","summary":"Registers fAsset balance held by a loan escrow as collateral via prepareSyncCollateralInLoan (oracle price refresh + sync_collateral). includeOpUp defaults to true.","opportunityRole":"manage","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","escrowAddress"],"sources":[{"kind":"sdk","description":"@folks-finance/algorand-sdk prepareSyncCollateralInLoan + prefixWithOpUp"}],"docsPath":"protocol/docs/execution-shapes/folks-finance-collateral-sync.md"},{"shapeKey":"mainnet:folks-finance:v2:borrow:variable","network":"mainnet","protocol":"folks-finance","protocolVersion":"v2","action":"borrow","variant":"variable","shapeVersion":"1.0.0","title":"Folks Finance v2 variable-rate borrow","description":"Borrows an underlying asset from a Folks Finance pool against loan escrow collateral at a variable rate (maxStableRate=0). Wraps prepareBorrowFromLoan with optional OpUp.","summary":"Borrows an underlying asset from a Folks Finance pool against loan escrow collateral at a variable rate (maxStableRate=0). Wraps prepareBorrowFromLoan with optional OpUp.","opportunityRole":"enter","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","escrowAddress","borrowAmount"],"sources":[{"kind":"sdk","description":"@folks-finance/algorand-sdk prepareBorrowFromLoan + prefixWithOpUp"}],"docsPath":"protocol/docs/execution-shapes/folks-finance-borrow-variable.md"},{"shapeKey":"mainnet:folks-finance:v2:repay:withTxn","network":"mainnet","protocol":"folks-finance","protocolVersion":"v2","action":"repay","variant":"withTxn","shapeVersion":"1.0.0","title":"Folks Finance v2 repay loan with transfer","description":"Repays variable-rate Folks Finance debt by transferring the underlying asset from the user wallet. Wraps prepareRepayLoanWithTxn with isStable=false by default and MainnetReserveAddress.","summary":"Repays variable-rate Folks Finance debt by transferring the underlying asset from the user wallet. Wraps prepareRepayLoanWithTxn with isStable=false by default and MainnetReserveAddress.","opportunityRole":"exit","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","escrowAddress","repayAmount"],"sources":[{"kind":"sdk","description":"@folks-finance/algorand-sdk prepareRepayLoanWithTxn"}],"docsPath":"protocol/docs/execution-shapes/folks-finance-repay-with-txn.md"},{"shapeKey":"mainnet:folks-finance:v2:collateral:reduce","network":"mainnet","protocol":"folks-finance","protocolVersion":"v2","action":"collateral","variant":"reduce","shapeVersion":"1.0.0","title":"Folks Finance v2 reduce loan collateral","description":"Withdraws collateral from a Folks Finance loan escrow back to a receiver (typically the deposit escrow) via prepareReduceCollateralFromLoan. includeOpUp defaults to true.","summary":"Withdraws collateral from a Folks Finance loan escrow back to a receiver (typically the deposit escrow) via prepareReduceCollateralFromLoan. includeOpUp defaults to true.","opportunityRole":"exit","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","escrowAddress","amount","amountDenomination"],"sources":[{"kind":"sdk","description":"@folks-finance/algorand-sdk prepareReduceCollateralFromLoan + prefixWithOpUp"}],"docsPath":"protocol/docs/execution-shapes/folks-finance-collateral-reduce.md"},{"shapeKey":"mainnet:folks-finance:xalgo-v1:stake:immediate","network":"mainnet","protocol":"folks-finance","protocolVersion":"xalgo-v1","action":"stake","variant":"immediate","shapeVersion":"1.0.0","title":"Folks Finance xALGO immediate stake","description":"Stakes ALGO into Folks Finance liquid staking and mints xALGO immediately. Builds the SDK immediate_mint group (ALGO payment + consensus app call, with optional OpUp and resource-allocation dummy calls) as unsigned transactions.","summary":"Stakes ALGO into Folks Finance liquid staking and mints xALGO immediately. Builds the SDK immediate_mint group (ALGO payment + consensus app call, with optional OpUp and resource-allocation dummy calls) as unsigned transactions.","opportunityRole":"enter","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","amount"],"sources":[{"kind":"sdk","description":"@folks-finance/algorand-sdk prepareImmediateStakeTransactions + prefixWithOpUp"}],"docsPath":"protocol/docs/execution-shapes/folks-finance-stake-immediate.md"},{"shapeKey":"mainnet:folks-finance:xalgo-v1:unstake:immediate","network":"mainnet","protocol":"folks-finance","protocolVersion":"xalgo-v1","action":"unstake","variant":"immediate","shapeVersion":"1.0.0","title":"Folks Finance xALGO immediate unstake","description":"Burns xALGO to redeem ALGO from Folks Finance liquid staking immediately. Builds the SDK burn group (xALGO transfer + consensus app call, with optional OpUp and resource-allocation dummy calls) as unsigned transactions.","summary":"Burns xALGO to redeem ALGO from Folks Finance liquid staking immediately. Builds the SDK burn group (xALGO transfer + consensus app call, with optional OpUp and resource-allocation dummy calls) as unsigned transactions.","opportunityRole":"exit","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","amount"],"sources":[{"kind":"sdk","description":"@folks-finance/algorand-sdk prepareUnstakeTransactions + prefixWithOpUp"}],"docsPath":"protocol/docs/execution-shapes/folks-finance-unstake-immediate.md"},{"shapeKey":"mainnet:pact:v1:addLiquidity:twoSided","network":"mainnet","protocol":"pact","protocolVersion":"v1","action":"addLiquidity","variant":"twoSided","shapeVersion":"1.0.0","title":"Pact v1 two-sided add liquidity","description":"Adds two-sided liquidity to an existing Pact AMM pool. Generates the documented 3-transaction group (primary asset deposit, secondary asset deposit, ADDLIQ app call) as unsigned transactions.","summary":"Adds two-sided liquidity to an existing Pact AMM pool. Generates the documented 3-transaction group (primary asset deposit, secondary asset deposit, ADDLIQ app call) as unsigned transactions.","opportunityRole":"enter","supportedOpportunityTypes":["lp"],"requiredInputs":["userAddress","poolAppId","assetAId","assetAAmount","assetBId","assetBAmount","maxSlippageBps"],"sources":[{"kind":"sdk","description":"@pactfi/pactsdk Pool.prepareAddLiquidity / buildAddLiquidityTxs"},{"kind":"docs","description":"Pact JS SDK pool liquidity management","url":"https://pactfi.github.io/pact-js-sdk/latest/classes/Pool.html"}],"docsPath":"protocol/docs/execution-shapes/pact-add-liquidity-two-sided.md"},{"shapeKey":"mainnet:pact:v1:removeLiquidity:proportional","network":"mainnet","protocol":"pact","protocolVersion":"v1","action":"removeLiquidity","variant":"proportional","shapeVersion":"1.0.0","title":"Pact v1 proportional remove liquidity","description":"Removes liquidity from an existing Pact AMM pool proportionally. Generates the documented 2-transaction group (LP token deposit, REMLIQ app call) as unsigned transactions.","summary":"Removes liquidity from an existing Pact AMM pool proportionally. Generates the documented 2-transaction group (LP token deposit, REMLIQ app call) as unsigned transactions.","opportunityRole":"exit","supportedOpportunityTypes":["lp"],"requiredInputs":["userAddress","poolAppId","poolTokenAmount"],"sources":[{"kind":"sdk","description":"@pactfi/pactsdk Pool.buildRemoveLiquidityTxs"},{"kind":"docs","description":"Pact JS SDK pool liquidity management","url":"https://pactfi.github.io/pact-js-sdk/latest/classes/Pool.html"}],"docsPath":"protocol/docs/execution-shapes/pact-remove-liquidity-proportional.md"},{"shapeKey":"mainnet:pact:v1:farm:deployEscrow","network":"mainnet","protocol":"pact","protocolVersion":"v1","action":"farm","variant":"deployEscrow","shapeVersion":"1.0.0","title":"Pact farm deploy escrow (first-time setup)","description":"Deploys a per-user Pact Micro Farming escrow application for a farm and opts the wallet into the farm app. Escrow creation must confirm before staking; the escrow app id is unknown until this group confirms, so stake cannot be atomic with deploy.","summary":"Deploys a per-user Pact Micro Farming escrow application for a farm and opts the wallet into the farm app. Escrow creation must confirm before staking; the escrow app id is unknown until this group confirms, so stake cannot be atomic with deploy.","opportunityRole":"enter","supportedOpportunityTypes":["farm"],"requiredInputs":["userAddress","farmAppId"],"sources":[{"kind":"sdk","description":"@pactfi/pactsdk Farm.prepareDeployEscrowTxs / buildDeployEscrowTxs"},{"kind":"docs","description":"Pact Micro Farming escrow pattern","url":"https://pactfi.github.io/pact-js-sdk/latest/classes/Farm.html"}],"docsPath":"protocol/docs/execution-shapes/pact-farm-deploy-escrow.md"},{"shapeKey":"mainnet:pact:v1:farm:stake","network":"mainnet","protocol":"pact","protocolVersion":"v1","action":"farm","variant":"stake","shapeVersion":"1.0.0","title":"Pact farm stake (existing LP into escrow)","description":"Stakes an existing Pact LP-token balance into a Pact farm escrow. LP tokens leave the wallet via an ASA transfer to the user's farm escrow, followed by farm update app call(s). Requires a previously deployed escrow (farm:deployEscrow).","summary":"Stakes an existing Pact LP-token balance into a Pact farm escrow. LP tokens leave the wallet via an ASA transfer to the user's farm escrow, followed by farm update app call(s). Requires a previously deployed escrow (farm:deployEscrow).","opportunityRole":"enter","supportedOpportunityTypes":["farm"],"requiredInputs":["userAddress","farmAppId","amount"],"sources":[{"kind":"sdk","description":"@pactfi/pactsdk Escrow.buildStakeTxs"},{"kind":"docs","description":"Pact Escrow stake","url":"https://pactfi.github.io/pact-js-sdk/latest/classes/Escrow.html"}],"docsPath":"protocol/docs/execution-shapes/pact-farm-stake.md"},{"shapeKey":"mainnet:pact:v1:farm:unstake","network":"mainnet","protocol":"pact","protocolVersion":"v1","action":"farm","variant":"unstake","shapeVersion":"1.0.0","title":"Pact farm unstake (return LP from escrow)","description":"Unstakes LP tokens from a Pact farm escrow back to the wallet. Calls the user's escrow application, which returns the staked LP ASA to the user.","summary":"Unstakes LP tokens from a Pact farm escrow back to the wallet. Calls the user's escrow application, which returns the staked LP ASA to the user.","opportunityRole":"exit","supportedOpportunityTypes":["farm"],"requiredInputs":["userAddress","farmAppId","amount"],"sources":[{"kind":"sdk","description":"@pactfi/pactsdk Escrow.buildUnstakeTxs"}],"docsPath":"protocol/docs/execution-shapes/pact-farm-unstake.md"},{"shapeKey":"mainnet:pact:v1:farm:claimRewards","network":"mainnet","protocol":"pact","protocolVersion":"v1","action":"farm","variant":"claimRewards","shapeVersion":"1.0.0","title":"Pact farm claim rewards","description":"Claims accrued Pact farm reward ASAs into the wallet via the farm application, using the user's farm escrow reference. User must already be opted into each reward asset.","summary":"Claims accrued Pact farm reward ASAs into the wallet via the farm application, using the user's farm escrow reference. User must already be opted into each reward asset.","opportunityRole":"manage","supportedOpportunityTypes":["farm"],"requiredInputs":["userAddress","farmAppId"],"sources":[{"kind":"sdk","description":"@pactfi/pactsdk Escrow.buildClaimRewardsTx / Farm.buildClaimRewardsTx"}],"docsPath":"protocol/docs/execution-shapes/pact-farm-claim-rewards.md"},{"shapeKey":"mainnet:pact:v1:addLiquidityAndFarm:twoSided","network":"mainnet","protocol":"pact","protocolVersion":"v1","action":"addLiquidityAndFarm","variant":"twoSided","shapeVersion":"1.0.0","title":"Pact v1 two-sided add liquidity and farm stake","description":"Adds two-sided liquidity to a Pact AMM pool and, in the same atomic group, stakes the newly minted LP tokens into an existing Pact farm escrow (LP leaves the wallet). Requires a previously deployed farm escrow.","summary":"Adds two-sided liquidity to a Pact AMM pool and, in the same atomic group, stakes the newly minted LP tokens into an existing Pact farm escrow (LP leaves the wallet). Requires a previously deployed farm escrow.","opportunityRole":"enter","supportedOpportunityTypes":["farm"],"requiredInputs":["userAddress","farmAppId","poolAppId","assetAId","assetAAmount","assetBId","assetBAmount","maxSlippageBps"],"sources":[{"kind":"sdk","description":"@pactfi/pactsdk Pool.prepareAddLiquidity / buildAddLiquidityTxs + Escrow.buildStakeTxs"}],"docsPath":"protocol/docs/execution-shapes/pact-add-liquidity-and-farm-two-sided.md"},{"shapeKey":"mainnet:pact:smart-router:swap:fixed-input","network":"mainnet","protocol":"pact","protocolVersion":"smart-router","action":"swap","variant":"fixed-input","shapeVersion":"1.0.0","title":"Pact Smart Router fixed-input swap","description":"Quotes a 1–3 hop Pact route (local graph + Pool.prepareSwap) and builds an unsigned deposit + router SWAP group. Not a direct single-pool Pact swap. Canix never signs or submits.","summary":"Quotes a 1–3 hop Pact route (local graph + Pool.prepareSwap) and builds an unsigned deposit + router SWAP group. Not a direct single-pool Pact swap. Canix never signs or submits.","opportunityRole":"enter","supportedOpportunityTypes":[],"requiredInputs":["userAddress","fromAssetId","toAssetId","amount","maxSlippageBps"],"sources":[{"kind":"docs","description":"Pact Smart Router on-chain group: deposit source asset then SWAP app calls (router.md)","url":"https://github.com/pactfi/pact-docs/blob/master/router.md"},{"kind":"sdk","description":"No SDK Smart Router helper; hop quotes use @pactfi/pactsdk Pool.prepareSwap after GET /pools discovery"},{"kind":"api","description":"GET {PACT_API_BASE_URL}/pools (fallback /pools/all) — pool discovery only, not a route solver"}],"docsPath":"protocol/docs/execution-shapes/pact-smart-router-swap.md"},{"shapeKey":"mainnet:compx:v1:deposit:asa","network":"mainnet","protocol":"compx","protocolVersion":"v1","action":"deposit","variant":"asa","shapeVersion":"1.0.0","title":"CompX v1 ASA lending deposit","description":"Deposits a base ASA into a CompX lending market and receives LST tokens. Wraps @compx/sdk buildDepositTransactions, including the optional leading LST opt-in when needed.","summary":"Deposits a base ASA into a CompX lending market and receives LST tokens. Wraps @compx/sdk buildDepositTransactions, including the optional leading LST opt-in when needed.","opportunityRole":"enter","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","marketAppId","amount"],"sources":[{"kind":"sdk","description":"@compx/sdk buildDepositTransactions / depositASA(axfer,uint64)void"}],"docsPath":"protocol/docs/execution-shapes/compx-deposit-asa.md"},{"shapeKey":"mainnet:compx:v1:withdraw:asa","network":"mainnet","protocol":"compx","protocolVersion":"v1","action":"withdraw","variant":"asa","shapeVersion":"1.0.0","title":"CompX v1 ASA lending withdraw","description":"Withdraws base ASA from a CompX lending market by burning LST tokens. The amount is LST-denominated. Wraps @compx/sdk buildWithdrawTransactions, including the optional leading base-asset opt-in when needed.","summary":"Withdraws base ASA from a CompX lending market by burning LST tokens. The amount is LST-denominated. Wraps @compx/sdk buildWithdrawTransactions, including the optional leading base-asset opt-in when needed.","opportunityRole":"exit","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","marketAppId","amount"],"sources":[{"kind":"sdk","description":"@compx/sdk buildWithdrawTransactions / withdrawDeposit(axfer,uint64)void"}],"docsPath":"protocol/docs/execution-shapes/compx-withdraw-asa.md"},{"shapeKey":"mainnet:compx:v1:borrow:asa","network":"mainnet","protocol":"compx","protocolVersion":"v1","action":"borrow","variant":"asa","shapeVersion":"1.0.1","title":"CompX v1 ASA lending borrow","description":"Borrows a base ASA from a CompX lending market against accepted LST collateral. Wraps @compx/sdk buildBorrowTransactions: optional base opt-in, gas()void, LST collateral transfer, then borrow(axfer,uint64,uint64,uint64)void. collateralTokenId must be in the market's on-chain accepted_collaterals set (often a cross-market LST such as cUSDC); defaults to the market LST when omitted.","summary":"Borrows a base ASA from a CompX lending market against accepted LST collateral. Wraps @compx/sdk buildBorrowTransactions: optional base opt-in, gas()void, LST collateral transfer, then borrow(axfer,uint64,uint64,uint64)void. collateralTokenId must be in the market's on-chain accepted_collaterals set (often a cross-market LST such as cUSDC); defaults to the market LST when omitted.","opportunityRole":"enter","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","marketAppId","borrowAmount","collateralAmount"],"sources":[{"kind":"sdk","description":"@compx/sdk buildBorrowTransactions / gas()void + borrow(axfer,uint64,uint64,uint64)void"}],"docsPath":"protocol/docs/execution-shapes/compx-borrow-asa.md"},{"shapeKey":"mainnet:compx:v1:repay:asa","network":"mainnet","protocol":"compx","protocolVersion":"v1","action":"repay","variant":"asa","shapeVersion":"1.0.1","title":"CompX v1 ASA lending repay","description":"Repays outstanding base-ASA debt on a CompX lending market. Wraps @compx/sdk buildRepayTransactions: base transfer then repayLoanASA(axfer,uint64)void. amount is base-asset denominated. App-call fees are floored to at least 2000 microAlgos after SDK simulation.","summary":"Repays outstanding base-ASA debt on a CompX lending market. Wraps @compx/sdk buildRepayTransactions: base transfer then repayLoanASA(axfer,uint64)void. amount is base-asset denominated. App-call fees are floored to at least 2000 microAlgos after SDK simulation.","opportunityRole":"exit","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","marketAppId","amount"],"sources":[{"kind":"sdk","description":"@compx/sdk buildRepayTransactions / repayLoanASA(axfer,uint64)void"}],"docsPath":"protocol/docs/execution-shapes/compx-repay-asa.md"},{"shapeKey":"mainnet:compx:v1:stake:asa","network":"mainnet","protocol":"compx","protocolVersion":"v1","action":"stake","variant":"asa","shapeVersion":"1.0.0","title":"CompX v1 ASA staking deposit","description":"Stakes an ASA into a CompX staking pool. Builds stake(axfer,uint64,pay)void from the ARC-56 spec: staked-asset transfer, optional staker-box MBR payment, and stake app call.","summary":"Stakes an ASA into a CompX staking pool. Builds stake(axfer,uint64,pay)void from the ARC-56 spec: staked-asset transfer, optional staker-box MBR payment, and stake app call.","opportunityRole":"enter","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","poolAppId","amount"],"sources":[{"kind":"arc56","description":"protocol/src/staking.arc56.json stake(axfer,uint64,pay)void"}],"docsPath":"protocol/docs/execution-shapes/compx-stake-asa.md"},{"shapeKey":"mainnet:compx:v1:unstake:asa","network":"mainnet","protocol":"compx","protocolVersion":"v1","action":"unstake","variant":"asa","shapeVersion":"1.0.0","title":"CompX v1 ASA staking withdraw","description":"Unstakes ASA from a CompX staking pool via unstake(uint64)void. Optionally prefixes a reward-asset opt-in when the user is not yet opted in.","summary":"Unstakes ASA from a CompX staking pool via unstake(uint64)void. Optionally prefixes a reward-asset opt-in when the user is not yet opted in.","opportunityRole":"exit","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","poolAppId","amount"],"sources":[{"kind":"arc56","description":"protocol/src/staking.arc56.json unstake(uint64)void"}],"docsPath":"protocol/docs/execution-shapes/compx-unstake-asa.md"},{"shapeKey":"mainnet:compx:v1:claim:rewards","network":"mainnet","protocol":"compx","protocolVersion":"v1","action":"claim","variant":"rewards","shapeVersion":"1.0.0","title":"CompX v1 staking reward claim","description":"Claims accrued staking rewards via claimRewards()void. Optionally prefixes a reward-asset opt-in when the user is not yet opted in.","summary":"Claims accrued staking rewards via claimRewards()void. Optionally prefixes a reward-asset opt-in when the user is not yet opted in.","opportunityRole":"manage","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","poolAppId"],"sources":[{"kind":"arc56","description":"protocol/src/staking.arc56.json claimRewards()void"}],"docsPath":"protocol/docs/execution-shapes/compx-claim-rewards.md"},{"shapeKey":"mainnet:dorkfi:v1:deposit:asa","network":"mainnet","protocol":"dorkfi","protocolVersion":"v1","action":"deposit","variant":"asa","shapeVersion":"1.0.0","title":"Dork.fi v1 ASA lending deposit","description":"Deposits an ASA into a Dork.fi lending market by wrapping through nt200, approving the pool, and calling lending.deposit. Amount is underlying ASA base units.","summary":"Deposits an ASA into a Dork.fi lending market by wrapping through nt200, approving the pool, and calling lending.deposit. Amount is underlying ASA base units.","opportunityRole":"enter","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","poolAppId","marketAppId","assetId","amount"],"sources":[{"kind":"docs","description":"Dork.fi lending pool ABI and DorkFiMCP ASA supply builder flow","url":"https://github.com/NautilusOSS/DorkFiMCP"}],"docsPath":"protocol/docs/execution-shapes/dorkfi-deposit-asa.md"},{"shapeKey":"mainnet:dorkfi:v1:withdraw:asa","network":"mainnet","protocol":"dorkfi","protocolVersion":"v1","action":"withdraw","variant":"asa","shapeVersion":"1.0.0","title":"Dork.fi v1 ASA lending withdraw","description":"Withdraws supplied ASA from a Dork.fi lending market. Amount is nToken-denominated; the builder unwraps nt200 after the lending.withdraw call.","summary":"Withdraws supplied ASA from a Dork.fi lending market. Amount is nToken-denominated; the builder unwraps nt200 after the lending.withdraw call.","opportunityRole":"exit","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","poolAppId","marketAppId","assetId","amount"],"sources":[{"kind":"docs","description":"Dork.fi lending pool ABI and DorkFiMCP ASA withdraw builder flow","url":"https://github.com/NautilusOSS/DorkFiMCP"}],"docsPath":"protocol/docs/execution-shapes/dorkfi-withdraw-asa.md"},{"shapeKey":"mainnet:dorkfi:v1:borrow:asa","network":"mainnet","protocol":"dorkfi","protocolVersion":"v1","action":"borrow","variant":"asa","shapeVersion":"1.0.0","title":"Dork.fi v1 ASA lending borrow","description":"Borrows an ASA from a Dork.fi lending market against existing collateral. Calls lending.borrow then unwraps nt200 to deliver underlying ASA. Amount is underlying ASA base units.","summary":"Borrows an ASA from a Dork.fi lending market against existing collateral. Calls lending.borrow then unwraps nt200 to deliver underlying ASA. Amount is underlying ASA base units.","opportunityRole":"enter","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","poolAppId","marketAppId","assetId","amount"],"sources":[{"kind":"docs","description":"Dork.fi lending pool ABI and DorkFiMCP ASA borrow builder flow","url":"https://github.com/NautilusOSS/DorkFiMCP"}],"docsPath":"protocol/docs/execution-shapes/dorkfi-borrow-asa.md"},{"shapeKey":"mainnet:dorkfi:v1:repay:asa","network":"mainnet","protocol":"dorkfi","protocolVersion":"v1","action":"repay","variant":"asa","shapeVersion":"1.0.0","title":"Dork.fi v1 ASA lending repay","description":"Repays ASA debt on a Dork.fi lending market by wrapping through nt200, approving the pool, and calling lending.repay. Amount is underlying ASA base units.","summary":"Repays ASA debt on a Dork.fi lending market by wrapping through nt200, approving the pool, and calling lending.repay. Amount is underlying ASA base units.","opportunityRole":"exit","supportedOpportunityTypes":["lending"],"requiredInputs":["userAddress","poolAppId","marketAppId","assetId","amount"],"sources":[{"kind":"docs","description":"Dork.fi lending pool ABI and DorkFiMCP ASA repay builder flow","url":"https://github.com/NautilusOSS/DorkFiMCP"}],"docsPath":"protocol/docs/execution-shapes/dorkfi-repay-asa.md"},{"shapeKey":"mainnet:myth-finance:dualstake-v1:mint:lst","network":"mainnet","protocol":"myth-finance","protocolVersion":"dualstake-v1","action":"mint","variant":"lst","shapeVersion":"1.0.0","title":"Myth Finance dualSTAKE mint LST","description":"Mints a Myth Finance dualSTAKE liquid-staking token by depositing ALGO and a small paired-ASA leg (receipt is not a pure ALGO 1:1 LST). Builds an unsigned group: optional LST opt-in, mint app call, ALGO payment, ASA transfer. ASA deposit is derived from the on-chain rate for the requested ALGO amount.","summary":"Mints a Myth Finance dualSTAKE liquid-staking token by depositing ALGO and a small paired-ASA leg (receipt is not a pure ALGO 1:1 LST). Builds an unsigned group: optional LST opt-in, mint app call, ALGO payment, ASA transfer. ASA deposit is derived from the on-chain rate for the requested ALGO amount.","opportunityRole":"enter","supportedOpportunityTypes":["staking","farm"],"requiredInputs":["userAddress","amount","appId"],"sources":[{"kind":"sdk","description":"@myth-finance/dualstake-ts-sdk DualStakeClient mint app call + algosdk v3 payment/axfer builders"}],"docsPath":"protocol/docs/execution-shapes/myth-finance-mint-lst.md"},{"shapeKey":"mainnet:myth-finance:dualstake-v1:redeem:lst","network":"mainnet","protocol":"myth-finance","protocolVersion":"dualstake-v1","action":"redeem","variant":"lst","shapeVersion":"1.0.0","title":"Myth Finance dualSTAKE redeem LST","description":"Redeems a Myth Finance dualSTAKE liquid-staking token for mostly ALGO plus a small amount of the paired ASA (not 1:1 ALGO). Builds an unsigned group: optional ASA opt-in, LST transfer, redeem app call.","summary":"Redeems a Myth Finance dualSTAKE liquid-staking token for mostly ALGO plus a small amount of the paired ASA (not 1:1 ALGO). Builds an unsigned group: optional ASA opt-in, LST transfer, redeem app call.","opportunityRole":"exit","supportedOpportunityTypes":["staking","farm"],"requiredInputs":["userAddress","amount","appId"],"sources":[{"kind":"sdk","description":"@myth-finance/dualstake-ts-sdk DualStakeClient redeem app call + algosdk v3 axfer builders"}],"docsPath":"protocol/docs/execution-shapes/myth-finance-redeem-lst.md"},{"shapeKey":"mainnet:haystack:v1:stake:hay","network":"mainnet","protocol":"haystack","protocolVersion":"v1","action":"stake","variant":"hay","shapeVersion":"1.0.0","title":"Haystack v1 HAY staking deposit","description":"Stakes HAY into the Haystack staking pool. Builds stakeHay(axfer)void from the ARC-56 spec: an optional staker-box MBR payment (first stake only), the HAY asset transfer (the ABI arg), and the stakeHay app call.","summary":"Stakes HAY into the Haystack staking pool. Builds stakeHay(axfer)void from the ARC-56 spec: an optional staker-box MBR payment (first stake only), the HAY asset transfer (the ABI arg), and the stakeHay app call.","opportunityRole":"enter","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","amount"],"sources":[{"kind":"arc56","description":"protocol/src/haystack-staking.arc56.json stakeHay(axfer)void"}],"docsPath":"protocol/docs/execution-shapes/haystack-stake-hay.md"},{"shapeKey":"mainnet:haystack:v1:unstake:hay","network":"mainnet","protocol":"haystack","protocolVersion":"v1","action":"unstake","variant":"hay","shapeVersion":"1.0.0","title":"Haystack v1 HAY staking withdraw","description":"Unstakes HAY from the Haystack staking pool and claims pending USDC and HAY rewards via unstakeHayAndClaim(uint64)(uint64,uint64). Prefixes a USDC opt-in when the user is not yet opted into USDC.","summary":"Unstakes HAY from the Haystack staking pool and claims pending USDC and HAY rewards via unstakeHayAndClaim(uint64)(uint64,uint64). Prefixes a USDC opt-in when the user is not yet opted into USDC.","opportunityRole":"exit","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","amount"],"sources":[{"kind":"arc56","description":"protocol/src/haystack-staking.arc56.json unstakeHayAndClaim(uint64)(uint64,uint64)"}],"docsPath":"protocol/docs/execution-shapes/haystack-unstake-hay.md"},{"shapeKey":"mainnet:haystack:v1:claim:rewards","network":"mainnet","protocol":"haystack","protocolVersion":"v1","action":"claim","variant":"rewards","shapeVersion":"1.0.0","title":"Haystack v1 staking reward claim","description":"Claims accrued USDC and HAY staking rewards via claim()(uint64,uint64). Prefixes a USDC opt-in transfer when the user is not yet opted into USDC.","summary":"Claims accrued USDC and HAY staking rewards via claim()(uint64,uint64). Prefixes a USDC opt-in transfer when the user is not yet opted into USDC.","opportunityRole":"manage","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress"],"sources":[{"kind":"arc56","description":"protocol/src/haystack-staking.arc56.json claim()(uint64,uint64)"}],"docsPath":"protocol/docs/execution-shapes/haystack-claim-rewards.md"},{"shapeKey":"mainnet:reti:v1:stake:algo","network":"mainnet","protocol":"reti","protocolVersion":"v1","action":"stake","variant":"algo","shapeVersion":"1.0.0","title":"Réti ALGO stake to validator","description":"Stakes ALGO to a Réti validator via ValidatorRegistry.addStake. The registry allocates into one of the validator's pools. Builds gas ×2, ALGO payment to the registry, addStake, and optional reward-token opt-in. Enforces minEntryStake, capacity, and entry gates at quote time.","summary":"Stakes ALGO to a Réti validator via ValidatorRegistry.addStake. The registry allocates into one of the validator's pools. Builds gas ×2, ALGO payment to the registry, addStake, and optional reward-token opt-in. Enforces minEntryStake, capacity, and entry gates at quote time.","opportunityRole":"enter","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","validatorId","amount"],"sources":[{"kind":"arc56","description":"algorandfoundation/reti ValidatorRegistry.addStake(pay,uint64,uint64)"}],"docsPath":"protocol/docs/execution-shapes/reti-stake-algo.md"},{"shapeKey":"mainnet:reti:v1:unstake:algo","network":"mainnet","protocol":"reti","protocolVersion":"v1","action":"unstake","variant":"algo","shapeVersion":"1.0.0","title":"Réti ALGO unstake from pool","description":"Removes ALGO stake from a Réti staking pool via StakingPool.removeStake. Builds gas ×2, removeStake, and optional reward-token opt-in. Partial unstake must leave at least minEntryStake (or unstake the full balance).","summary":"Removes ALGO stake from a Réti staking pool via StakingPool.removeStake. Builds gas ×2, removeStake, and optional reward-token opt-in. Partial unstake must leave at least minEntryStake (or unstake the full balance).","opportunityRole":"exit","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","validatorId","poolAppId","amount"],"sources":[{"kind":"arc56","description":"algorandfoundation/reti StakingPool.removeStake(address,uint64)void"}],"docsPath":"protocol/docs/execution-shapes/reti-unstake-algo.md"},{"shapeKey":"mainnet:alpha-arcade:v1:stake:alpha","network":"mainnet","protocol":"alpha-arcade","protocolVersion":"v1","action":"stake","variant":"alpha","shapeVersion":"1.0.0","title":"Alpha Arcade v1 ALPHA staking deposit","description":"Stakes ALPHA into the Alpha Arcade fee-sharing pool. Builds optional opt_in() (first stake), ALPHA axfer into the pool, then stake(). The ALPHA transfer must immediately precede the stake app call.","summary":"Stakes ALPHA into the Alpha Arcade fee-sharing pool. Builds optional opt_in() (first stake), ALPHA axfer into the pool, then stake(). The ALPHA transfer must immediately precede the stake app call.","opportunityRole":"enter","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","amount"],"sources":[{"kind":"sdk","description":"@alpha-arcade/sdk stakeAlpha — opt_in? + ALPHA axfer + stake()"}],"docsPath":"protocol/docs/execution-shapes/alpha-arcade-stake-alpha.md"},{"shapeKey":"mainnet:alpha-arcade:v1:unstake:alpha","network":"mainnet","protocol":"alpha-arcade","protocolVersion":"v1","action":"unstake","variant":"alpha","shapeVersion":"1.0.0","title":"Alpha Arcade v1 ALPHA staking withdraw","description":"Unstakes ALPHA from the Alpha Arcade fee-sharing pool via unstake(uint64). The contract returns ALPHA via an inner transfer; flat 2000 microAlgo fee.","summary":"Unstakes ALPHA from the Alpha Arcade fee-sharing pool via unstake(uint64). The contract returns ALPHA via an inner transfer; flat 2000 microAlgo fee.","opportunityRole":"exit","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress","amount"],"sources":[{"kind":"sdk","description":"@alpha-arcade/sdk unstakeAlpha — unstake(uint64)"}],"docsPath":"protocol/docs/execution-shapes/alpha-arcade-unstake-alpha.md"},{"shapeKey":"mainnet:alpha-arcade:v1:claimRewards:usdc","network":"mainnet","protocol":"alpha-arcade","protocolVersion":"v1","action":"claimRewards","variant":"usdc","shapeVersion":"1.0.0","title":"Alpha Arcade v1 staking USDC reward claim","description":"Claims accrued USDC trading-fee rewards via claim(). Prefixes a USDC ASA opt-in when the user is not yet opted into USDC. Flat 2000 microAlgo fee on the claim call.","summary":"Claims accrued USDC trading-fee rewards via claim(). Prefixes a USDC ASA opt-in when the user is not yet opted into USDC. Flat 2000 microAlgo fee on the claim call.","opportunityRole":"manage","supportedOpportunityTypes":["staking"],"requiredInputs":["userAddress"],"sources":[{"kind":"sdk","description":"@alpha-arcade/sdk claimStakingRewards — USDC opt-in? + claim()"}],"docsPath":"protocol/docs/execution-shapes/alpha-arcade-claim-rewards-usdc.md"},{"shapeKey":"mainnet:stamm:v1:mint:lp","network":"mainnet","protocol":"stamm","protocolVersion":"v1","action":"mint","variant":"lp","shapeVersion":"1.0.0","title":"STAMM v1 LP mint","description":"Mints STAMM LP via HOGSWAP POST /quote (mode LP_MINT) then POST /execute. Accepts pool-asset amountA/amountB (single- or two-sided) or externalInputs (any asset, converted into the tier ratio). Returns an unsigned group targeting the current router — never signed or broadcast. Wallet must already be opted into the LP ASA. Prefer maxLegs when composing with other groups.","summary":"Mints STAMM LP via HOGSWAP POST /quote (mode LP_MINT) then POST /execute. Accepts pool-asset amountA/amountB (single- or two-sided) or externalInputs (any asset, converted into the tier ratio). Returns an unsigned group targeting the current router — never signed or broadcast. Wallet must already be opted into the LP ASA. Prefer maxLegs when composing with other groups.","opportunityRole":"enter","supportedOpportunityTypes":["lp"],"requiredInputs":["userAddress","poolAppId","tierIndex","amountA"],"sources":[{"kind":"api","description":"HOGSWAP POST /quote mode=LP_MINT and POST /execute","url":"https://hogswap-v1.liquihog.dev/reference"},{"kind":"docs","description":"hogswap-js-sdk lpMintQuote + execute (unsigned groups)","url":"https://github.com/LiquiHog/hogswap-js-sdk"}],"docsPath":"protocol/docs/execution-shapes/stamm-mint-lp.md"},{"shapeKey":"mainnet:stamm:v1:redeem:lp","network":"mainnet","protocol":"stamm","protocolVersion":"v1","action":"redeem","variant":"lp","shapeVersion":"1.0.0","title":"STAMM v1 LP redeem","description":"Burns STAMM LP via HOGSWAP POST /quote (mode LP_REDEEM) then POST /execute. targetAsset may be a pool underlying or any routable asset. Returns an unsigned group targeting the current router — never signed or broadcast. Wallet must already be opted into the LP ASA and the target asset. Prefer maxLegs when composing with other groups.","summary":"Burns STAMM LP via HOGSWAP POST /quote (mode LP_REDEEM) then POST /execute. targetAsset may be a pool underlying or any routable asset. Returns an unsigned group targeting the current router — never signed or broadcast. Wallet must already be opted into the LP ASA and the target asset. Prefer maxLegs when composing with other groups.","opportunityRole":"exit","supportedOpportunityTypes":["lp"],"requiredInputs":["userAddress","poolAppId","tierIndex","lpAmount","targetAsset"],"sources":[{"kind":"api","description":"HOGSWAP POST /quote mode=LP_REDEEM and POST /execute","url":"https://hogswap-v1.liquihog.dev/reference"},{"kind":"docs","description":"hogswap-js-sdk lpRedeemQuote + execute (unsigned groups)","url":"https://github.com/LiquiHog/hogswap-js-sdk"}],"docsPath":"protocol/docs/execution-shapes/stamm-redeem-lp.md"},{"shapeKey":"mainnet:hogswap:v1:swap:fixed-input","network":"mainnet","protocol":"hogswap","protocolVersion":"v1","action":"swap","variant":"fixed-input","shapeVersion":"1.0.0","title":"HOGSWAP v1 swap (fixed-in)","description":"Quotes and builds an unsigned HOGSWAP multi-DEX swap group (fixed-in, amount_in). POST /quote mode=SWAP then POST /execute. Routing fee is already netted into expectedOut. Returns unsigned transactions targeting the live router — never signed or broadcast. Wallet must already be opted into the output ASA when it is not ALGO.","summary":"Quotes and builds an unsigned HOGSWAP multi-DEX swap group (fixed-in, amount_in). POST /quote mode=SWAP then POST /execute. Routing fee is already netted into expectedOut. Returns unsigned transactions targeting the live router — never signed or broadcast. Wallet must already be opted into the output ASA when it is not ALGO.","opportunityRole":"enter","supportedOpportunityTypes":["swap"],"requiredInputs":["userAddress","fromAssetId","toAssetId","amount","maxSlippageBps"],"sources":[{"kind":"api","description":"HOGSWAP POST /quote mode=SWAP and POST /execute","url":"https://hogswap-v1.liquihog.dev/reference"},{"kind":"docs","description":"hogswap-js-sdk quote + execute (unsigned groups)","url":"https://github.com/LiquiHog/hogswap-js-sdk"}],"docsPath":"protocol/docs/execution-shapes/hogswap-swap-fixed-input.md"},{"shapeKey":"mainnet:hogswap:v1:swap:fixed-output","network":"mainnet","protocol":"hogswap","protocolVersion":"v1","action":"swap","variant":"fixed-output","shapeVersion":"1.0.0","title":"HOGSWAP v1 swap (exact-out)","description":"Quotes and builds an unsigned HOGSWAP multi-DEX swap group (exact-out, amount_out). POST /quote mode=SWAP then POST /execute. Routing fee is already netted into expectedOut. Returns unsigned transactions targeting the live router — never signed or broadcast. Wallet must already be opted into the output ASA when it is not ALGO.","summary":"Quotes and builds an unsigned HOGSWAP multi-DEX swap group (exact-out, amount_out). POST /quote mode=SWAP then POST /execute. Routing fee is already netted into expectedOut. Returns unsigned transactions targeting the live router — never signed or broadcast. Wallet must already be opted into the output ASA when it is not ALGO.","opportunityRole":"enter","supportedOpportunityTypes":["swap"],"requiredInputs":["userAddress","fromAssetId","toAssetId","amount","maxSlippageBps"],"sources":[{"kind":"api","description":"HOGSWAP POST /quote mode=SWAP and POST /execute","url":"https://hogswap-v1.liquihog.dev/reference"},{"kind":"docs","description":"hogswap-js-sdk quote + execute (unsigned groups)","url":"https://github.com/LiquiHog/hogswap-js-sdk"}],"docsPath":"protocol/docs/execution-shapes/hogswap-swap-fixed-output.md"}],"meta":{"paymentRequired":false,"shapeCount":62,"note":"Catalog metadata only. Compile unsigned groups via paid POST /execution/quotes. Protocol construction caveats: protocol/docs/execution-shapes/protocol-caveats.md","caveatsDocsPath":"protocol/docs/execution-shapes/protocol-caveats.md"}}