Java 如何使用bitcoinj library在脱机或本地主机上发送比特币

Java 如何使用bitcoinj library在脱机或本地主机上发送比特币,java,blockchain,peer,bitcoinj,Java,Blockchain,Peer,Bitcoinj,我正在开发一个POC应用程序,我将拥有多个不同用户的比特币钱包。我正在寻找在本地主机上将比特币从一个钱包发送到另一个钱包的任何方法,而无需使用网络来避免网络费用。为了更好地理解;在我的本地系统中,我随身携带2个或更多比特币钱包文件,其中包含钱包的所有详细信息。有没有办法离线(不使用在线网络)将比特币从一个钱包转移到另一个钱包。我尝试使用创建2个钱包 WalletAppKit kit = new WalletAppKit(params, new File("./wallet"), filePref

我正在开发一个POC应用程序,我将拥有多个不同用户的比特币钱包。我正在寻找在本地主机上将比特币从一个钱包发送到另一个钱包的任何方法,而无需使用网络来避免网络费用。为了更好地理解;在我的本地系统中,我随身携带2个或更多比特币钱包文件,其中包含钱包的所有详细信息。有没有办法离线(不使用在线网络)将比特币从一个钱包转移到另一个钱包。我尝试使用创建2个钱包

WalletAppKit kit = new WalletAppKit(params, new File("./wallet"), filePrefix);
kit.startAsync();
kit.awaitRunning();
这是我使用不同的
文件前缀时创建的钱包,或者我可以通过

Wallet wallet = new Wallet(params);
wallet.autoSaveFile(true);
现在我的机器上有两个钱包。我尝试创建
PeerGroup
并尝试
connectToLocalhost()
,但每次它显示时(下面是日志的一部分)

下面是我的主类文件代码:

BriefLogFormatter.init();
        NetworkParameters params = TestNet3Params.get();
        try {
            String walletFileName = "wallet/forwarding-service-testnet.wallet";
            final File walletFile = new File(walletFileName);
            Wallet wallet = Wallet.loadFromFile(walletFile, null);

            WalletAppKit kit = new WalletAppKit(params, new File("./wallet"), "filePrefix");
        kit.startAsync();
        kit.awaitRunning();
        LegacyAddress to = LegacyAddress.fromBase58(params, "n2sPiCfFwjDmakuUDEPiTR9WKQkdkFAcaF");
        SendRequest req = SendRequest.to(to, Coin.parseCoin("0.001"));
        req.feePerKb = Coin.valueOf(0);
        req.ensureMinRequiredFee = false;
        try {

            Wallet.SendResult result = kit.wallet().sendCoins(kit.peerGroup(), req);
            System.out.println("Coins sent >> Transaction fee: " + result.tx.getFee());
        } catch (InsufficientMoneyException e) {
            System.out.println("Not enough coins in your wallet. Missing " + e.missing.getValue()
                    + " satoshis are missing (including fees)");
            System.out.println("Send money to: " + kit.wallet().currentReceiveAddress().toString());
        }
            peerGroup.stopAsync();

        } catch (Exception e) {
            e.printStackTrace();
        }

我能做什么在本地主机peergroup上在随身携带的2个或更多钱包之间传输比特币?

交易必须记录在区块链上。非常确定你需要一个外部网络,因为它可以在外部网络上正常工作,并扣除交易费用。如果两个钱包位于不同的位置,有两个不同的所有者,则可以转移。在这里,我是两个钱包的所有者,我不认为我需要外部网络,因为两个钱包都在我的笔记本电脑中。用于以比特币形式传输数据以将比特币从一个钱包传输到另一个钱包的网络。我在问,如果两个钱包在同一台机器上(我可以完全访问这两个钱包),有没有办法在本地机器上传输比特币(使用bitcoinj library),而不使用外部网络?我希望,现在我的问题更清楚了。如果不使用网络来避免网络费用,交易必须在网络上广播,否则区块链有什么用?仅仅因为你拥有两个或更多钱包,区块链不知道你是你,而不是某个黑客,碰巧偷了别人的钱包。交易需要外部验证,期间和大量其他搜索结果“合并加密钱包”
BriefLogFormatter.init();
        NetworkParameters params = TestNet3Params.get();
        try {
            String walletFileName = "wallet/forwarding-service-testnet.wallet";
            final File walletFile = new File(walletFileName);
            Wallet wallet = Wallet.loadFromFile(walletFile, null);

            WalletAppKit kit = new WalletAppKit(params, new File("./wallet"), "filePrefix");
        kit.startAsync();
        kit.awaitRunning();
        LegacyAddress to = LegacyAddress.fromBase58(params, "n2sPiCfFwjDmakuUDEPiTR9WKQkdkFAcaF");
        SendRequest req = SendRequest.to(to, Coin.parseCoin("0.001"));
        req.feePerKb = Coin.valueOf(0);
        req.ensureMinRequiredFee = false;
        try {

            Wallet.SendResult result = kit.wallet().sendCoins(kit.peerGroup(), req);
            System.out.println("Coins sent >> Transaction fee: " + result.tx.getFee());
        } catch (InsufficientMoneyException e) {
            System.out.println("Not enough coins in your wallet. Missing " + e.missing.getValue()
                    + " satoshis are missing (including fees)");
            System.out.println("Send money to: " + kit.wallet().currentReceiveAddress().toString());
        }
            peerGroup.stopAsync();

        } catch (Exception e) {
            e.printStackTrace();
        }