Closed EzequielPostan closed 9 years ago
Proveedores de información sobre las tasas actuales y registros históricos.
A continuación se listan una serie de sitio web que provee información, cotizaciones y registros histórico de diferente Crypto Currensies.
https://openexchangerates.org/
Publicado en a documentación.
Ofrece tasa de cambios actualizado por hora relacionado con dolares y se publican en formato JSON que también se actualiza cada hora.
El Lapso de actualización es un poco amplio, ya que en una hora las cotizaciones varían considerablemente.
Por ultimo no ofrece ninguna opción gratuita.
https://www.cryptocoincharts.info/tools/api
Provee web service RestFull y también url JSON para acceder a las diferentes cotizaciones.
Además posee una una buena cantidad de Tipos de Crypto Currensies y Fiat Currensies.
Por lo que se ve a simple vista parece ser gratuito aunque también se ve un importante retardo a la hora de actualizar.
https://bter.com/api
En esta API parece ofrecer un extenso listado de Crypto Currensies y sus cotizaciones, también un grupo de amplio de walletes.
Al igual que las anteriores publica los datos en formato JSON.
La API parece ser gratuita, aunque un poco confusa con los datos que provee.
https://es.cryptonator.com/api
Ofrece datos en formato JSON, probé con diferente Crypto Currensies en la url ofrecida de la API y muestra la cotizaciones sin problemas.
No se sabe con exactitud cuantas Crypto Currensies muestra esta API pero parece ser tener un buen y amplio listado.
Parece gratuita y es en castellano.
http://www.coinwarz.com/v1/api/documentation
API paga con una opción limitada gratuita, no posee un demo para verificar su funcionamiento y parece tener un abanico reducido de Crypto Currencies.
Al igual que las anteriores provee datos en formato JSON.
Todas las URL antes mencionadas ofrecen un amplio historial de cotizaciones. Para dar una solución rápida es conveniente acceder a uno o mas de los servicios de API antes publicados. Todos utilizan formato JSON. JSON es un formato de texto plano y liviano que permite una carga rápida, puede ser guardado en el dispositivo y ser consultado sin necesidad de que haya una conexión a internet activa. Además permite un mejor registro sobre los historiales de cotizaciones. Otro punto importante es que no se necesita una lógica muy compleja para deserializar un JSON lo que da aun más rapidez para desarrollar.
Yo me imagino que este plugin va a ir evolucionando en el tiempo respecto a de donde se alimenta de información. Es como que va a tener distintos proveedores, que incluso, en un futuro, el usuario final pudiera cambiar uno por otro.
El tema de que sean varios mitiga la posibilidad de un ataque a nuestro sistema basado en atacar al proveedor, manipulando su información.
La pregunta que me surge aquí @EzequielPostan es si estos proveedores debieran estar encapsulados cada uno en una clase que implemente una interfaz común dentro de cada plugin, o , ser en si mismo cada uno un plugin del cual nuestro plugin se alimente.
Consultar un proveedor pareciera ser una cantidad de código bastante chica y limitada, un par de lineas para hacer la consulta HTTP y algunas mas para decodificar la respuesta y ponerla en un formato común consumible por el crypto index. Sin embargo, si nos vamos por el modelo de que cada proveedor sea un plugin independiente, uno pudiera dejar que ese plugin luego evolucione, exponiendo mas servicios de la misma fuente. Por ejemplo:
Un pligin de Coindesk pudiera dar inicialmente el servicio de indice de precios, para luego evolucionar y dar servicio de noticias adicional al anterior.
Que sean plugins independiente puede ayudar también a que en algún futuro esos mismos actores de la industria creen el suyo propio, si ya ven al resto.
Finalmente quiero enfatizar que la elección de los proveedores no debe ser algo hecho a la ligera. Hay que entender de donde saca los datos cada uno, que tan cuidadosos son para filtrarlos cuando alguno de sus propios proveedores les manda fruta, quienes están atras de esos índices, etc. Yo no descartaría consultar la API de algúnos de los exchanges mas importantes directamente, de manera complementaria.
Otra cosa que quiero agregar, es que el histórico del crypto index nuestro, debira guardar lo que el, con su propia lógica determine que es el precio en cada momento. Supongamos que tiene 3 fuentes de datos y saca un promedio, entonces guarda ya ese promedio calculado. Si en algun momento ingnora una de las fuentes, guarda el promedio de las otras dos.
Lo que realmente haría falta en el mundo es una blockchain con las tasas de cambio. No se le habrá ocurrido eso a alguien ya?
@Luis-Fernando-Molina Estuvimos hablando con @EzequielPostan y definimos que para el MVP el plugin debiera tener el siguiente comportamiento:
En una base de datos propia, almacenar, en un principio, sólo la última cotización de cada relación (CryptoCurrency, FiatCurrency).
Para obtener esta información, debiera conectarse a más de un proveedor y tener una lógica para sacar cuál es el precio más "real". Tener en cuenta que una de las fuentes puede ser falseada (como indicás), y tendría que tener alguna lógica para discriminarla comparándola con las demás.
El plugin debe tener un agente, que se despierte cada 10/15 minutos y actualice las últimas cotizaciones.
Las cotizaciones que necesitamos manejar en un principio son: BTC - VEF BTC - ARS BTC - USD
ExchangeRate getLastExchangeRate(CryptoCurrency c, FiatCurrency f)
ExchangeRate getHistoricalExchangeRate(CryptoCurrency c, FiatCurrency f , long time)
ExchangeRate: CryptoCurrency | FiatCurrency | rate | time
Qué te parece?
Me parece bien @lnacosta
En cuanto a lo que mencionás @Luis-Fernando-Molina sobre la idea de separar los plugins en función al proveedor es interesante. Pero quizás aún es muy temprano para ello. Debemos analizar cómo resolver algunas cuestiones sobre cómo manejar el crypto index y quizás en función a detalles que salgan durante el desarrollo la lógica de consulta cambie. Yo optaría porque se mantenga todo en un plugin hasta poder probar una lógica funcionando. Quizás sí separaría en una clase a cada proveedor que podrían heredar de una clase CryptoIndexProvider abstracta. En el futuro, quizás se podría hacer algo como lo que hacen sitios que conectan vendedores con compradores donde muestran las tasas en función a las transacciones que realizan. Lo del blockchain de tasas de cambio suena raro, cada broaker tiene su tasa por lo que no hay consenso. Por ahora debemos basarnos en las fuentes más confiables y en la mayor cantidad posible.
Me parece bien. En el caso de la cotización de AR$ y bolivares como van a manejar el tema del dolar blue o el bolivar negro?
separaría en una clase a cada proveedor que podrían heredar de una clase CryptoIndexProvider abstracta.
No sería que implemente una interfaz privada del plugin?
Crypto Index - Capa World
Este plugin tiene como función obtener la relación de conversión de las monedas fiat soportadas por la plataforma con respecto a las cryptomonedas. Debe poder consultarse esta relación tanto sobre el momento actual como sobre un punto particular en el tiempo.
Feature
Consultar el valor de la relación crypto con respecto a una moneda fiat en un momento de tiempo.
Requiere
Una api usada por ejemplo por coinDesk que ofrece en parte este servicio es:
https://openexchangerates.org/documentation
Se debe analizar su uso, licencia y aplicabilidad en nuestra plataforma.
Flujo
public double getMarketPrice(FiatCurrency f, CryptoCurrency c , long time)
el plugin intenta consultar un caché interno, si no tiene lo que busca en caché lo pide a las fuentes de información que tiene para poder retornar un valor adecuado.Persistencia de datos
Analisis pendiente
https://openexchangerates.org/documentation#how-to-use