PHP中Bit-Wasp调用PrivateKeyFactory::fromWif()报废弃错误求助
解决Bit-Wasp库中WIF私钥签名交易的Deprecated错误
我来帮你搞定这个问题——你看到的Deprecated: Non-static method...警告就是导致签名失败的根源。Bit-Wasp的PrivateKeyFactory::fromWif()是实例方法,不能直接用类名静态调用,必须先创建工厂类的实例才行。
具体修复步骤:
确认引入正确的类
先检查代码顶部有没有引入PrivateKeyFactory,如果没有就加上:use BitWasp\Bitcoin\Key\Factory\PrivateKeyFactory;替换错误的静态调用为实例调用
你代码里的这两行是问题所在:$priv = $factory->fromWif($privateKey); $priv = PrivateKeyFactory::fromWif($privateKey);改成下面的写法,先实例化工厂,再调用方法:
// 创建PrivateKeyFactory实例 $keyFactory = new PrivateKeyFactory(); // 通过实例获取私钥对象 $priv = $keyFactory->fromWif($privateKey);之前的
$factory变量应该是没初始化,直接新建实例就好。完整修正后的签名代码片段
把你代码中签名相关的部分替换成这个版本,确保流程正确:$privateKey = 'WIF PRiVATE KEY'; $tx = TransactionFactory::fromHex($hex); $utxos = []; foreach ($tx->getInputs() as $idx => $input) { $txid = $input->getOutPoint()->getTxId()->getHex(); $vout = $input->getOutPoint()->getVout(); $scriptPubKey = $input->getScript()->getBuffer()->getHex(); $utxo = new Utxo(new OutPoint(Buffer::hex($txid, 32), $vout), new TransactionOutput(0, ScriptFactory::fromHex($scriptPubKey))); array_push($utxos, $utxo); } // 修复后的私钥获取逻辑 $keyFactory = new PrivateKeyFactory(); $priv = $keyFactory->fromWif($privateKey); $signer = new Signer($tx, Bitcoin::getEcAdapter()); foreach ($utxos as $i => $utxo) { $signer->sign($i, $priv, $utxo->getOutput()); } $signed = $signer->get(); echo $signed->getHex() . PHP_EOL;
额外提示
如果你的Bit-Wasp库版本较新,建议核对一下官方文档的API调用方式——不同版本可能对方法的静态/实例属性有调整,确保调用方式和当前库版本匹配。这样修改后,那个Deprecated警告会消失,你也能正常用WIF私钥签名交易了。
内容的提问来源于stack exchange,提问作者Maks
相关产品推荐
相关产品推荐

