Bitcoin

Error de transacción de Bitcoin transacción SegWit

single-image
img-ads


Mi código genera una transacción que no funciona por alguna razón que no puedo explicar. (Se queja de un error de firma). Desafortunadamente, esta transacción tiene 6 entradas y 2 salidas. He estado tratando de averiguar qué está pasando durante mucho tiempo y simplemente no puedo encontrar un problema. Publicaré toda la información aquí y espero que no se convierta en un TL; La situación de RD lo hará.

Esto es lo que sé: el formato de la transacción es correcto. Las claves públicas / privadas son correctas (estoy usando objetos OpenSSL y EC_KEY) así que verifiqué que puedan firmar, etc. Cuando creo la transacción en la ventana de depuración (usando JSON) la única diferencia es entre mi transacción y la transacción generada las firmas (sí, sé que las firmas OpenSSL son aleatorias).

Eso deja la simple conclusión de que lo que estoy firmando para cada entrada es incorrecto. En aras de la claridad, escribí el código aquí para asegurarme de que la firma derivada de OpenSSL esté normalizada y formateada correctamente.



































































enum PointTransform : uint32_t
{
    NONE = 0,
    NORMALISE_R = 1 << 0,
    NORMALISE_S = 1 << 1,
    REDUCE_CURVE_ORDER_S = 1 << 2
};

bool CommonUtils::EllipticPointsToDER(std::vector<uint8_t>& points, PointTransform transform)
{
  std::vector<uint8_t> der{ 0x30, 0x44 };
  auto InsertCoord = [&] 

















(auto st, auto en, bool normalize) {
    der.push_back(0x02);
    der.push_back(static_cast<uint8_t>(points.size() / 2));
    if ((*st & 0x80) && normalize)
    {
      der.at(1)++;
      der.at(der.size() - 1)++;
      der.push_back(0);
    }
    der.insert(der.end(), st, en);
  };

  if (points.size() != (1 << 6))
    return false;
  InsertCoord(points.begin(), points.begin() + (points.size() / 2), transform & NORMALISE_R);
  std::vector<uint8_t> coord(points.begin() + (points.size() / 2), points.end());
  if (transform & REDUCE_CURVE_ORDER_S)
  {
    std::unique_ptr<BN_CTX, void(*)(BN_CTX*)> bn_ctx(BN_CTX_new(), [] 








(BN_CTX* ctx) { BN_CTX_free(ctx); });
    if (!bn_ctx)
      return false;
    BN_CTX_start(bn_ctx.get());
    BIGNUM* big_num = BN_CTX_get(bn_ctx.get());
    if (!big_num)
      return false;
    BN_bin2bn(coord.data(), static_cast<int>(coord.size()), big_num);
    coord.resize(BN_num_bytes(big_num));
    std::unique_ptr<EC_GROUP, void(*)(EC_GROUP*)> ec_group(EC_GROUP_new_by_curve_name(NID_secp256k1), [] 















(EC_GROUP* group) { EC_GROUP_free(group); });
    if (!ec_group)
      return false;
    const BIGNUM* order = EC_GROUP_get0_order(ec_group.get());
    BIGNUM* half_order = BN_CTX_get(bn_ctx.get());
    if (!half_order)
      return false;
    BN_rshift1(half_order, order);
    if (BN_cmp(big_num, half_order) > 0)
      BN_sub(big_num, order, big_num);
    coord.resize(BN_bn2binpad(big_num, coord.data(), static_cast<int>(coord.size())));
    BN_CTX_end(bn_ctx.get());
  }
  InsertCoord(coord.begin(), coord.end(), transform & NORMALISE_S);
  points = std::move(der);
  return true;
}

Por lo tanto, debe obtener una firma DER con el formato correcto de este código, con la coordenada S también correctamente reducida.

Aquí está la transacción firmada que no funcionó:









































02000000
0001
06
b5744c975b81b9f5f4ade9ac35e76b249955d8f3b7778a369476d56453c28d8b 02000000  ; Tx1 SegWit
17160014dbdd8c0bd9555429baf6b7305b259f3a75e0a9cd
ffffffff
cb4c0801ab2743c09f9b5e2d78f063c078d43446dddcfe5494cf68903ecd6201 01000000  ; Tx2 Legacy
6a4730440220660f3b3993722a9fb19edecdf4b97b53e6fa4deafe5397ed120fb43d1ca8189002207f0ead0e46e85df052d79979b4fc3c6f39ae825bb2b34e6fc1a9de8b802acee4 01
2103b4b8b88203fb1a7e27edd30d6e2980abfda88ced5ecafab6df07edd4b9f83a67
ffffffff
d06a4be37479cefd5c971ced4fc8cbef03753695160acf8993a054446e9b25dd 00000000  ; Tx3 SegWit
17160014dbdd8c0bd9555429baf6b7305b259f3a75e0a9cd
ffffffff
f96d60838f054954bc2880e549ab3b4313662bcc664b9925052b49487bc295ed 00000000  ; Tx4 SegWit
17160014dbdd8c0bd9555429baf6b7305b259f3a75e0a9cd
ffffffff
dfe705c5e3d86c143aee3a4c0c3bd4c4bd315dfd5714e67713de12495b528c94 00000000  ; Tx5 Legacy
6a4730440220278458e79f4598e1ef3d9765ece7afe6b6a996845e4972d69a48661b34e61fcd02202f4046ad2b0df0fabf385b46f82231f2829ab0d4a584be6a6346526f702247c1 01
2103b4b8b88203fb1a7e27edd30d6e2980abfda88ced5ecafab6df07edd4b9f83a67
ffffffff
f96d60838f054954bc2880e549ab3b4313662bcc664b9925052b49487bc295ed 02000000  ; Tx6 Legacy
6a47304402201fb92d6856d778d6fad87ead98edb9155e41d0f411bdad67ae0ec12d6e3abb30022050d9bbf533e3aa182bb11d39d778ea0fc4f4705d34d3fafc500bfe7ab5e42308 01
21033f690c479fdd55456dd65f76e488c0ff45afdd3bf53c0fe0ee741d0180c0cae8
ffffffff
02                                                                         ; Outputs
c0adeba000000000 17a9147dc5de6129049763b8e01cd8263422c544e4583587
c0ed7c1100000000 1976a91410a62cd6f212baa5d8be41da751172c52bf7395088ac
02                                                                         ; Tx1 Witness
47304402207cbe1be171723ef586e85371776a61a88fb21de0bbc41632f8b502cc75130abc0220784bd3d741aab8425f4b0c9f994c1e7ae394c451549babf79f29a11b112d78db 01
2103b4b8b88203fb1a7e27edd30d6e2980abfda88ced5ecafab6df07edd4b9f83a67
00                                                                         ; Tx2 Witness
02                                                                         ; Tx3 Witness
47304402201b6440bcaa78b5619f57f737bd9304f6130659b261b823fec06512366544e5ab02200c7bd34600b5ae7a4f57b7cd50b43274ce29febe2ecdef07d39762d3a646ff21 01
2103b4b8b88203fb1a7e27edd30d6e2980abfda88ced5ecafab6df07edd4b9f83a67
02                                                                         ; Tx4 Witness
47304402201f46677ba59741e6179a7fc3427c2dd73bc4e15e753800cd56c30a6b12cdf4d70220190a28000a0ef6d330b020aa2ab864f64d83c22f35072bda47e0f721fd06212a 01
2103b4b8b88203fb1a7e27edd30d6e2980abfda88ced5ecafab6df07edd4b9f83a67
00                                                                         ; Tx5 Witness
00                                                                         ; Tx6 Witness
00000000

Como se puede ver arriba, hay 3 transacciones SegWit y 3 transacciones heredadas, y la estructura de la transacción es correcta. Las entradas de SegWit están firmadas con BIP-143 y las más antiguas con el método de firma original de dSha256 de la transacción con el ScriptSig correcto.

Aquí están mis entradas con sus valores:
























Input 1: 8b8dc25364d57694368a77b7f3d85599246be735ace9adf4f5b9815b974c74b5  (P2WPKH)
Vout:    2
Value:   6.998

Input 2: 0162cd3e9068cf9454fedcdd4634d478c063f0782d5e9b9fc04327ab01084ccb  (P2PKH)
Vout:    1
Value:   7.0

Input 3: dd259b6e4454a09389cf0a1695367503efcbc84fed1c975cfdce7974e34b6ad0  (P2WPKH)
Vout:    0
Value:   9.0

Input 4: ed95c27b48492b0525994b66cc2b6613433bab49e58028bc5449058f83606df9  (P2WPKH)
Vout:    0
Value:   2.0

Input 5: 948c525b4912de1377e61457fd5d31bdc4d43b0c4c3aee3a146cd8e3c505e7df  (P2PKH)
Vout:    0
Value:   2.0

Input 6: ed95c27b48492b0525994b66cc2b6613433bab49e58028bc5449058f83606df9  (P2PKH)
Vout:    2
Value:   2.935

Estos son los datos que realmente serán dSha256 y luego se firmarán para cada entrada:



























































































































Tx Input 1 is signed with (SegWit):

02000000
11644fe7dc5e4d1b91acf0e27567657d6424d71a9235083df9e9de0869b03717              dSha256 Prevouts
94ab25a89d162fcb547d533cd20ba0fce1379a1d435825ec1484dcd8a0dd414f              dSha256 Sequence
b5744c975b81b9f5f4ade9ac35e76b249955d8f3b7778a369476d56453c28d8b 02000000     Outpoint
1976a914dbdd8c0bd9555429baf6b7305b259f3a75e0a9cd88ac                          Script Code
c019b62900000000                                                              Amount: 6.998
ffffffff                                                                      Sequence
630b10c140209d00bd5862aba0e2ddfd9ca6b32835ba6d2d635854bb5b332283              dSha256 Outputs
00000000                                                                      Locktime
01000000                                                                      Sig Hash Type

Tx Input 2 is signed with (Legacy):

02000000
06
b5744c975b81b9f5f4ade9ac35e76b249955d8f3b7778a369476d56453c28d8b 02000000
00
ffffffff
cb4c0801ab2743c09f9b5e2d78f063c078d43446dddcfe5494cf68903ecd6201 01000000    ; Input for signing
1976a914dbdd8c0bd9555429baf6b7305b259f3a75e0a9cd88ac
ffffffff
b5744c975b81b9f5f4ade9ac35e76b249955d8f3b7778a369476d56453c28d8b 02000000
00
ffffffff
b5744c975b81b9f5f4ade9ac35e76b249955d8f3b7778a369476d56453c28d8b 02000000
00
ffffffff
cb4c0801ab2743c09f9b5e2d78f063c078d43446dddcfe5494cf68903ecd6201 01000000
00
ffffffff
f96d60838f054954bc2880e549ab3b4313662bcc664b9925052b49487bc295ed 02000000
00
ffffffff
02
c0adeba000000000 17a9147dc5de6129049763b8e01cd8263422c544e4583587
c0ed7c1100000000 1976a91410a62cd6f212baa5d8be41da751172c52bf7395088ac
00000000
01000000

Tx Input 3 is signed with (SegWit):

02000000
11644fe7dc5e4d1b91acf0e27567657d6424d71a9235083df9e9de0869b03717
94ab25a89d162fcb547d533cd20ba0fce1379a1d435825ec1484dcd8a0dd414f
d06a4be37479cefd5c971ced4fc8cbef03753695160acf8993a054446e9b25dd 00000000
1976a914dbdd8c0bd9555429baf6b7305b259f3a75e0a9cd88ac
00e9a43500000000                                                      Amount: 9.0
ffffffff
630b10c140209d00bd5862aba0e2ddfd9ca6b32835ba6d2d635854bb5b332283
00000000
01000000

Tx Input 4 is signed with (SegWit):

02000000
11644fe7dc5e4d1b91acf0e27567657d6424d71a9235083df9e9de0869b03717
94ab25a89d162fcb547d533cd20ba0fce1379a1d435825ec1484dcd8a0dd414f
f96d60838f054954bc2880e549ab3b4313662bcc664b9925052b49487bc295ed 00000000
1976a914dbdd8c0bd9555429baf6b7305b259f3a75e0a9cd88ac
00c2eb0b00000000                                                      Amount: 2.0
ffffffff
630b10c140209d00bd5862aba0e2ddfd9ca6b32835ba6d2d635854bb5b332283
00000000
01000000

Tx Input 5 is signed with (Legacy):

02000000
06
b5744c975b81b9f5f4ade9ac35e76b249955d8f3b7778a369476d56453c28d8b 02000000
00
ffffffff
cb4c0801ab2743c09f9b5e2d78f063c078d43446dddcfe5494cf68903ecd6201 01000000
00
ffffffff
b5744c975b81b9f5f4ade9ac35e76b249955d8f3b7778a369476d56453c28d8b 02000000
00
ffffffff
b5744c975b81b9f5f4ade9ac35e76b249955d8f3b7778a369476d56453c28d8b 02000000
00
ffffffff
dfe705c5e3d86c143aee3a4c0c3bd4c4bd315dfd5714e67713de12495b528c94 00000000    ; Input for signing
1976a914dbdd8c0bd9555429baf6b7305b259f3a75e0a9cd88ac
ffffffff
f96d60838f054954bc2880e549ab3b4313662bcc664b9925052b49487bc295ed 02000000
00
ffffffff
02
c0adeba000000000 17a9147dc5de6129049763b8e01cd8263422c544e4583587
c0ed7c1100000000 1976a91410a62cd6f212baa5d8be41da751172c52bf7395088ac
00000000
01000000

Tx Input 6 is signed with (Legacy):

02000000
06
b5744c975b81b9f5f4ade9ac35e76b249955d8f3b7778a369476d56453c28d8b 02000000
00
ffffffff
cb4c0801ab2743c09f9b5e2d78f063c078d43446dddcfe5494cf68903ecd6201 01000000
00
ffffffff
b5744c975b81b9f5f4ade9ac35e76b249955d8f3b7778a369476d56453c28d8b 02000000
00
ffffffff
b5744c975b81b9f5f4ade9ac35e76b249955d8f3b7778a369476d56453c28d8b 02000000
00
ffffffff
cb4c0801ab2743c09f9b5e2d78f063c078d43446dddcfe5494cf68903ecd6201 01000000
00
ffffffff
f96d60838f054954bc2880e549ab3b4313662bcc664b9925052b49487bc295ed 02000000
1976a91410a62cd6f212baa5d8be41da751172c52bf7395088ac
ffffffff
02
c0adeba000000000 17a9147dc5de6129049763b8e01cd8263422c544e4583587
c0ed7c1100000000 1976a91410a62cd6f212baa5d8be41da751172c52bf7395088ac
00000000
01000000

Cada uno de los datos anteriores es dSha256. Si la entrada es heredada, ScriptSig se establece en la firma y la clave pública. Si es un SegWit, la firma y la clave pública se escriben en los datos del testigo. Las entradas heredadas tienen una entrada 00 en los datos del testigo.

¿Alguien puede decirme si lo que estoy haciendo es correcto y por qué esta transacción no funciona? Sé que hay muchos datos para analizar, pero no se puede evitar.

Finalmente, aquí están las anteriores encadenadas:







b5744c975b81b9f5f4ade9ac35e76b249955d8f3b7778a369476d56453c28d8b02000000
cb4c0801ab2743c09f9b5e2d78f063c078d43446dddcfe5494cf68903ecd620101000000
d06a4be37479cefd5c971ced4fc8cbef03753695160acf8993a054446e9b25dd00000000
f96d60838f054954bc2880e549ab3b4313662bcc664b9925052b49487bc295ed00000000
dfe705c5e3d86c143aee3a4c0c3bd4c4bd315dfd5714e67713de12495b528c9400000000
f96d60838f054954bc2880e549ab3b4313662bcc664b9925052b49487bc295ed02000000

¡Nada en BIP-143 dice en qué orden se deben encadenar las salidas previas! ¿Está en el mismo orden que la transacción?

Necesito ayuda urgentemente con esto ya que estoy luchando mucho … gracias.

img-ads

Leave a Comment

Your email address will not be published.

You may also like

Bitcoin

Consumo de energía de Bitcoin ’66 veces mayor que en 2015 ‘: Citigroup

single-image



El debate sobre el consumo de energía de Bitcoin se está calentando más rápido que el planeta. Las empresas están siendo rechazadas por el público y los accionistas debido a las inversiones en Bitcoin.

Bitcoin consume 66 veces más electricidad que en 2015, según un informe de Citigroup Inc., y según Bloomberg, es probable que haya un escrutinio cada vez mayor de las emisiones de carbono asociadas con la minería.

Esa afirmación está respaldada por una nueva investigación de Mastercard, que acaba de lanzar su propia calculadora de carbono. Muestran que el 54 por ciento de las personas cree que proteger el medio ambiente es más importante hoy que antes del COVID-19.

Los analistas de Citigroup también declararon que:

“Cuando el valor de Bitcoin aumenta, también lo hace su consumo de energía”.

Sin embargo, el consumo de electricidad de la red aumenta mucho más lentamente que el…


View More Article
Bitcoin

Coinbase COIN debuta en un Bitcoin sangriento, pero la estructura alcista permanece

single-image


Ya sea que se haya movido capital de Bitcoin a COIN durante su debut en el mercado de valores, o una venta clásica del evento de noticias, la principal criptomoneda del día es roja.

Se esperaba que los alcistas se robaran el show hoy, pero en cambio hubo una disminución del 5% durante el día desde el nuevo máximo histórico de hoy. Sin embargo, una estructura alcista a corto plazo permanece intacta, lo que significa que la venta masiva podría ser una nueva prueba alcista lista para impulsar los precios a $ 87,000 por BTC.

COIN: Coinbase Global lleva cripto a Nasdaq

Coinbase Global (COIN) comenzó a cotizar en Nasdaq hoy, marcando el gran debut público de Crypto y la primera compañía de criptomonedas en cotizar en bolsa.

Lectura relacionada | Bitcoin NFT “The Death of Fiat” recuerda a Crypto Bull Run

La emoción que condujo a la cotización…

View More Article
Blockchain

BTC / USD no logró estallar; El precio se mantiene por debajo de $ 64,800

single-image


Predicción del precio de Bitcoin (BTC) – 14 de abril

Actualmente, BTC / USD está cayendo un total de 2.46% en las últimas horas, ya que cotiza en el nivel de $ 62,024.

Tendencia a largo plazo del BTC / USD: alcista (gráfico diario)

Niveles clave:

Niveles de resistencia: $ 68,000, $ 70,000, $ 72,000

Niveles de soporte: $ 58,000, $ 56,000, $ 54,000

BTCUSD – gráfico diario

El gráfico diario muestra que BTC / USD no pudo operar por encima del límite superior del canal ascendente, ya que no cerró por encima de la…

View More Article
Bitcoin

Por qué Cardano (ADA) podría ser el próximo corredor de Ethereum

single-image


La red y la comunidad de Cardano están preparando la implementación de Plutus, su plataforma de contratos inteligentes. El desarrollador IOG está sometiendo la plataforma a una prueba de esfuerzo antes de integrarla en la red principal en el Hard Fork Combinator “Alonzo”.

El popular analista Coin Bureau subió un video que muestra qué criptomonedas tiene en su cartera. Junto con Bitcoin, Ethereum, Polkadot y otros, Cardano representa el 8% de su inversión en criptomonedas.

Cardano ha alcanzado nuevos máximos desde julio de 2020 después de romper la marca de $ 0.08 en más de un año. Desde entonces, ha alcanzado un máximo histórico de 1,54 dólares en las últimas 24 horas y ha construido un fuerte impulso alcista. El analista afirmó:

Al igual que Polkadot, veo a Cardano principalmente como una cobertura en caso de que algo salga mal con Ethereum. Soy un gran admirador…

View More Article
Bitcoin

Billetera – BTC Treasure Hunt Volumen 2

single-image


Al igual que en Whoiszo, también ayudo a un amigo a encontrar un tesoro de bitcoins.

En un período entre 2010 y 2011, mi amiga tenía un Blackberry Curve 8330. En el momento en que se involucró en los juegos de azar en línea y debido a que muchos de los sitios de juego en los EE. UU. Se volvieron ilegales, pensó que estaba tratando de ganar algo de dinero en Bitcoin para conectar lo que parecía que sería más fácil de usar en los sitios de juegos de azar. Recuerda haber comprado bitcoins e incluso tenía una aplicación en su blackberry que podía usar para acceder al intercambio y realizar un seguimiento del valor. Decidió no gastarlo nunca y finalmente consiguió un nuevo teléfono y se olvidó del bitcoin,…

View More Article
Blockchain

Barbara Corcoran de Shark Tank quiere que los inversores elijan bienes raíces en lugar de Bitcoin

single-image


A pesar del floreciente mercado de criptomonedas, Barbara Corcoran quiere que los estadounidenses elijan bienes raíces en lugar de criptomonedas.

Bitcoin no solo alcanzó un precio récord de más de $ 51,000 el mes pasado, sino que alcanzó otro récord de más de $ 63,000 el martes.

Los comentarios de Corcoran se producen cuando la capitalización de mercado total de todos los activos criptográficos se disparó un 600% a más de $ 2 billones este año.

Bienes raíces a través de criptomonedas

La inversora de Shark Tank, que habló en Union Square de Nueva York, dejó en claro que a ella solo le importan los bienes raíces y no el precio de Bitcoin. No les importan en lo absoluto todas las actividades criptográficas.

Corcoran enfatizó la necesidad de que las personas compren bienes raíces ahora, ya que este año tiene un…

View More Article