Documentation Index Fetch the complete documentation index at: https://docs.pan.tech/llms.txt
Use this file to discover all available pages before exploring further.
Los Planes de Ejecución son estrategias detalladas que pan genera automáticamente para lograr tus intents. Describen exactamente que operaciones se realizaran, en que orden, y con que costos esperados.
Como Funcióna la Planificación
Cuando creas un intent, pan no ejecuta inmediatamente. Primero pasa por una fase de planificación sofisticada:
Analisis de Estado
Consultar balances en todas las chains e identificar tokens disponibles
Evaluacion de Protocolos
Obtener APYs de Aave en cada chain y verificar liquidez
Optimización de Ruta
Calcular opciones de bridge y estimar costos de gas
Generación de Plan
Ordenar operaciones y calcular tiempos estimados
Estructura de un Plan de Ejecución
{
"strategy" : "single-bridge" ,
"targetChain" : "base" ,
"targetProtocol" : "aave" ,
"expectedApy" : 8.52 ,
"steps" : [
{
"type" : "bridge" ,
"sequence" : 1 ,
"from" : "arbitrum" ,
"to" : "base" ,
"asset" : "USDC" ,
"amount" : "1000" ,
"provider" : "across" ,
"estimatedFee" : "1.50" ,
"estimatedTime" : "2-5 min"
},
{
"type" : "deposit" ,
"sequence" : 2 ,
"chain" : "base" ,
"protocol" : "aave" ,
"asset" : "USDC" ,
"amount" : "998.50" ,
"estimatedGas" : "200000" ,
"estimatedGasUsd" : "0.80"
}
],
"summary" : {
"totalSteps" : 2 ,
"estimatedGasUsd" : 2.30 ,
"estimatedFees" : 1.50 ,
"estimatedTotalCost" : 3.80 ,
"estimatedTime" : "3-7 min" ,
"expectedFinalAmount" : "998.50"
}
}
Tipos de Estrategia
Las estrategias usan nombres internos especificos. Asegurate de usar los nombres correctos en tus integraciones.
direct-deposit
Cuando se usa: Los fondos ya están en la chain con mejor yield.
Estado del wallet:
- Base: 1000 USDC
- Mejor APY: Base (8.52%)
Estrategia: direct-deposit
- Solo depósito directo a Aave
- Gas estimado: ~300,000
{
"strategy" : "direct-deposit" ,
"reasoning" : "Funds already on optimal chain" ,
"steps" : [
{
"type" : "deposit" ,
"chain" : "base" ,
"protocol" : "aave" ,
"asset" : "USDC" ,
"amount" : 1000
}
],
"estimatedGas" : 300000 ,
"estimatedTime" : 30
}
bridge-and-lend
Cuando se usa: Los fondos están concentrados en una chain diferente a la optima.
Estado del wallet:
- Arbitrum: 1000 USDC
- Mejor APY: Base (8.52%)
Estrategia: bridge-and-lend
- Bridge Arbitrum -> Base via Across
- Deposito en Aave Base
- Gas estimado: ~450,000
- Fee de bridge: ~0.1%
{
"strategy" : "bridge-and-lend" ,
"reasoning" : "Bridge to chain with best APY" ,
"steps" : [
{
"type" : "bridge" ,
"fromChain" : "arbitrum-sepolia" ,
"toChain" : "base-sepolia" ,
"asset" : "USDC" ,
"amount" : 1000 ,
"bridge" : "across"
},
{
"type" : "deposit" ,
"chain" : "base-sepolia" ,
"protocol" : "aave" ,
"asset" : "USDC" ,
"amount" : 999
}
],
"estimatedGas" : 450000 ,
"estimatedTime" : 120
}
multi-bridge-and-lend
Cuando se usa: Los fondos están distribuidos en múltiples chains.
Estado del wallet:
- Ethereum: 200 USDC
- Arbitrum: 500 USDC
- Base: 300 USDC (ya en destino)
- Mejor APY: Base (8.52%)
Estrategia: multi-bridge-and-lend
- Bridge Ethereum -> Base
- Bridge Arbitrum -> Base
- Deposito consolidado en Aave Base
- Gas estimado: 300,000 + (N x 150,000)
{
"strategy" : "multi-bridge-and-lend" ,
"reasoning" : "Consolidate funds from multiple chains" ,
"steps" : [
{
"type" : "bridge" ,
"fromChain" : "sepolia" ,
"toChain" : "base-sepolia" ,
"asset" : "USDC" ,
"amount" : 200 ,
"bridge" : "across"
},
{
"type" : "bridge" ,
"fromChain" : "arbitrum-sepolia" ,
"toChain" : "base-sepolia" ,
"asset" : "USDC" ,
"amount" : 500 ,
"bridge" : "across"
},
{
"type" : "deposit" ,
"chain" : "base-sepolia" ,
"protocol" : "aave" ,
"asset" : "USDC" ,
"amount" : 996
}
],
"estimatedGas" : 600000 ,
"estimatedTime" : 300
}
simple-withdraw
Cuando se usa: Retirar fondos de Aave.
{
"strategy" : "simple-withdraw" ,
"reasoning" : "Direct withdrawal from Aave" ,
"steps" : [
{
"type" : "withdraw" ,
"chain" : "base-sepolia" ,
"protocol" : "aave" ,
"asset" : "USDC" ,
"amount" : 500
}
],
"estimatedGas" : 250000 ,
"estimatedTime" : 30
}
Tipos de Pasos
Bridge
Mueve tokens entre chains usando Across Protocol.
{
"type" : "bridge" ,
"from" : "arbitrum" ,
"to" : "base" ,
"asset" : "USDC" ,
"amount" : "1000" ,
"provider" : "across" ,
"estimatedFee" : "1.50" ,
"estimatedTime" : "2-5 min" ,
"fillDeadline" : 7200
}
Campos importantes:
provider: Siempre across (Across Protocol)
estimatedFee: Fee del bridge en USD
fillDeadline: Tiempo máximo para completar (segundos)
Deposit
Deposita tokens en un protocolo de lending.
{
"type" : "deposit" ,
"chain" : "base" ,
"protocol" : "aave" ,
"asset" : "USDC" ,
"amount" : "998.50" ,
"apy" : 8.52 ,
"estimatedGas" : "200000" ,
"estimatedGasUsd" : "0.80"
}
Campos importantes:
protocol: Siempre aave actualmente
apy: APY esperado
amount: Cantidad después de fees de bridge
Withdraw
Retira tokens de un protocolo de lending.
{
"type" : "withdraw" ,
"chain" : "base" ,
"protocol" : "aave" ,
"asset" : "USDC" ,
"amount" : "500" ,
"estimatedGas" : "250000" ,
"estimatedGasUsd" : "1.00"
}
Swap (Proximo)
Intercambia un token por otro (en desarrollo).
{
"type" : "swap" ,
"chain" : "arbitrum" ,
"fromAsset" : "USDT" ,
"toAsset" : "USDC" ,
"amount" : "500" ,
"provider" : "uniswap" ,
"estimatedSlippage" : "0.1%"
}
Ejecución del Plan
Una vez generado el plan, pan ejecuta cada paso en secuencia:
Para cada paso en el plan:
Preparacion
Verificar balance y gas disponible, preparar datos de la transacción
Ejecución
Firmar via Privy, enviar a blockchain, obtener txHash
Confirmación
Esperar 1-2 bloques, verificar exito, actualizar estado
Registro
Guardar txHash y gas usado, calcular costo USD, incrementar completedSteps
Si un paso falla, se registra el error y el intent se marca como failed. Si todos los pasos completan, el intent queda completed.
Detalle de Ejecución por Paso
Para cada paso en el plan:
Fase Acción Resultado Precondiciones Engine verifica balance y gas Continua o falla Firma Engine solicita firma a Privy Transacción firmada Envio Engine envia txn a blockchain Recibe txHash Confirmación Engine espera receipt Loop hasta confirmado Registro Guardar en DB completedSteps++ o error
Monitorear Ejecución
Durante la ejecución, puedes ver el progreso en tiempo real:
const intent = await pan . getIntent ( intentId );
console . log ( 'Estado:' , intent . status );
console . log ( 'Plan:' , intent . executionPlan );
console . log ( 'Resultados:' , intent . results );
Respuesta durante ejecución
{
"id" : "intent_xyz789" ,
"status" : "executing" ,
"executionPlan" : {
"strategy" : "single-bridge" ,
"steps" : [
{
"type" : "bridge" ,
"sequence" : 1 ,
"status" : "completed" ,
"txHash" : "0x123abc..."
},
{
"type" : "deposit" ,
"sequence" : 2 ,
"status" : "executing"
}
]
},
"results" : {
"completedSteps" : 1 ,
"transactions" : [
{
"type" : "bridge" ,
"txHash" : "0x123abc..." ,
"chain" : "arbitrum" ,
"gasUsed" : "150000" ,
"gasCostUsd" : 1.50
}
]
}
}
Respuesta completada
{
"id" : "intent_xyz789" ,
"status" : "completed" ,
"executionPlan" : {
"strategy" : "single-bridge" ,
"steps" : [
{ "type" : "bridge" , "sequence" : 1 , "status" : "completed" },
{ "type" : "deposit" , "sequence" : 2 , "status" : "completed" }
]
},
"results" : {
"completedSteps" : 2 ,
"transactions" : [
{
"type" : "bridge" ,
"txHash" : "0x123abc..." ,
"chain" : "arbitrum" ,
"gasUsed" : "150000" ,
"gasCostUsd" : 1.50
},
{
"type" : "deposit" ,
"txHash" : "0x456def..." ,
"chain" : "base" ,
"gasUsed" : "200000" ,
"gasCostUsd" : 0.80
}
],
"totalGasUsed" : "350000" ,
"totalGasCostUsd" : 2.30 ,
"finalAmount" : "998.50" ,
"apy" : 8.52
},
"completedAt" : "2024-01-15T10:45:30Z"
}
Optimización de Costos
pan optimiza costos considerando múltiples factores:
Costos de Bridge
Bridge fee = base_fee + (amount * percentage_fee)
Ejemplo Across:
- Base fee: ~$0.50
- Percentage: ~0.1%
- 1000 USDC: $0.50 + $1.00 = $1.50 fee
Costos de Gas
Gas cost = gas_used * gas_price * eth_price
Ejemplo en Base:
- Gas used: 200,000
- Gas price: 0.001 gwei
- ETH price: $2,500
- Cost: ~$0.50
Decision de Bridge
pan decide si hacer bridge basandose en:
APY_diferencia = APY_mejor_chain - APY_chain_actual
Costo_bridge = fee_bridge + gas_bridge
Tiempo_breakeven = Costo_bridge / (Amount * APY_diferencia / 365)
Si Tiempo_breakeven < 30 dias:
→ Hacer bridge vale la pena
Si no:
→ Depositar en chain actual
Manejo de Fallos
Durante Bridge
Si un bridge falla:
pan espera hasta fillDeadline
Si no completa, marca el paso como fallido
El intent queda en estado failed
Los fondos permanecen en la chain origen
{
"status" : "failed" ,
"error" : {
"code" : "BRIDGE_TIMEOUT" ,
"message" : "Bridge did not complete within deadline" ,
"step" : 1
},
"results" : {
"completedSteps" : 0 ,
"failedStep" : 1
}
}
Durante Deposit
Si un depósito falla:
Los fondos ya están en la chain destino
pan intenta diagnosticar el error
Puedes reintentar con un nuevo intent
{
"status" : "failed" ,
"error" : {
"code" : "DEPOSIT_REVERTED" ,
"message" : "Transaction reverted on chain" ,
"step" : 2 ,
"details" : {
"reason" : "Insufficient liquidity in protocol"
}
}
}
Verificar Transacciónes
Todas las transacciones son verificables on-chain:
const intent = await pan . getIntent ( intentId );
// Obtener explorers
const explorers = {
'ethereum' : 'https://etherscan.io/tx/' ,
'ethereum-sepolia' : 'https://sepolia.etherscan.io/tx/' ,
'arbitrum' : 'https://arbiscan.io/tx/' ,
'arbitrum-sepolia' : 'https://sepolia.arbiscan.io/tx/' ,
'base' : 'https://basescan.org/tx/' ,
'base-sepolia' : 'https://sepolia.basescan.org/tx/'
};
// Mostrar links
intent . results ?. transactions ?. forEach ( tx => {
const chain = tx . chain ;
const explorer = explorers [ chain ];
console . log ( ` ${ tx . type } : ${ explorer }${ tx . txHash } ` );
});
Próximos Pasos
Ejecutar Intents Guía práctica de ejecución
Monitorear Estado Como hacer seguimiento efectivo
Manejo de Errores Estrategias para manejar fallos
API de Intents Referencia del endpoint