Jak fungují transakce

Trošku se vrtám v podstatě, a uniká mi jeden detail, konkrétně, jak jsou v transakcích zadány adresy příjemců.

Když se podívám sem, je v transakci dobře vidět odesílaná částka. Ale už tam nevidím adresu, předpokládám, že by mohla být v té části pk_script, ale to je v podstatě public key. Jak se dostanu na public key z vlastní adresy, kterou zadávám do peněženky? Vždyť k BTC adrese z public key vede cesta přes dvoji SHA a RIPEMD a Base58 …

???

Nejsem sice expert na uplne hardcorovy vnitrnosti bitcoin protokolu ale kdysi jsem se o to zajimal, kvuli moznostem cold storage distribuovane na vice uzlech…

Takze ano, je to tam v casti public key script … Dobre to bylo videt v praci Gavina Andreesena na multi-signature transakcich… Bohuzel ted nemuzu najit ten pythonackej skript, kterym to vytvarel…

Bylo to tam hezky videt…

Tady je princip, ale ten python vysvetloval nejvic…

Zkus pogooglit, bylo tam krok po kroku jak vytvorit adresu, podepsat transakci na vice nodech a vysledek v siti…

Tady neco je:

Dik.
Jenze to porad neodpovida na muj problem :frowning:
V tom tx nikde neni videt adresa prijemce. A tu prece zadavam v Base58 formatu, kde pak vezmu pubkey do pk_script?

Zkousel jsem do bitcoind dat validateaddres podle prikladu, ale pokud to neni moje adresa, tak samozrejme mi to pub key nevrati … zkus treba validateaddress 1BPqtqBKoUjEq8STWmJxhPqtsf3BKp5UyE

Jinymi slovy, kdyz odesilam BTC na nejakou cizi adresu, kde a jak se mi projevi v te transakci, tzn. kdyz si dumpnu memory s tou transakci, jak a kde najdu adresu prijemce? Castku najit umim … adresu ne …

Moc rad bych ti pomohl, ale momentalne nemam ani beziciho bitcoin demona…:frowning: Snad nekdo jiny poradi…

Tahle cast nefunguje?

Treba tady pise nekdo ze mu to vraci adresy: http://bitcoin.stackexchange.com/questions/28377/escrow-outputs-show-incorrect-destination-addresses-in-blockchain-info

Bez vyzkouseni jen nahazuju napady…

Jenze to je uz cislo transakce, ktery znas … me jde o to, jak se to tvori, nez se to posle do site …

Priznam se ze ti stale moc nerozumim… createrawtransaction, signrawtransaction, sendrawtransaction je cely proces… to urcite vis… Zkus to vic rozepsat :slight_smile:

Ha, mozna jsem to nasel … polopaticky je to vysvetlovany tady: https://bitcoin.org/en/developer-guide#transactions

Podstatna je tato cast: [quote]
Bob provides the pubkey hash to Alice. Pubkey hashes are almost always sent encoded as Bitcoin addresses, which are base58-encoded strings containing an address version number, the hash, and an error-detection checksum to catch typos.
[/quote]

Takze by mi melo stacit udelat base58 decode z adresy, odstranit checksum a verzi a mel bych mit pubkey aka pk_script … zkusim uvidim

mas dump pameti, zmet hexadecimalnich cisel …

000000	F9 BE B4 D9 74 78 00 00  00 00 00 00 00 00 00 00   ....tx..........
000010	02 01 00 00 E2 93 CD BE  01 00 00 00 01 6D BD DB   .............m..
000020	08 5B 1D 8A F7 51 84 F0  BC 01 FA D5 8D 12 66 E9   .[...Q........f.
000030	B6 3B 50 88 19 90 E4 B4  0D 6A EE 36 29 00 00 00   .;P......j.6)...
000040	00 8B 48 30 45 02 21 00  F3 58 1E 19 72 AE 8A C7   ..H0E.!..X..r...
000050	C7 36 7A 7A 25 3B C1 13  52 23 AD B9 A4 68 BB 3A   .6zz%;..R#...h.:
000060	59 23 3F 45 BC 57 83 80  02 20 59 AF 01 CA 17 D0   Y#?E.W... Y.....
000070	0E 41 83 7A 1D 58 E9 7A  A3 1B AE 58 4E DE C2 8D   .A.z.X.z...XN...
000080	35 BD 96 92 36 90 91 3B  AE 9A 01 41 04 9C 02 BF   5...6..;...A....
000090	C9 7E F2 36 CE 6D 8F E5  D9 40 13 C7 21 E9 15 98   .~.6.m...@..!...
0000A0	2A CD 2B 12 B6 5D 9B 7D  59 E2 0A 84 20 05 F8 FC   *.+..].}Y... ...
0000B0	4E 02 53 2E 87 3D 37 B9  6F 09 D6 D4 51 1A DA 8F   N.S..=7.o...Q...
0000C0	14 04 2F 46 61 4A 4C 70  C0 F1 4B EF F5 FF FF FF   ../FaJLp..K.....
0000D0	FF 02 40 4B 4C 00 00 00  00 00 19 76 A9 14 1A A0   ..@KL......v....
0000E0	CD 1C BE A6 E7 45 8A 7A  BA D5 12 A9 D9 EA 1A FB   .....E.z........
0000F0	22 5E 88 AC 80 FA E9 C7  00 00 00 00 19 76 A9 14   "^...........v..
000100	0E AB 5B EA 43 6A 04 84  CF AB 12 48 5E FD A0 B7   ..[.Cj.....H^...
000110	8B 4E CC 52 88 AC 00 00  00 00                     .N.R......


Message header:
 F9 BE B4 D9                                       - main network magic bytes
 74 78 00 00 00 00 00 00 00 00 00 00               - "tx" command
 02 01 00 00                                       - payload is 258 bytes long
 E2 93 CD BE                                       - checksum of payload

Transaction:
 01 00 00 00                                       - version

Inputs:
 01                                                - number of transaction inputs

Input 1:
 6D BD DB 08 5B 1D 8A F7  51 84 F0 BC 01 FA D5 8D  - previous output (outpoint)
 12 66 E9 B6 3B 50 88 19  90 E4 B4 0D 6A EE 36 29
 00 00 00 00

 8B                                                - script is 139 bytes long

 48 30 45 02 21 00 F3 58  1E 19 72 AE 8A C7 C7 36  - signature script (scriptSig)
 7A 7A 25 3B C1 13 52 23  AD B9 A4 68 BB 3A 59 23
 3F 45 BC 57 83 80 02 20  59 AF 01 CA 17 D0 0E 41
 83 7A 1D 58 E9 7A A3 1B  AE 58 4E DE C2 8D 35 BD
 96 92 36 90 91 3B AE 9A  01 41 04 9C 02 BF C9 7E
 F2 36 CE 6D 8F E5 D9 40  13 C7 21 E9 15 98 2A CD
 2B 12 B6 5D 9B 7D 59 E2  0A 84 20 05 F8 FC 4E 02
 53 2E 87 3D 37 B9 6F 09  D6 D4 51 1A DA 8F 14 04
 2F 46 61 4A 4C 70 C0 F1  4B EF F5

 FF FF FF FF                                       - sequence

Outputs:
 02                                                - 2 Output Transactions

Output 1:
 40 4B 4C 00 00 00 00 00                           - 0.05 BTC (5000000)
 19                                                - pk_script is 25 bytes long

 76 A9 14 1A A0 CD 1C BE  A6 E7 45 8A 7A BA D5 12  - pk_script
 A9 D9 EA 1A FB 22 5E 88  AC

Output 2:
 80 FA E9 C7 00 00 00 00                           - 33.54 BTC (3354000000)
 19                                                - pk_script is 25 bytes long

 76 A9 14 0E AB 5B EA 43  6A 04 84 CF AB 12 48 5E  - pk_script
 FD A0 B7 8B 4E CC 52 88  AC

Locktime:
 00 00 00 00                                       - lock time

A chces v tom najit adresu prijemce, o to mi celou dobu jde :slight_smile: Je v tom pk_script, jen jsem nevedel, jak ji z toho vypreparovat … snad uz to pujde

Tohle taky vypada na dobrej zdroj
http://bitcoinhistory.net/Technical_Papers/ProgrammingBitcoinTransactionScripts.pdf

Btc adresa je prece PubKey, jiz kryta kontrolnima souctama apod (rimped160+sha256 a double sha256[4znaky]) a prevedeny cislo na base58.

To je z PubKey nejaky cislo X (PukKey) udelana adresa ADR = rimped160(sha256(X=PubKey))+2xsha256(x)[4]

No a do transakce jde ten vysledek toho algitmu Y(ADDR) prevedenej z base58 na HEX.

ty woe to pisu :slight_smile:
tak jeste jednou a pomaleji

  1. mam PubKey
  2. 2a) Adresa = algo s rimped160(sha256(PubKey))
    2b) Adresa +=DoubleSha256(Adresa z 2a)[4 znaky prvni]
  3. To na Base58(2b) = Addr

No a do transakce jde jako konecnej prijemce Addr z Base58 na Hex (pokud je zobrazen jako hex)

:slight_smile:

Dejte si to na testy do brainwalletu, tam umi i konverze formatu a delat raw transakce… dobra vec na zkoumani

Super … mam vyslednou adresu, na tu chci poslat BTC … fajn, jenze v tom pk_scriptu nemas tu vlastni adresu, ale “pubkey” … ze ktereho ta adresa je spocitana.
Kdyz ti dam svoji adresu, nedavam ti prece PubKey, spocitany z PrivKey, ale uz cosi prohnaneho Sha256 a RIPEMD160 a Base85 … a Sha256 a RIPEMD160 jsou jednosmerne hashovaci funkce …
A me zajima, jak to vlastne ten bitcoind udela, ze z Adresa = algo s rimped160(sha256(PubKey)) zas udela ten Pubkey …

Pravdepodobne se tam zapisuje to co mas jako 2a), to se da z adresy reverznout, base58 je obousmerny … musim to testnout.

Chces rict, ze staci udelat base58.decode(address) ?

Nevim jestli si uplne rozumime v otazce, ale…
prubni ten brainwallet je v javascriptu a da se pekne krokovat (napr ten vypocet rawtransakce).

Ve walletu mas defakto jen svoje PrivateKey z nich odvodis PubKey (z toho wallet zjisti stav tvojeho uctu).

Pokud chces odeslat nejaky btc, potrebujes pomoci PrivateKey podepsat transakci. Pomoci PubKey to muze kdokoliv overit, ale svuj PrivKey nikomu nerikas nikdy ani v ty transakci.

Takze ta transakce potrebuje tvuj podpis (z tvojeho PrivateKey) a ze je ten podpis platnej se overuje via PubKey.

Ale to asi vis, jen si nerozuimime ted :slight_smile:

Ne nerozumime.
Celou dobu mi jde o to, jak je v transakci zakodovana adresa prijemce, kdyz dumpnu transakci v pameti bitcoind, tak tam proste adresa typu 1ahojcosiajesteneco neni videt . … neresim podepisovani a ani nic jineho dalsiho.

jj dej si
https://brainwallet.github.io/#converter

a dam dej
nahore base58 (nejakou btc adresu)
a
dolu na HEX

nebo naopak

base 58 je jen ciselna soustava o zakladu 58, hex je ciselna soustava o zakladu 16

ten prevod je jen konverze mezi ciselnejma soustavama

Vypada to, ze mas pravdu. Vzal jsem hex sekvenci z toho prikladu nahore, doplnil pred to 00 a vede to na adresu 1NWxbcpdEK76u1MMCdjGpTH85fTK.
No testnu toho vic a uvidim…