¿Hay alguna manera de generar nuevas direcciones para la billetera de otra persona?

Pensé que vi que esta función existía en alguna parte, pero no puedo encontrar la referencia.

Caso de uso: Alice necesita seguir enviando múltiples transacciones de bitcoin a Bob y quiere usar una dirección de pago diferente cada vez, pero ni Alice ni Bob quieren molestar a Bob con tener que enviar una nueva dirección para que Alice la use. Ni Alice ni Bob quieren que Alice tenga la clave privada de Bob.

Cualquier servicio que envíe bitcoins en transacciones múltiples a un cliente podría hacer uso de esta función. Los servicios actuales que he visto, como la minería, simplemente reutilizan la misma dirección una y otra vez, lo cual no se recomienda.

¿Cómo se llama esta característica?

¿Qué api de bitcoin (si corresponde) lo facilita, o cómo comenzaría a usar esta función de api?

EDITAR

Con la ayuda de la respuesta, pude hacer esto agregando bitwasp/bitcoin a mi proyecto php y este código:

//bitwasp/bitcoin library
require_once(__DIR__.'\..\../vendor/autoload.php');
//use BitWasp\Bitcoin\Bitcoin;
use BitWasp\Bitcoin\Key\Deterministic\HierarchicalKeyFactory;
use BitWasp\Bitcoin\Key\Deterministic\HierarchicalKeySequence;
use BitWasp\Bitcoin\Key\Deterministic\MultisigHD;
use BitWasp\Bitcoin\Network\NetworkFactory;
use BitWasp\Bitcoin\Address\PayToPubKeyHashAddress;

//$xpub = 'xpub661MyMwAqRbcGYcu6n1FmV1TbE8EwnSKecRZLvKAMyj4qLf15qXsoNryiKNvCkRq3z5kBCeZG8115jj28eVqmeKBJZPqjAfwRD3TGx1w5hY';
//$xpub = 'xpub6CUGRUonZSQ4TWtTMmzXdrXDtypWKiKrhko4egpiMZbpiaQL2jkwSB1icqYh2cfDfVxdx4df189oLKnC5fSwqPfgyP3hooxujYzAu3fDVmz';
//$path = '0/0'; // 1st receiving address
// $path = '0/2'; // 3rd receiving address
// $path = '1/0'; // 1st change address
// $path = '1/1'; // 2nd change address
public static function NewReceivingAddress($xpub, $index, $change = false){
    $key = HierarchicalKeyFactory::fromExtended($xpub, NetworkFactory::bitcoin());
    $path = ($change ? '1' : '0').'/'.$index;
    $child_key = $key->derivePath($path);
    return new Result('data',(new PayToPubKeyHashAddress($child_key->getPublicKey()->getPubKeyHash()))->getAddress());
}

Respuestas (1)

Bob puede proporcionarle a Alice una clave pública extendida (xpub). Esto le permitirá a Alice generar tantas direcciones como sea necesario, todas las cuales serán accesibles para Bob a través de la correspondiente clave privada extendida (xpriv), a la que solo él tiene acceso.

Hay muchas herramientas y bibliotecas que admiten la derivación de direcciones de xpubs, como BitcoinJS-lib .

Hasta donde yo sé, blockchain.info es el único explorador compatible con xpub, y eso solo se aplica a las direcciones p2pkh. Aquí hay un ejemplo: https://blockchain.info/xpub/xpub6CUGRUonZSQ4TWtTMmzXdrXDtypWKiKrhko4egpiMZbpiaQL2jkwSB1icqYh2cfDfVxdx4df189oLKnC5fSwqPfgyP3hooxujYzAu3fDVmz

El proceso que busco se describe en BIP32 en la sección sobre la generación de claves secundarias públicas a partir de claves primarias públicas . Entonces aquí hay un ejemplo de uso que se puede usar de forma anónima. Tiene razón, hay muchas implementaciones, pero ¿tiene alguna idea de si el servidor bitcoin core json rpc es compatible o no? Gracias.
Bitcoin Core admite derivaciones BIP32, pero no tiene concepto de xpubs. Tendrás que buscar en otro lado. Bitcoinjs-lib es un buen lugar para comenzar