Author

Topic: mrkl_tree (Read 1704 times)

sr. member
Activity: 375
Merit: 255
March 09, 2014, 07:09:20 PM
#7
Rapaz
Agradeço muito a ajuda mas o python não me ajudou em nada
Tentei entender mas boiei

Mas no fim das conta eu tive uma ideia de tentar um código que eu tinha conseguido antes
o código constrói o hash do bloco atual
dei umas adaptadas e funcionou

resumindo o código faz:
inverte o a e o b
concatena os 2
transforma em binário
tira o hash
transforma em binário
tira o hash
inverte

ainda tenho varias duvidas sobre o bitcoin...
só que e chato ter que ficar escrevendo
preferiria conversar

valeu
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
March 08, 2014, 10:40:20 PM
#6
ok vamos la

8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87 vira ���=�P>o=����Z�I�*���(J���m�

fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4 vira ��R[�1@-В"�u`�ux{Ҹ~V�Z{�0���

concateno os 2 string: ���=�P>o=����Z�I�*���(J���m���R[�1@-В"�u`�ux{Ҹ~V�Z{�0���

o hash disso é: 204ee246463fecd48b2071a6512204cf952a006f8fc08bb61d0cbd8f53b063e0

mas o esperado seria ccdafb73d8dcd0173d5d5c3c9a0770d0b3953db889dab99ef05b1907518cb815

Não sei como você fez, como eu disse, não entendo de PHP, mas fiz aqui em python rapidinho:

Code:
a = '8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87'
b = 'fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4'

#converte pra binario
a_bin = "".join([chr(int(a[i-2:i],16)) for i in xrange(len(a), 0, -2)])
b_bin = "".join([chr(int(b[i-2:i],16)) for i in xrange(len(b), 0, -2)])


result = sha256(sha256(a_bin+b_bin).digest()).hexdigest()

print result

o resultado deu "15b88c5107195bf09eb9da89b83d95b3d070079a3c5c5d3d17d0dcd873fbdacc", que é o que você esperava.

Ah sim, acabei de conferir. Sua entrada está invertida... você tem "Huh=?P>o=????Z?I?*Huh(J??m?" quando na verdade deveria ter "?mУ?J(Huh*?I?Z???=o>P?=???". O mesmo deve acontecer com a segunda entrada (não conferi).
sr. member
Activity: 375
Merit: 255
March 08, 2014, 01:57:49 PM
#5
ok vamos la

8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87 vira ���=�P>o=����Z�I�*���(J���m�

fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4 vira ��R[�1@-В"�u`�ux{Ҹ~V�Z{�0���

concateno os 2 string: ���=�P>o=����Z�I�*���(J���m���R[�1@-В"�u`�ux{Ҹ~V�Z{�0���

o hash disso é: 204ee246463fecd48b2071a6512204cf952a006f8fc08bb61d0cbd8f53b063e0

mas o esperado seria ccdafb73d8dcd0173d5d5c3c9a0770d0b3953db889dab99ef05b1907518cb815
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
March 08, 2014, 01:20:02 PM
#4
8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87 convertido seria 1000110010100111100001101101111110111110001101000010010111110110111111110110111 0111111001111111000101110010101101101010000010100100110110110101010110000011101 000111111111101101010001001010111011111010001111010000110110110000111???

não, seria algo que vc nem conseguiria postar aqui porque estaria cheio de caracteres especiais...
sr. member
Activity: 375
Merit: 255
March 08, 2014, 12:38:49 PM
#3
8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87 convertido seria 1000110010100111100001101101111110111110001101000010010111110110111111110110111 0111111001111111000101110010101101101010000010100100110110110101010110000011101 000111111111101101010001001010111011111010001111010000110110110000111???
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
March 08, 2014, 11:34:20 AM
#2
estou tentando entender o mrkl_tree
li varias paginas mas não ta dando certo aki

estou tentando repodruzir o bloco 100000 que tem so 4 transações
http://blockexplorer.com/rawblock/000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506

estou tendo como resposta e0172299a5f4721b039a8a759f84fc7457dfe14296a6b39b32140feb32bda194
enquanto o esperado e ccdafb73d8dcd0173d5d5c3c9a0770d0b3953db889dab99ef05b1907518cb815

eis meu código php

function inv($in){
   $split = str_split(strrev($in));
   $x = "";
   for($i = 0; $i < count($split); $i += 2){
      $x .= $split[$i + 1].$split[$i];
   }
   return $x;
}

function h($value){
   return hash("sha256", $value);
}

$a = inv("8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87");
$b = inv("fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4");

echo h(h($a.$b));


As strings estão em hexadecimal, vc precisa de strings binárias pra gerar a hash. Não conheço PHP mas você provavelmente precisa de algo como:

$x .= char(int($split[$i + 1].$split[$i], 16))

(i.e., converte o hex pra inteiro, depois converte pra "char".)
sr. member
Activity: 375
Merit: 255
March 08, 2014, 08:53:03 AM
#1
estou tentando entender o mrkl_tree
li varias paginas mas não ta dando certo aki

estou tentando repodruzir o bloco 100000 que tem so 4 transações
http://blockexplorer.com/rawblock/000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506

estou tendo como resposta e0172299a5f4721b039a8a759f84fc7457dfe14296a6b39b32140feb32bda194
enquanto o esperado e ccdafb73d8dcd0173d5d5c3c9a0770d0b3953db889dab99ef05b1907518cb815

eis meu código php

function inv($in){
   $split = str_split(strrev($in));
   $x = "";
   for($i = 0; $i < count($split); $i += 2){
      $x .= $split[$i + 1].$split[$i];
   }
   return $x;
}

function h($value){
   return hash("sha256", $value);
}

$a = inv("8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87");
$b = inv("fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4");

echo h(h($a.$b));
Jump to: