Donate BitcoinPOW.pl : 1LMofGNsTm4tMAzkPZH4qzK2qrLxu2pw2p
https://github.com/Bitcoin-PoW/BitcoinPoW/blob/23.x/README.md
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: This is block[n-1] and block[n-2] transaction hashes added together. These are the transactions that won the PoS in the past.
This is defined and can’t be manipulated.
2 – blockFrom.nTime: Time from block[n-1]. This is defined and can’t be manipulated.
3 – nTime: Time for current block. This can be updated to help solve the equation, however there isn’t much of a range as blocks are
on average 10 minutes apart.
4 – txPrev.vout.hash: This is the previous hash of the current transaction candidate.
5 – txPrev.vout.n: This is the vout number of the previous hash of the current transaction candidate.
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 – Requires PoW – Users must burn energy (CPU or ASIC) to solve the PoW equation.
2 – Requires PoT – Users must stake at least 1 satoshi so that a transaction is valid in the PoW equation. Amount of coin does not matter, it is wise
to spend as little as possible when creating a transaction.
Oto korzyści:
1 – Prevents pools from forming. Very decentralized mining naturally happens.
2 – All users will naturally solo mine.
3 – Larger coin amounts can be sent to cold storage because they have negligible contribution mining a block.
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(previous_stake_hash + others) < 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).
AKTUALIZACJA: -> Użyj polecenia „tx” na konsoli, aby utworzyć transakcje (wpisz „help tx”), oryginalny sposób pokazano poniżej w Pythonie.
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
from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
from pprint import pprint
import time
import re
if name == ’main’:
# rpc_user and rpc_password are set in the bitcoin-pow.conf file
rpc_user = "PUT_YOUR_USER_HERE"
rpc_pass = "PUT_YOUR_PASS_HERE"
rpc_host = "127.0.0.1"
prevHeight = 0
block_count = 0
while 1:
rpc_connection = AuthServiceProxy(f"http://{rpc_user}:{rpc_pass}@{rpc_host}:9332", timeout=240)
commands = [["getblockcount"]]
height = rpc_connection.batch_(commands)
if prevHeight != height[0]:
prevHeight = height[0]
print(height[0])
block_count = block_count + 1
if block_count > 25:
break
while 1:
txid = rpc_connection.sendtoaddress('PUT YOUR LEGACY BTC ADDRESS STARTING WITH A 1 HERE', 0.00001)
print(txid)
try:
# At some point, we will send and tx will not hit mem pool and we need to abandon tx to get balance back.
# keep doing this to keep it simple. It only abandons if it needs to.
commands = [["abandontransaction", txid]]
resp = rpc_connection.batch_(commands)
except Exception as err:
# this is good, keep sending txs
continue
print("abandontransaction was successful")
break # abandontransaction happened, we are done till next block
time.sleep(60)
setup.py
#!/usr/bin/env python
from distutils.core import setup
setup(
name='python-bitcoinrpc',
version='1.0',
description='Enhanced version of python-jsonrpc for use with Bitcoin',
long_description=open('README.rst').read(),
author='Jeff Garzik',
author_email='<jgarzik@pobox.com>',
maintainer='Jeff Garzik',
maintainer_email='<jgarzik@pobox.com>',
url='http://www.github.com/jgarzik/python-bitcoinrpc',
packages=['bitcoinrpc'],
classifiers=[
'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)', 'Operating System :: OS Independent'
]
)
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
rpcport=9332
server=1
listen=1
addresstype=legacy
walletrbf=1
Kroki
0 - Copy main.py and setup.py from above and run: python setup.py install
1 - Download QT wallet from www.bitcoin-pow.org Linux or Windows
2 - Create directory /home/software/.btcw1 or whatever you'd like to store the data directory for the SINK wallet
3 - Run the start_btcw.sh script
4 - Create a SOURCE wallet for the above Python script to rpc connect to and issue commands to create transactions.
This will use the default .bitcoin-pow directory
5 - Create a new SINK wallet(do not copy SOURCE wallet). This will use another data location such as
/home/software/.btcw1
6 - Using SOURCE wallet, go to settings->Options->"Open Configuration File" Put bitcoin.conf file contents there and save.
7 - Close both wallets.
8 - Run the start_btcw.sh script again
9 - Modify main.py with your username/pass and legacy BTC address to send transactions to. Address must start with a '1'.
10 - Run the python script to generate transactions: 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
Window->Console
Na dole GUI możesz wkleić jednocześnie 100 poleceń transakcji:
sendtoaddress "1F5p7KsHzeU2LjAboH5NCg5FTHvQHfxbTt" 0.00001
sendtoaddress "1F5p7KsHzeU2LjAboH5NCg5FTHvQHfxbTt" 0.00001
sendtoaddress "1F5p7KsHzeU2LjAboH5NCg5FTHvQHfxbTt" 0.00001
sendtoaddress "1F5p7KsHzeU2LjAboH5NCg5FTHvQHfxbTt" 0.00001
sendtoaddress "1F5p7KsHzeU2LjAboH5NCg5FTHvQHfxbTt" 0.00001
sendtoaddress "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.
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.