Есть ли способ сгенерировать новые адреса для чужого кошелька?

Я думал, что где-то видел эту функцию, но не могу найти ссылку.

Вариант использования: Алисе необходимо продолжать отправлять несколько биткойн-транзакций Бобу, и она хочет каждый раз использовать другой платежный адрес, но ни Алиса, ни Боб не хотят беспокоить Боба необходимостью отправлять Алисе новый адрес. Ни Алиса, ни Боб не хотят, чтобы у Алисы был закрытый ключ Боба.

Любой сервис, который отправляет биткойны несколькими транзакциями клиенту, может использовать эту функцию. Текущие службы, которые я видел, такие как майнинг, просто повторно используют один и тот же адрес снова и снова, что не рекомендуется.

Как называется эта функция?

Какой биткойн API (если есть) облегчает это, или как мне начать использовать эту функцию API?

РЕДАКТИРОВАТЬ

С помощью ответа я смог сделать это, добавив bitwasp/bitcoin в свой проект php и этот код:

//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());
}

Ответы (1)

Боб может предоставить Алисе расширенный открытый ключ (xpub). Это позволит Алисе сгенерировать столько адресов, сколько потребуется, и все они будут доступны Бобу через соответствующий расширенный закрытый ключ (xpriv), доступ к которому есть только у него.

Существует множество инструментов и библиотек, которые поддерживают получение адресов из xpubs, например, BitcoinJS-lib .

Насколько мне известно, blockchain.info — единственный эксплорер с поддержкой xpub, и это также относится только к p2pkh-адресам. Вот пример: https://blockchain.info/xpub/xpub6CUGRUonZSQ4TWtTMmzXdrXDtypWKiKrhko4egpiMZbpiaQL2jkwSB1icqYh2cfDfVxdx4df189oLKnC5fSwqPfgyP3hooxujYzAu3fDVmz

Процесс, который мне нужен, описан в BIP32 в разделе о создании открытых дочерних ключей из открытых родительских ключей . Тогда вот пример использования, которое можно использовать анонимно. Вы правы, существует много реализаций, но знаете ли вы, поддерживает ли это биткойн-ядро json rpc-сервер? Спасибо.
Bitcoin Core поддерживает производные BIP32, но не имеет концепции xpubs. Вам придется искать в другом месте. Bitcoinjs-lib — хорошее место для начала