Donate BitcoinPOW.pl : 1LMofGNsTm4tMAzkPZH4qzK2qrLxu2pw2p
Co to jest Bitcoin PoW?
BitcoinPoW to Bitcoin wykorzystujący dowód pracy (PoW) i dowód transakcji (PoT) do weryfikacji bloków.
Połączenie PoW i PoT skutkuje rozproszonym systemem o wysokim stopniu wydobycia, w którym każdy portfel jest zmuszony do wydobywania solo.
Oryginalny Bitcoin Satoshiego stał się bardzo scentralizowany w zakresie wydobycia. Jeden z najdłużej aktywnych deweloperów BTC (Luke Dashjr) opublikował niedawno swoje zmartwienia na swojej nowej stronie poświęconej basenowi wydobywczemu www.ocean.xyz
Wiadomość od Luke’a: „Bitcoin nie jest już odporny na cenzurę, a centralizacja wydobycia również zagraża jego bezpieczeństwu. Czas to naprawić”.
Rzeczywistość jest taka, że jego kopalnia nie rozwiąże problemu. Rozwiązaniem problemu jest przywrócenie wydobycia do portfeli, a nie do scentralizowanych farm ASIC. Dałoby to jeden do jednego głosu, jeden węzeł, jeden głos.
Połączenie PoW i PoT to innowacyjne podejście, jakiego nigdy wcześniej nie stosowano.
Oto równanie PoS, które określa, czy blok spełnia próg akceptacji:
hash(nStakeModifier + blockFrom.nTime + txPrev.vout.hash + txPrev.vout.n + nTime) < bnTarget * nWeight
To równanie występuje w kilku monetach PoS. Zamiarem tego równania było wyeliminowanie wszelkich sposobów, w jakie system PoW może szybko modyfikować dowolne zmienne.
1 – nStakeModifier: To jest zsumowany skrót transakcji block[n-1] i block[n-2]. To są transakcje, które w przeszłości wygrywały PoS.
To jest zdefiniowane i nie można nim manipulować.
2 – blockFrom.nTime: Czas od bloku[n-1]. To jest zdefiniowane i nie można nim manipulować.
3 – nTime: Czas bieżącego bloku. Można to zaktualizować, aby pomóc rozwiązać równanie, jednak zakres nie jest zbyt duży, ponieważ są to bloki
średnio w odstępie 10 minut.
4 – txPrev.vout.hash: To jest poprzedni skrót bieżącego kandydata na transakcję.
5 – txPrev.vout.n: Jest to numer vout poprzedniego skrótu bieżącego kandydata na transakcję.
Tym, co odchyla powyższe równanie, jest termin „nWeight”. Im większa wartość postawionej monety, tym łatwiej jest rozwiązać równanie.
BitcoinPoW wykorzystujący metodę PoW/PoT eliminuje ten stronniczy termin „nWeight”. Dzięki temu wszystkie postawione transakcje mają równe szanse na rozwiązanie powyższego równania. W ten sposób termin PoS tak naprawdę zmienia się w PoT. Kiedy wszystkie postawione kwoty są ignorowane, tak naprawdę wszystkie są traktowane tak samo, a zatem PoT.
Patrząc na punkt 4 powyżej, txPrev.vout.hash, system PoS nie zyskuje na rozwiązaniu równania niezależnie od liczby transakcji, ponieważ jeśli jest tylko jedna transakcja, jest ona w dużym stopniu ważona kwotą w tej transakcji. Jeśli jest wiele transakcji, istnieje większe zróżnicowanie wartości skrótów pomagających rozwiązać równanie, ale każda transakcja jest zmniejszana, ponieważ waga jest mniejsza.
Eliminując termin „nWeight”, metoda PoW/PoT wymusza zamianę powyższego równania na PoW. Górnik może zwiększyć liczbę transakcji, aby wygenerować duży zestaw skrótów, na podstawie których może iterować, aby przyspieszyć znalezienie rozwiązania. Im większy zestaw i im szybciej komputer może iterować, tym większa jest moc mieszania. W ten sposób BitcoinPoW działa przy użyciu PoW. Każda transakcja znajdująca się w zestawie była kiedyś w przeszłości ważną stawką, tak też wykorzystuje PoT.
Korzyści z połączenia PoW/PoT
Łączenie PoW/PoT nigdy wcześniej nie było wykonywane i oferuje kilka interesujących wyników.
Oto dwa główne wymagania BitcoinPoW:
1 – Wymaga PoW – Użytkownicy muszą spalić energię (CPU lub ASIC), aby rozwiązać równanie PoW.
2 – Wymaga PoT – Użytkownicy muszą postawić co najmniej 1 satoshi, aby transakcja była ważna w równaniu PoW. Ilość monet nie ma znaczenia, jest rozsądna
aby wydać jak najmniej podczas tworzenia transakcji.
Oto korzyści:
1 – Zapobiega tworzeniu się kałuż. Naturalnie zdarza się bardzo zdecentralizowane wydobycie.
2 – Wszyscy użytkownicy będą naturalnie kopać solo.
3 – Większe ilości monet można wysłać do chłodni, ponieważ mają znikomy udział w wydobyciu bloku.
Naturalnie zapobiega tworzeniu się kałuż
Idealnym rozwiązaniem jest posiadanie systemu z jednym węzłem i jednym głosem. BitcoinPoW znalazł rozwiązanie umożliwiające przekształcenie Bitcoina w w pełni zdecentralizowany system wydobywczy. Przyjrzyjmy się jak.
Pule są zawsze tworzone, aby ułatwić użytkownikom zdobycie przynajmniej części nagrody za blok. Wydobywanie solo jest w przypadku Bitcoina tak niezwykle trudne, że większość nie podejmuje takich prób, ponieważ nigdy w życiu nie znajdzie bloku, więc zamiast tego dołączają do puli. Metoda PoW w Bitcoinie pozwala na to. Tworzone są szablony, a wszyscy górnicy otrzymują je i okresowo przesyłają prace z powrotem do puli, aby udowodnić, że próbują rozwiązać trudne równanie. Kiedy węzeł puli otrzyma z powrotem blok spełniający trudność, przesyła go do sieci Bitcoin.
Spróbujmy utworzyć pulę dla BitcoinPoW (używa PoW/PoT)
Spróbujmy sprowadzić równanie PoW do tego, co naprawdę ma znaczenie:
hash(poprzednia_stake_hash + inne) <bnTarget
Na podstawowym poziomie górnik musi iterować przez wszystkie poprzednie skróty stawek, aby spróbować rozwiązać równanie.
Jeśli moneta stanowiłaby dowód stawki, użytkownik mógłby po prostu wysłać swoją monetę do puli, a pula zwróci mu pewien procent kwoty, którą dał. BitcoinPoW nie jest monetą PoS. Posiadanie większej ilości monet nie pozwala górnikowi szybciej znaleźć rozwiązania. Trzymanie 1 miliona BitcoinPoW (BTCW) nie spowoduje znalezienia bloku szybciej niż trzymanie 0,00000001 BTCW, zatem pula PoS nie będzie działać.
Jeśli moneta była dowodem pracy, użytkownik mógłby wysłać do puli wszystkie swoje poprzednie postawione transakcje, a pula mogłaby je pobrać i wysłać do górników z większą mocą, aby szybciej je zaszyfrować. Jednak problem pojawia się, gdy nadchodzi czas zastosowania BlockSignature do bloku BitcoinPoW. Pula musiałaby wysłać blok do użytkownika, który przesłał zwycięską transakcję, ponieważ tylko on może podpisać ją kluczem nagrody za blok. Jeśli Pula wyśle blok do użytkownika do podpisu, każdy, kto prześle w tym momencie, prześle blok, w którym płatność trafi bezpośrednio do użytkownika. Czy użytkownik chciałby być uczciwy i oddać monetę puli po otrzymaniu nagrody???
Pule nie mogą logicznie tworzyć się przy użyciu PoW/PoT, dlatego BitcoinPoW będzie naturalnie umożliwiał wszystkim operatorom węzłów samodzielne wydobywanie. Stworzy to ogromną zdecentralizowaną sieć wydobywczą.
Górnicy z puli bitcoinów nigdy nie muszą podpisywać informacji, dlatego BTC może tworzyć duże scentralizowane pule wydobywcze. Całe podpisywanie odbywa się przy użyciu portfela operatora puli. BitcoinPoW jest rozwiązaniem problemu.
Czy posiadanie większej ilości monet przynosi korzyści?
Oczywiście w przypadku monety PoS, im więcej posiadasz monety, tym więcej nagród otrzymasz za bloki. W przypadku BitcoinPoW PoW/PoT opiera się na dużej liczbie transakcji i szybkości, z jaką procesor lub układ ASIC może je przetworzyć. Aby wydobyć więcej bloków, wymagana jest większa liczba transakcji, jednak w pewnym momencie będzie ich zbyt wiele i nie będzie wystarczającej mocy PoW. Gdy przekroczysz moc swojej maszyny wydobywczej, posiadanie większej liczby transakcji nie pomoże. Istnieje zmienna czasu, która zwiększa się co sekundę i powoduje ciągłe zmiany w skrótach transakcji. Posiadanie prawdziwego sprzętu wydobywczego, takiego jak procesor, jest niezbędne do wydobywania większej liczby bloków. Tak naprawdę, kiedy górnik osiągnie maksimum, nadszedł czas, aby uruchomić portfele równoległe, aby rozprowadzić moc pomiędzy rdzeniami i wątkami procesora.
Minimalny koszt transakcji to 1 satoshi. Nawet jeśli zdecydujemy się zapłacić 0,00001 za transakcję i mamy 1 BTCW, ile transakcji możemy utworzyć? 1/0,00001 = 100 000 transakcji. W chwili pisania tego tekstu obserwuję około 30% obciążenia pojedynczego rdzenia przy około 10 000 transakcji na portfel. Oznacza to, że mogę wygodnie wydobywać z około 10 portfeli na moim komputerze, używając 1 BTCW. Przy opłatach w wysokości 0,00001 1 BTCW daje wartość PoW około 1 komputera. Posiadanie większej ilości BTCW ma tę zaletę, że kupujesz sprzęt wymagany do wydobywania transakcji.
Należy pamiętać, że w pewnym momencie w przyszłości koszty transakcyjne wzrosną. Wyobraź sobie, że użytkownicy próbują przydzielić miejsce w blokach na transakcje w tym samym czasie, gdy użytkownicy próbują wysłać BTCW innym. Stworzy to konkurencję w korzystaniu z powierzchni bloku. Koszt wydobycia większej liczby bloków wzrośnie. Jest to podobne do tego, że koszt wydobycia większej ilości BTC zawsze kosztuje również więcej.
Mimo że liczba transakcji jest ograniczona do:
21 milionów / 0,00000001 = 2,1 8 10^15 skrótów transakcji
Całkowita moc obliczeniowa nie jest ograniczona, ponieważ prędkość procesora, a ostatecznie układu ASIC, będzie stale rosła. Gdy prędkość sprzętu pokona wszystkie możliwe skróty, które można utworzyć, BitcoinPoW osiągnie szczytową moc mieszania. Nie stanowi to jednak problemu, ponieważ nikt i tak nie może wydobywać szybciej, aby zaatakować po osiągnięciu maksymalnego limitu. Do czasu osiągnięcia maksymalnego limitu sieć BitcoinPoW będzie ogromna w węzłach i ogromna w decentralizacji wydobycia.
Jak kopać
Cele wydobycia są proste. Utwórz dowolną liczbę transakcji dla swoich potrzeb wydobywczych. Możesz także utworzyć więcej transakcji jako rezerwę na przyszłość (WSKAZÓWKA). Zgodnie z prostą zasadą z góry ustaliliśmy, że 1 BTCW daje około 1 komputera wartości PoW. Spójrz poniżej, jak zdobyć darmowe BTCW, aby rozpocząć wydobycie.
Poniżej znajduje się skrypt Pythona, który może pomóc w wygenerowaniu transakcji. Generalnie lubię realizować około 10 000 transakcji na jeden adres BTC.
main.py
z bitcoinrpc.authproxy importuj AuthServiceProxy, JSONRPCException
z pprint importuj pprint
czas importu
import dot
if name == ’main’:
# rpc_user i rpc_password są ustawione w pliku bitcoin-pow.conf
rpc_user = "PUT_YOUR_USER_HERE"
rpc_pass = "PUT_Twoja_przepustka_TUTAJ"
rpc_host = "127.0.0.1"
poprzedniWysokość = 0
liczba_bloków = 0
podczas gdy 1:
rpc_connection = AuthServiceProxy(f"http://{rpc_user}:{rpc_pass}@{rpc_host}:9332", timeout=240)
polecenia = [["getblockcount"]]
wysokość = rpc_connection.batch_(polecenia)
jeśli prevHeight != wysokość[0]:
poprzedniWysokość = wysokość[0]
drukuj(wysokość[0])
liczba_bloków = liczba_bloków + 1
jeśli liczba_bloków > 25:
przerwa
podczas gdy 1:
txid = rpc_connection.sendtoaddress('WPISZ TUTAJ SWÓJ STARAJSZY ADRES BTC ZACZYNAJĄC SIĘ OD 1', 0.00001)
drukuj (txid)
próbować:
# W pewnym momencie wyślemy, a przesyłka nie osiągnie puli pamięci i będziemy musieli porzucić przesyłkę, aby odzyskać równowagę.
# Rób to dalej, żeby było prosto. Odchodzi tylko wtedy, gdy zajdzie taka potrzeba.
polecenia = [["porzuć transakcję", txid]]
resp = rpc_connection.batch_(polecenia)
z wyjątkiem wyjątku jako błąd:
# to dobrze, wysyłaj dalej SMS-y
Kontynuować
print("porzucenie transakcji powiodło się")
break # porzucenie transakcji nastąpiła, koniec, do następnego bloku
czas.snu(60)
setup.py
!/usr/bin/env Pythona
z konfiguracji importu distutils.core
organizować coś(
nazwa=’python-bitcoinrpc’,
wersja=’1.0′,
opis=’Ulepszona wersja python-jsonrpc do użytku z Bitcoinem’,
long_description=open(’README.rst’).read(),
autor=’Jeff Garzik’,
autor_email=’jgarzik@pobox.com’,
konserwator=’Jeff Garzik’,
keeper_email=’jgarzik@pobox.com’,
url=’http://www.github.com/jgarzik/python-bitcoinrpc’,
pakiety=[’bitcoinrpc’],
klasyfikatory=[
„Licencja :: Zatwierdzona przez OSI :: Biblioteka GNU lub mniejsza ogólna licencja publiczna (LGPL)”, „System operacyjny:: Niezależny od systemu operacyjnego”
]
)
start_btcw.sh skrypt pomagający uruchomić 2 portfele
./bitcoin-pow-qt &
./bitcoin-pow-qt –listen=0 –datadir=/home/software/.btcw1 &
bitcoin-pow.conf
rpcuser=PUT_YOUR_USER_HERE
rpcpassword=PUT_YOUR_PASS_HERE
rpcallowip=127.0.0.1
rpport=9332
serwer=1
słuchaj=1
typ adresu=starsza wersja
portfelrbf=1
Kroki
0 – Skopiuj pliki main.py i setup.py z góry i uruchom: python setup.py install
1 – Pobierz portfel QT ze strony www.bitcoin-pow.org Linux lub Windows
2 – Utwórz katalog /home/software/.btcw1 lub inny, w którym chcesz przechowywać katalog danych dla portfela SINK
3 – Uruchom skrypt start_btcw.sh
4 – Utwórz portfel SOURCE dla powyższego skryptu Pythona, aby połączyć się z RPC i wydawać polecenia w celu utworzenia transakcji.
Spowoduje to użycie domyślnego katalogu .bitcoin-pow
5 – Utwórz nowy portfel SINK (nie kopiuj portfela SOURCE). Spowoduje to użycie innej lokalizacji danych, takiej jak
/home/oprogramowanie/.btcw1
6 – Korzystając z portfela SOURCE, przejdź do ustawień->Opcje->”Otwórz plik konfiguracyjny” Umieść tam zawartość pliku bitcoin.conf i zapisz.
7 – Zamknij oba portfele.
8 – Uruchom ponownie skrypt start_btcw.sh
9 – Zmodyfikuj plik main.py, podając swoją nazwę użytkownika/hasło i dotychczasowy adres BTC, na który chcesz wysyłać transakcje. Adres musi zaczynać się od „1”.
10 – Uruchom skrypt Pythona, aby wygenerować transakcje: python main.py
Kiedy Twój portfel zacznie być ładowany w około 40%, możesz utworzyć nowy portfel z nowym plikiem portfel.dat, wygenerować nowy adres BTC w skrypcie Pythona i ponownie utworzyć transakcje.
Alternatywna metoda tworzenia wielu transakcji
Tworzenie transakcji można wykonać za pomocą konsoli BitcoinPoW. Korzystając z portfela SOURCE, przejdź do
Okno->Konsola
Na dole GUI możesz wkleić jednocześnie 100 poleceń transakcji:
wyślij na adres „1F5p7KsHzeU2LjAboH5NCg5FTHvQHfxbTt” 0.00001
wyślij na adres „1F5p7KsHzeU2LjAboH5NCg5FTHvQHfxbTt” 0.00001
wyślij na adres „1F5p7KsHzeU2LjAboH5NCg5FTHvQHfxbTt” 0.00001
wyślij na adres „1F5p7KsHzeU2LjAboH5NCg5FTHvQHfxbTt” 0.00001
wyślij na adres „1F5p7KsHzeU2LjAboH5NCg5FTHvQHfxbTt” 0.00001
wyślij na adres „1F5p7KsHzeU2LjAboH5NCg5FTHvQHfxbTt” 0.00001
…
Pamiętaj, aby użyć powyższego adresu portfela SINK. Utwórz listę 100 poleceń sendtoaddress (podobnie jak powyżej) i wklej je do konsoli.
NOTATKA:
Po wysłaniu wielu transakcji może się zdarzyć, że część wygenerowanych transakcji nigdy nie trafi do puli pamięci
i spowoduje to, że saldo będzie nieprawidłowe. Aby to naprawić (POCZEKAJ na kolejne potwierdzenie bloku, aby Twoje życie
łatwiej), następnie przejdź do strony Transakcje i poszukaj wiersza zaczynającego się od ? (Znak zapytania). Kliknij prawym przyciskiem myszy wiersz i
wybierz opcję „Porzuć transakcję”. Jeśli opcja „Porzuć transakcję” nie jest dozwolona, transakcja jest prawidłowa i Ty
czy możesz sprawdzić inne? (znaki zapytania), aby sprawdzić, czy można je porzucić. Kiedy już w ogóle spojrzałeś? (Znak zapytania)
wierszy, saldo Twojego portfela powinno być prawidłowe.
Powyższy skrypt Pythona wykonuje całą tę brudną robotę za nas. Jest to jednak nadal prawidłowy sposób tworzenia transakcji.
Procesor czy ASIC?
Wszystko można przekształcić w ASIC. ASIC to tylko sposób na przyspieszenie operacji. Część algorytmu BitcoinPoW można w przyszłości umieścić w układzie ASIC, jednak celem BitcoinPoW jest stworzenie wersji Bitcoin, która nie może tworzyć pul. Przeczytaj powyżej, jak BitcoinPoW zapobiega pulom. Na razie całe wydobycie opiera się na wydobyciu procesora na BitcoinPoW. Zanim ktoś byłby gotowy zainwestować i zaprojektować układ ASIC, zajęłoby to lata. Nawet jeśli/kiedy pojawi się ASICS, prawdziwą zaletą BitcoinPoW będzie PoW/PoT wymuszający decentralizację wydobycia solo.
Darmowe monety
Jeśli chcesz utworzyć transakcje, aby rozpocząć wydobycie, możesz otrzymać darmowe monety tutaj:
Twitter (X): https://twitter.com/bitcoin_pow
Telegram: https://t.me/BitcoinPoWPoT
Więcej informacji można znaleźć na stronie https://www.bitcoin-pow.org
Licencja
Bitcoin PoW Core jest udostępniany na warunkach licencji MIT. Aby uzyskać więcej informacji, zobacz KOPIOWANIE lub odwiedź stronę https://opensource.org/licenses/MIT.
Proces rozwoju
Gałąź master jest regularnie budowana i testowana, ale nie ma gwarancji, że będzie całkowicie stabilna. Tagi są tworzone regularnie, aby wskazać nowe oficjalne, stabilne wersje Bitcoin PoW Core.
Przepływ pracy w ramach wkładu opisano w CONTRIBUTING.md, a przydatne wskazówki dla programistów można znaleźć w doc/developer-notes.md.
Testowanie
Testowanie i przegląd kodu to wąskie gardło w rozwoju; otrzymujemy więcej żądań ściągnięcia, niż jesteśmy w stanie sprawdzić i przetestować w krótkim czasie. Prosimy o cierpliwość i pomoc, testując żądania ściągnięcia innych osób, i pamiętaj, że jest to projekt o krytycznym znaczeniu dla bezpieczeństwa, w którym każdy błąd może kosztować ludzi dużo pieniędzy.
Automatyczne testowanie
Zdecydowanie zachęca się programistów do pisania testów jednostkowych dla nowego kodu i przesyłania nowych testów jednostkowych dla starego kodu. Testy jednostkowe można kompilować i uruchamiać (zakładając, że nie zostały wyłączone w konfiguracji) za pomocą: make check. Dalsze szczegóły na temat uruchamiania i rozszerzania testów jednostkowych można znaleźć w /src/test/README.md.
Istnieją również testy regresyjne i integracyjne napisane w Pythonie, które są uruchamiane automatycznie na serwerze kompilacji. Testy te można uruchomić (jeśli są zainstalowane zależności testowe) za pomocą: test/function/test_runner.py
System Travis CI zapewnia, że każde żądanie ściągnięcia jest tworzone dla systemów Windows, Linux i macOS oraz że testy jednostkowe/poczytalności są uruchamiane automatycznie.
Ręczne testowanie zapewnienia jakości (QA).
Zmiany powinny być testowane przez kogoś innego niż programista, który napisał kod. Jest to szczególnie ważne w przypadku dużych zmian lub zmian wysokiego ryzyka. Jeśli testowanie zmian nie jest proste, przydatne jest dodanie planu testów do opisu żądania ściągnięcia.
https://github.com/fluffyfunction/BitcoinPoW/blob/23.x/README.md