Compruebe si un usuario paga a otro usuario por el sitio web de bitcoin

Estoy creando un sitio web de bitcoin. Preferiría que el bitcoin no pasara por mi sitio web para evitar problemas de seguridad.

Lo que sucede es que un usuario le paga a otro usuario, y cuando eso sucede, mi sitio web entrega los productos digitales al instante.

Todo lo que necesito hacer es verificar si un usuario paga al otro usuario. Pero el problema es que no puedo encontrar una manera de hacerlo fácilmente.

Iba a usar la API de blockchain para verificar, pero si pagan a través de un sitio web como cryptsy, no puedo verificar porque pasa por varias direcciones.

La única solución que he encontrado hasta ahora es hacer que usen la billetera bitcoin o usar un servicio de depósito en garantía.

El fideicomiso es mi última opción, porque siempre tiene una tarifa, y realmente quiero que esto sea de usuario a usuario.

¡Realmente me vendrían bien algunas sugerencias!

¡Gracias!(:

Puede intentar obtener la clave pública maestra del usuario basada en BIP32. Luego, puede generar claves públicas para ellos sin conocer sus claves privadas y también resuelve su problema.
@abeikverdi, no necesita su clave pública maestra, no hay razón para regalar la clave pública en la raíz del árbol de la billetera HD. La billetera podría fácilmente regalar una rama secundaria al servicio y aún tener ramas para usar para otros fines.
@ StephenM347 ¿Cómo es eso posible? ¿Cómo puede generar la siguiente dirección sin conocer la clave pública maestra? ¿Puedes iluminarme?
@abeikverdi, es solo la clave pública maestra de una rama secundaria, básicamente. Es un elemento del árbol HD que domina todo lo que hay debajo, pero a diferencia del elemento raíz, tiene elementos encima. No soy un experto en BIP32, pero estoy bastante seguro de que básicamente se aplica a que cada clave en el árbol es maestra del sub rancho del cual es la raíz.
@ StephenM347 es la primera vez que escucho algo así. Pensé que solo hay una clave pública maestra y puede generar la clave pública del niño en función de la clave pública. No sabía que la clave pública de un niño puede ser utilizada como clave pública maestra para sus hijos. Suponiendo que esto sea correcto, ¿entonces todos pueden calcular sus claves públicas?

Respuestas (1)

Creo que lo que realmente necesita aquí es poder, bajo demanda, obtener una nueva dirección para el destinatario que sea específica para un nuevo pedido. Entonces, por ejemplo, si el receptor de las monedas va a obtener 1 BTC, obtienes una nueva dirección para ese usuario, la asocias con el pedido y, tan pronto como recibe las monedas, sabes que este pedido se ha cumplido.

Sin embargo, puede que no sea tan fácil lograr que el usuario (receptor de los fondos) le proporcione una gran lista de sus direcciones con anticipación. Aquí es donde algo como las billeteras BIP32 puede ser útil. Con las billeteras deterministas jerárquicas, puede obtener una clave pública extendida y generar direcciones para otra persona según sea necesario sin necesidad de conocer las claves privadas de esas direcciones.

No todas las billeteras son billeteras HD, y probablemente aún menos soporte para obtener una xpubpara dar a alguien por generar nuevas direcciones en nombre de las billeteras. Tendrías que investigar un poco para encontrar una billetera que te permitiera hacer esto. Obviamente, no podría obligar a los pagadores a usar este tipo de billetera, pero si hay relativamente pocos receptores (comerciantes), es posible que pueda hacer que participen usando una billetera HD con más funciones para recibir su pagos

Más información: https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki

Electrum versión 2.0 y superior tiene soporte BIP32 y puede exportar su xpub. Busque en Monedero > Claves públicas maestras
@StephenM347 Entonces, con este método, el receptor de las monedas tendría que tener este tipo de billetera. ¿Hay alguna forma de que mi sitio web pueda generar una dirección y esa dirección reenvíe el bitcoin al receptor? Luego verificaría esa dirección para la transacción.
@microzee, estás buscando dos cosas que compiten. Desea generar las direcciones usted mismo, pero el usuario debe recibirlas. Pero si genera la dirección usted mismo (de la manera normal), entonces tiene la clave privada. La forma correcta de hacerlo es que el usuario le dé una clave bip32, solo requiere una configuración de 1 vez desde el receptor de monedas. De todos modos, la mayoría de las billeteras están usando o avanzando hacia el uso de billeteras HD en estos días.
@ StephenM347 Ya veo. Nueva idea, ¿qué pasa si uso blockchain.info/api/api_receive pero en lugar de usarlo para un negocio como el que estaba destinado, creo una dirección para cada receptor usando esta API? Luego compruebo la dirección generada para una transacción. Una vez que veo una transacción, esta dirección ya no se usa y creo otra dirección para su próxima transacción. ¿Me parece la forma más fácil? ¿Cuáles son sus pensamientos sobre esto?