You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中Bit-Wasp调用PrivateKeyFactory::fromWif()报废弃错误求助

解决Bit-Wasp库中WIF私钥签名交易的Deprecated错误

我来帮你搞定这个问题——你看到的Deprecated: Non-static method...警告就是导致签名失败的根源。Bit-Wasp的PrivateKeyFactory::fromWif()是实例方法,不能直接用类名静态调用,必须先创建工厂类的实例才行。

具体修复步骤:

  1. 确认引入正确的类
    先检查代码顶部有没有引入PrivateKeyFactory,如果没有就加上:

    use BitWasp\Bitcoin\Key\Factory\PrivateKeyFactory;
    
  2. 替换错误的静态调用为实例调用
    你代码里的这两行是问题所在:

    $priv = $factory->fromWif($privateKey); 
    $priv = PrivateKeyFactory::fromWif($privateKey); 
    

    改成下面的写法,先实例化工厂,再调用方法:

    // 创建PrivateKeyFactory实例
    $keyFactory = new PrivateKeyFactory();
    // 通过实例获取私钥对象
    $priv = $keyFactory->fromWif($privateKey);
    

    之前的$factory变量应该是没初始化,直接新建实例就好。

  3. 完整修正后的签名代码片段
    把你代码中签名相关的部分替换成这个版本,确保流程正确:

    $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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:04:47