bitcoinjs / bitcoinjs-lib

A javascript Bitcoin library for node.js and browsers.
MIT License
5.6k stars 2.08k forks source link

Cannot push transaction via testnet (bitcoinjs-lib) #1489

Closed lxx14 closed 4 years ago

lxx14 commented 4 years ago

Can anybody describe me where I made mistake. I want to transfer btc from 2 transactions in 1st address to 2nd address, I can sign transaction? decode it? buuuut... In testnet my bitcoins dont move (below my code):

import React from 'react';
import { Text } from 'react-native';
import "./shim";
const bitcoin = require("bitcoinjs-lib");
const bip39 = require('bip39');

const TestNet = bitcoin.networks.testnet;           

const App = () => {

  // 2nd address

  const phrase_2 = 'test2 phrase2 www2 qqq2 rtye2 kgjgy2 kdsdb2 hgkgo2 ngyv2 nghgdft2 jgydcf2 nfjbdt2';                           
  const seed_2 = bip39.mnemonicToSeedSync(phrase_2);          
  var ourWallet_2 = bitcoin.bip32.fromSeed(seed_2, TestNet);   

  const { address: address_2 } = bitcoin.payments.p2pkh({ pubkey: ourWallet_2.publicKey, network: TestNet });  // mfaLp8mBCa3mvD5kMn2LQgAQ5RXVyFabZ8

  let privateKey_2 = ourWallet_2.toWIF();  // cVCLj2H1Ta2W7qgxbp4ips9HDoAvmMSHduXzM3QdGPDV6SC2xV5E

  //-------------------------------------------------------------------------------------------------------------------------------------------------------------//

  // 1st adress

  const phrase = 'test phrase www qqq rtye kgjgy kdsdb hgkgo ngyv nghgdft jgydcf nfjbdt';                           
  const seed = bip39.mnemonicToSeedSync(phrase);          
  var ourWallet = bitcoin.bip32.fromSeed(seed, TestNet);   

  const { address } = bitcoin.payments.p2pkh({ pubkey: ourWallet.publicKey, network: TestNet });  // mmXt7ZkAkUvyj9BxDekCw5WdAPtf8eZfZj

  let privateKey = ourWallet.toWIF();   // cVNANJJxgH9ZzbyKmKN8JbtfgiRCsnqQfyVbqgnZgCm8Vbbenvsh

  const txId_first = '68d915a19d50b2139139dcdfced41eba509a654ec93c65c9793b6bdd0f73064b';  // first transaction via fauset to 1st adress
  const txId_second = '5b2e76f3916e7e10ca55ef638e668f8dc0a01fed5acb10535f456d17c8a021cb'; // second transaction via fauset to 1st adress

  let tx_new = new bitcoin.TransactionBuilder(TestNet);

  tx_new.addInput(txId_first, 0);
  tx_new.addInput(txId_second, 1);

  tx_new.addOutput(address_2, 3276363);  // btc to address_2 from two transactions address_1
  tx_new.addOutput(address, 50000);

  const privateSign = bitcoin.ECPair.fromWIF(privateKey, TestNet)
  tx_new.sign(0, privateSign);
  tx_new.sign(1, privateSign);
  let tx_new_hex = tx_new.build().toHex()

  console.log('transaction------------------->', tx_new_hex) // 02000000024b06730fdd6b3b79c9653cc94e659a50ba1ed4cedfdc399113b2509da115d968000000006b483045022100fefd23f0fd39a841f1cd539839a80568fe758ed8a0040303e72ede649fcc540202204724e5bec7a80becfd670acdfd34b96d2e5d6019c7c080f31314eecb3c19f585012102b819bee332f189035a50588eca61290323adedc1023b9864e61d9112a87fe260ffffffffcb21a0c8176d455f5310cb5aed1fa0c08d8f668e63ef55ca107e6e91f3762e5b010000006b483045022100ccd0051b0e46c06555e61e49ed96b8ef796ba18f2eef00dbf93975cb50a7ad330220791e95c19f7f3f1025108c58e1b07542a0f437ea573c087831380cefd34791f6012102b819bee332f189035a50588eca61290323adedc1023b9864e61d9112a87fe260ffffffff024bfe3100000000001976a91400a40ba55fd64a77ce70676299be9a59e566201188ac50c30000000000001976a91441fdae40c88b74fda388833bdd152f6833778a1688ac00000000

  return (
    <>
      <Text>React Native</Text>
    </>
  );
};

export default App;
junderw commented 4 years ago

second addInput should have a vout of 0.

you used 1 where you should use 0

lxx14 commented 4 years ago

Thank you very match for fast answer, I am change my input, but nothing changed in wallet on the testnet... here is my decoding transaction:

{
    "addresses": [
        "mmXt7ZkAkUvyj9BxDekCw5WdAPtf8eZfZj", 
        "mfaLp8mBCa3mvD5kMn2LQgAQ5RXVyFabZ8"
    ], 
    "block_height": -1, 
    "block_index": -1, 
    "confirmations": 0, 
    "double_spend": false, 
    "fees": 2434121, 
    "hash": "c91f81c80b4882b9a679995d48160f852d9c52884338e690e4b8444370a6544b", 
    "inputs": [
        {
            "addresses": [
                "mmXt7ZkAkUvyj9BxDekCw5WdAPtf8eZfZj"
            ], 
            "age": 1580302, 
            "output_index": 0, 
            "output_value": 2784121, 
            "prev_hash": "68d915a19d50b2139139dcdfced41eba509a654ec93c65c9793b6bdd0f73064b", 
            "script": "473044022002c247ad9054b9492feeb2258bd264deb1d936c2967a04325bb36e7ce38d32bc022054b5d8f3f628ce067b73a2b4690745e115edc466314b50f1aa3bb1bcc0582cb0012102b819bee332f189035a50588eca61290323adedc1023b9864e61d9112a87fe260", 
            "script_type": "pay-to-pubkey-hash", 
            "sequence": 4294967295
        }, 
        {
            "addresses": [
                "mmXt7ZkAkUvyj9BxDekCw5WdAPtf8eZfZj"
            ], 
            "age": 1580391, 
            "output_index": 0, 
            "output_value": 2976363, 
            "prev_hash": "5b2e76f3916e7e10ca55ef638e668f8dc0a01fed5acb10535f456d17c8a021cb", 
            "script": "4730440220757e8267a560588a15cd325e465694933983440a3203e411e6331a7aaa6d938f022063bb5ff584f06f33c7554ad67be0b23b301ba71619b3b5a47adf9bd5e15e01a4012102b819bee332f189035a50588eca61290323adedc1023b9864e61d9112a87fe260", 
            "script_type": "pay-to-pubkey-hash", 
            "sequence": 4294967295
        }
    ], 
    "outputs": [
        {
            "addresses": [
                "mfaLp8mBCa3mvD5kMn2LQgAQ5RXVyFabZ8"
            ], 
            "script": "76a91400a40ba55fd64a77ce70676299be9a59e566201188ac", 
            "script_type": "pay-to-pubkey-hash", 
            "value": 3276363
        }, 
        {
            "addresses": [
                "mmXt7ZkAkUvyj9BxDekCw5WdAPtf8eZfZj"
            ], 
            "script": "76a91441fdae40c88b74fda388833bdd152f6833778a1688ac", 
            "script_type": "pay-to-pubkey-hash", 
            "value": 50000
        }
    ], 
    "preference": "high", 
    "received": "2019-10-08T07:21:53.710669043Z", 
    "relayed_by": "52.91.241.203", 
    "size": 372, 
    "total": 3326363, 
    "ver": 2, 
    "vin_sz": 2, 
    "vout_sz": 2
}

This is wallet from:

https://live.blockcypher.com/btc-testnet/address/mmXt7ZkAkUvyj9BxDekCw5WdAPtf8eZfZj/

This is wallet to:

https://live.blockcypher.com/btc-testnet/address/mfaLp8mBCa3mvD5kMn2LQgAQ5RXVyFabZ8/

BTC not moved from first wallet to second....

junderw commented 4 years ago

You didn't broadcast the transaction.

You need to send the signed transaction to a node to get it relayed to the network.

I broadcasted it for you.

Here's the details: https://testnet.smartbit.com.au/tx/c91f81c80b4882b9a679995d48160f852d9c52884338e690e4b8444370a6544b

Next time, you can POST the transaction to this endpoint for the API you are using:

https://www.blockcypher.com/dev/bitcoin/#push-raw-transaction-endpoint

junderw commented 4 years ago
POST to:
https://api.blockcypher.com/v1/btc/test3/txs/push

With {"tx":"02000000.......00000000"}

Which contains your transaction.
lxx14 commented 4 years ago

thank you very very very match))

I began to understand much more

Lloyd1229 commented 3 years ago

I can't use bitcoinjs-lib and bip39,How do you use them in react-native? thank you very match