重复使用相同的比特币钱包地址是一个很大的隐私问题。如果您有一家简单的电子产品商店或一个募捐网站,您可能需要考虑为每笔交易生成唯一的地址。有许多支付系统,例如Bitpay,可以为您完成所有繁重的工作。缺点是他们需要使用您的私钥。但是,您可以使用来自分层确定性(HD)钱包的扩展公钥(XPUB)来实施您自己的简单解决方案。BIP32解释了整个过程。我建议您先阅读它以大致了解地址的来源。在本教程中,我们将使用Electrum、OSXSierra、Apache2.4、PHP7.1和Bit-Wasp/bitcoin-php。对于比特币钱包,任何像Mycelium这样的HD钱包都可以使用。在任何类UNIX系统上,尤其是Linux,安装过程应该是相同的。PHP库及其依赖项需要PHP5.6+。打开一个终端并检查您当前的版本:php-v在我的例子中输出是:PHP7.1.0(cli)(built:Jan2201720:09:35)(NTS)Copyright(c)1997-2016ThePHPGroupZendEnginev3.1.0-dev,Copyright(c)1998-2016ZendTechnologies如果版本低于5.6,必须先升级PHP。全局安装Composer在我们安装bitcoin-php库之前,我们需要确保安装了Composer。打开一个终端并输入:composer-V如果它是这样写的:Composerversion1.3.02016-12-2400:47:03,你可以安全地跳过这一步。否则安装:curl-sShttps://getcomposer.org/installer|phpsudomvcomposer.phar/usr/local/bin/composer再次运行composer-V查看是否安装成功。安装比特币PHP库转到您的Web服务器文档根目录(您的网站存储的目录)并创建文件夹bitcoin/hdkeys。在我的示例中,文档根目录是~/Sites,但在其他类UNIX系统上也可以是/var/www。如果您不确定,请检查您的服务器设置。cd~/Sitesmkdirbitcoinbitcoin/hdkeyscdbitcoin/hdkeys安装Bit-Wasp/bitcoin-php库:composerrequirebitwasp/bitcoin它将下载库和依赖项。这个过程可能需要几分钟。如果没有错误,请转到下一步。从xpub、ypux和zpub生成钱包地址我写了一个小类来加载所有必要的bitcoin-php类并包装某些方法以便于使用。下载到目录:wgethttps://gist.githubusercontent.com/mariodian/5b67a1f315a74a7753a6f23d0198ec48/raw/2742a7909dd2621381de53209e85348a078df470/HD.php首先,我们需要获取扩展的公钥。打开Electrum,单击钱包,然后单击主公钥并复制该字符串。在Electrum3.x中,转到钱包->信息->主公钥。Legacyaddress(p2pkh)打开你喜欢的文本编辑器,创建一个名为generate.php的文件,然后复制并粘贴以下代码:set_xpub($xpub);$address=$hd->address_from_master_pub($path);回显$地址;确保根据您使用自己的密钥编辑$xpub变量(您也可以使用我的密钥)。打开浏览器并输入http//localhost/hdkeys/generate.php(或您自己的路径)。输出应与您的Electrum钱包中的第一个地址相同。注释或取消注释,看看代码中不同路径的地址是否发生了变化。如果你使用Mycelium,你必须编辑$path变量:$path="44'/0'/0'/0/0";这将显示第一个钱包地址。要增加地址索引,请编辑最后一位。本机SegWit地址(p2wpkh)对于以bc1...开头的本机SegWit地址(p2wkh),使用以下代码:set_zpub($zpub);$address=$hd->address_from_master_pub($path);回显$地址;不要忘记编辑$zpub变量。非原生SegWit地址(p2sh-p2wpkh)大多数SegWit钱包目前使用p2sh中包含的pay-to-witness-public-key-hash地址。示例代码为:set_ypub($ypub);$address=$hd->address_from_master_pub($path);回显$地址;同样,更改您自己的$ypub变量。多重签名地址(p2sh)在下一个示例中,我在Electrum中创建了一个2-of-2多重签名钱包。这意味着需要2个签名(总共2个)来签署和广播交易。第二个签名是根据前一个示例的扩展密钥创建的。如果您在创建钱包时遇到困难,请参阅Electrum文档。返回文本编辑器,创建一个名为generate_multisig.php的新文件,然后复制并粘贴以下内容:set_multisig_xpubs($xpubs);$address=$hd->multisig_address_from_xpub($m,$path);echo$address;Again,edit$xpubsaccordinglyorusemykey.Don'tforgettochange$pathifyouuseanotherwallet.Openhttp://localhost/hdkeys/generate_multisig.phpinyourbrowserandyoushouldseeyourfirstmultisigwalletaddress.HowcanIusethecodetofetchthelastaddressindexfromthedatabase,incrementitandgenerateanewaddresseverytimeaneworderisreceived.Savethenewwalletaddress,timestampandindexwiththeneworder.Youcanalsochecktoseewhatexistingaddresseshavenotbeenfundedforthosedaysoftheweek.Ifsuchanaddressisfound,itcanbeassignedtoaneworder.Thispreventsgeneratingtoomanyaddresses.However,ifyoudogeneratealargenumberofaddresses,youwillneedtoincreasethegaplimitofyourwallet.转到Electrum控制台并运行以下命令并重新启动钱包:wallet.gap_limit=100当您转到地址选项卡时,您应该会看到更多钱包(以红色突出显示)。如您所见,整个解决方案只有几行代码,主要优点是将其与您的私钥保存在一起。您不依赖任何第三方,这是主要目的。希望本教程有用,如果您遇到任何问题,请告诉我。分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:Java以太坊开发教程,主要面向java和android程序员开发web3j进行区块链以太坊开发。PythonEthereum,主要供python工程师使用web3.py详细开发区块链以太坊。PHPEthereum主要介绍使用PHP进行智能合约开发交互、账户创建、交易、转账、代币开发、过滤器和交易等。以太坊入门教程,主要介绍智能合约和dapp应用开发,适合入门。以太坊开发进阶教程,主要介绍使用node.js、mongodb、blockchain、ipfs实现去中心化电商DApp实战,适合进阶。C#以太坊主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器与交易等EOS教程,本课程帮助您快速上手开发EOS区块链去中心化应用,涵盖EOS工具链、账户钱包、发行代币、智能合约开发部署、使用代码与智能合约交互等核心知识点,最终利用所有知识点完成一个笔记DApp的开发.Java比特币开发教程,本课程面向初学者,内容涵盖了比特币的核心概念,如区块链存储、去中心化共识机制、密钥和脚本、交易和UTXO等,还详细讲解了如何使用JavaIntegrating比特币在代码中的支持功能,如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习教程。Php比特币开发教程,本课程面向初学者,内容涵盖了比特币的核心概念,如区块链存储、去中心化共识机制、密钥和脚本、交易和UTXO等,同时还详细讲解了如何使用PhpIntegrating比特币在代码中的支持功能,如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习教程。tendermint区块链开发详解。本课程适合想要使用tendermint进行区块链开发的工程师。课程内容包含了tendermint应用开发模型中的核心概念,如ABCI接口、Merkle树、多版本状态库等,包含了丰富的代币发行等实用代码,是go语言工程师快速上手的最佳选择开始区块链开发。这里是原文GenerateBitcoinwalletaddressfromextendedpublickeyusingPHP
