Saltar al contenido
Proyecto showcaseBlockchain y Web3
  • 223 tests
  • 100 % de cobertura
  • analizado con Slither

Milestone Escrow

Escrow por hitos para trabajos de freelancers y agencias, en ETH o en cualquier ERC-20 estándar

Solidity 0.8.28OpenZeppelin v5ETH / ERC-20Foundry

Qué es

MilestoneEscrow es un único contrato de escrow (depósito en garantía) on-chain que gestiona cualquier número de encargos independientes. Al crear un encargo, el cliente deposita el presupuesto completo, repartido en hasta 50 hitos, de modo que el freelancer ve que el dinero está ahí antes de empezar a trabajar.

Los fondos solo se mueven cuando el cliente libera un hito, cuando un árbitro neutral resuelve una disputa repartiendo en puntos básicos los fondos no liberados, o cuando el encargo se cancela y el cliente recibe el reembolso. De los pagos al freelancer se descuenta una pequeña comisión de protocolo, con un tope fijo del 5 % y registrada mediante snapshot en cada encargo; a los reembolsos nunca se les aplica comisión.

El problema de negocio

El trabajo en remoto entre partes que no se conocen tropieza con una brecha de confianza: el cliente no quiere pagar por adelantado y el freelancer no quiere entregar antes de cobrar. Las plataformas cierran esa brecha, pero cobran comisiones considerables, pueden congelar cuentas y resuelven las disputas de una forma que las partes no pueden ver.

Cómo funciona

  1. 1

    Crear: el cliente llama a createJob(freelancer, arbiter, token, amounts[]) y deposita el importe total en ETH o en un ERC-20. La comisión vigente queda registrada en el encargo.

  2. 2

    Entregar: el freelancer llama a requestRelease(jobId, i) para indicar que el hito i está terminado.

  3. 3

    Liberar: el cliente llama a releaseMilestone(jobId, i). El freelancer recibe el importe menos la comisión; cuando todos los hitos están liberados, el encargo queda completado.

  4. 4

    Disputa (opcional): cualquiera de las partes puede abrir una disputa, que congela el encargo. El árbitro reparte cada hito no liberado entre freelancer y cliente en puntos básicos.

  5. 5

    Cancelar (opcional): el cliente puede cancelar con reembolso íntegro mientras no se haya solicitado ni liberado ningún trabajo; el árbitro puede cancelar mientras el encargo esté abierto.

Medidas de seguridad

  • nonReentrant en todas las funciones que mueven valor; el estado se cierra antes de las llamadas externas (checks-effects-interactions)
  • Pagos en ETH resistentes al griefing: los pagos push fallidos se abonan para retirarlos más tarde
  • Los tokens fee-on-transfer se rechazan comparando el saldo antes y después de la transferencia
  • Tope de comisión (5 %) y snapshot de la comisión por encargo: el owner no puede subir las comisiones de encargos ya financiados
  • Bucles acotados (máx. 50 hitos) y tres roles diferenciados
  • Ownable2Step; el administrador nunca puede tocar los fondos de los encargos
  • Invariante de solvencia verificado con fuzzing: el saldo del contrato es igual a la suma de los hitos no liberados

Funcionalidades

  • Cualquier número de encargos en un solo contrato
  • Fondos en ETH o ERC-20
  • Hasta 50 hitos por encargo
  • Solicitudes de liberación y disputas con reparto del árbitro en puntos básicos
  • Cancelación y reembolso
  • Snapshot de la comisión de protocolo, con tope del 5 %

Casos de uso típicos

  • Marketplaces de freelancers y plataformas de agencias con pagos sin custodia
  • Contratos de servicios B2B con facturación por hitos
  • Programas de subvenciones que pagan por tramos, con un comité como árbitro

Limitaciones conocidas

Se confía en la neutralidad del árbitro; en producción sería una multisig, una DAO o un tribunal descentralizado. No se admiten tokens rebasing.

Otros contratos showcase

Showcase

Token + Vesting + Staking

Un ERC-20 con límite máximo y aprobaciones sin gas, calendarios de vesting con cliff para equipo e inversores y recompensas de staking al estilo Synthetix.

ERC-20EIP-2612OpenZeppelin v5

223 tests · 100 % de cobertura · analizado con Slither

Showcase

SigmaNFT Collection

Un lanzamiento de NFT justo: fases de allowlist y pública, límites por wallet, suministro máximo inmutable, royalties ERC-2981 y reveal diferido.

ERC-721ERC-2981Merkle proofs

223 tests · 100 % de cobertura · analizado con Slither

Showcase

Gold-Backed Token (RWA)

El respaldo se convierte en condición previa de la acuñación: solo se pueden acuñar tokens si la reserva de oro declarada cubre el nuevo suministro total.

ERC-20AccessControlProof of reserve

223 tests · 100 % de cobertura · analizado con Slither

Estándares: Solidity 0.8.x, OpenZeppelin, tests en Foundry con fuzzing, análisis estático con Slither y código fuente verificado. 223 tests · 100 % de cobertura · analizado con Slither.

¿Tienes un proyecto en mente?

Cuéntanos qué estás construyendo. Normalmente en pocos días laborables recibes una valoración honesta, un alcance claro y una propuesta a precio fijo o por hitos.

¿Prefieres escribirnos primero? Escríbenos

Hablarás directamente con Ing. Ismet Mesic, Tech lead.