Strona 1 z 1

obliczenia

: wtorek, 31 maja 2011, 15:51
autor: wasylek
Witam wszystkich maniaków o otwartych umysłach.
Niedawno zaraziłem się 'bitcoinem'... Czytałem sporo i widzę, że ma to naprawdę sens. Zastanawiam mnie jednak jedna rzecz. Mianowicie - co nasze komputery obliczają? Zauważyłem, że obliczenia absorbują ogromne zasoby mojego komputera, a przecież ludzi połączonych są tysiące, czy setki tysięcy.

Co my właściwie obliczamy i dla kogo?

Gdy dowiedziałem się o tych obliczeniach, od razu na myśl przeszedł mi projekt SETI wykorzystujący moc obliczeniową pojedynczych komputerów połączonych w sieci, do obliczeń ogromnych ilości danych. W tamtym przypadku w imię nauki i za darmo. Tutaj dostajemy za to kasę - pytanie - co i dla kogo obliczamy?

Pozdrowienia!
wasylek

Re: obliczenia

: wtorek, 31 maja 2011, 16:11
autor: zerth
Obliczamy hashe dla nikogo. Dla siebie. Obliczenia nie mają jakiegoś wielkiego sensu. Jedynym ich sensem jest to, że są długotrwale. Żadnego pożytku z tych obliczeń nie ma :-)

Re: obliczenia

: wtorek, 31 maja 2011, 16:18
autor: Shudde M'ell
A czy nie jest to tak, że obliczenia są wykorzystywane celem zabezpieczenia całej tej sieci?

Re: obliczenia

: wtorek, 31 maja 2011, 17:08
autor: Muniek
Shudde M'ell pisze:A czy nie jest to tak, że obliczenia są wykorzystywane celem zabezpieczenia całej tej sieci?
Oczywiście że tak właśnie jest. To dzięki "obliczaniu" hashów działa cała sieć.

Re: obliczenia

: środa, 1 czerwca 2011, 08:36
autor: wasylek
Ok, wszystko fajnie, ale skąd mamy pewność, że obliczenia te nie mają sensu?
Czy masz sto procent pewności, że niczemu to nie służy?
Program ma otwarty kod, można to zweryfikować na 100%?? Nie znam się na programowaniu itd. Samemu ni jestem w stanie tego sprawdzić i nie wiem czy de'facto można to sprawdzić; czy w kodzie jest jakaś linia, która pokazuje, że bezspornie obliczenia są bez sensu.

Na strukturę bitcoin trafiłem przypadkiem. Śledzę dość skrupulatnie finansowe wydarzenia na świecie. Dość solidnie 'wdepnąłem' w rozmaite teorie spiskowe i pseudo spiskowe. Śledząc historię dolara, FED-u, manipulacji i spekulacji giełdowych, natrafiłem w końcu na bitcoin. Mając w głowie te wszystkie finansowe przekręty, aż mi trudno uwierzyć, że bitcoin nie ma drugiego dna.

W chwili obecnej postrzegam ten system jako sprytnie wymyślone narzędzie do wykorzystania ogromnej mocy obliczeniowej. Przecież taka ilość pracujących, niejednokrotnie podkręconych procesorów, nie może się zwyczajnie marnować.

Czy aby autor pod pozorem zarabiania pieniędzy nie wykorzystuje tego?

Kolejny raz wspomnę o SETI - swego czasu (gdy Internet w Polsce raczkował) można było ściągnąć wygaszacz ekranu programu SETI. Gdy wygaszacz się włączał, komputer zaczynał obliczenia dla SETI. Oczywiście wyglądało to kompletnie bez sensu, a de'facto, procesor odszyfrowywał jakieś tam sygnały z radio-teleskopów. Dla nas bez znaczenia, dla SETI bardzo pomocne, ważne.

piszesz:
zerth pisze: [...] Jedynym ich sensem jest to, że są długotrwale. Żadnego pożytku z tych obliczeń nie ma :-)
Są długotrwałe - dlatego dają mi do myślenia. My nie mamy z nich pożytku, jedynie korzystamy ze skutku ubocznego. Pytanie, czy komuś to nie służy na innej płaszczyźnie.

Pozdrawiam!
wasylek

Re: obliczenia

: środa, 1 czerwca 2011, 08:52
autor: orka
Kod jest prosty i liczy funkcje skrótu sha 256 z bieżących transakcji w sieci bitcoin.
http://pl.wikipedia.org/wiki/SHA-1

Do tego celu najwydajniejsze są procesory strumieniowe których jest bardzo dużo w kartach z serii 5xxx (od 800 do 1600 sztuk na procesor graficzny), mam nadzieje że dostatecznie wytłumaczyłem :mrgreen:

Re: obliczenia

: środa, 1 czerwca 2011, 09:01
autor: M4v3R
Bitcoin jest w całości otwarty. Otwarty jest zarówno kod klienta, jak i algorytmy, które są wykorzystywane do jego działania. Ja jestem programistą i zapewniam Cię - obliczenia te nie są wykorzystywane w żaden inny sposób. To, co klient (miner) Bitcoin robi, to bierze tzw. blok transakcji, które miały miejsce od ostatniego "bloku", następnie szuka takiego zestawu liczb, aby suma kontrolna SHA-256 tego bloku odpowiadała danemu kryterium (tzw. target - cel). Ponieważ wyniku SHA-256 nie da się przewidzieć dla danego zestawu danych wejściowych, to trzeba próbować setki miliardów (w rzeczywistości dużo więcej) razy zanim trafi się na ten właściwy. Z kolei inni użytkownicy sieci mogą łatwo sprawdzić, czy podany zestaw danych pasuje do celu. Wszystko po to, żeby najpierw "wytworzyć" monety, które będą akceptowane przez sieć, a następnie by potwierdzać transakcje tymi monetami. Bez tej pracy każdy mógłby ogłosić w sieci że właśnie "nabył" np. 1000 BTC, a w takich warunkach waluta nie mogłaby istnieć.

W rzeczywistości, tak jak orka powiedział (tylko błędnie podlinkował do Wikipedii do starszego algorytmu SHA-1), sam kod do wykonywania obliczeń jest banalny:

Kod: Zaznacz cały

unsigned int ScanHash_CryptoPP(char* pmidstate, char* pdata, char* phash1, char* phash, unsigned int& nHashesDone)
{
    unsigned int& nNonce = *(unsigned int*)(pdata + 12);
    for (;;)
    {
        // Crypto++ SHA-256
        // Hash pdata using pmidstate as the starting state into
        // preformatted buffer phash1, then hash phash1 into phash
        nNonce++;
        SHA256Transform(phash1, pdata, pmidstate);
        SHA256Transform(phash, phash1, pSHA256InitState);

        // Return the nonce if the hash has at least some zero bits,
        // caller will check if it has enough to reach the target
        if (((unsigned short*)phash)[14] == 0)
            return nNonce;

        // If nothing found after trying for a while, return -1
        if ((nNonce & 0xffff) == 0)
        {
            nHashesDone = 0xffff+1;
            return -1;
        }
    }
}
Funkcja SHA256Transform() to właśnie funkcja wykonująca skrót wiadomości przy pomocy algorytmu SHA-256. To tyle.