① 什麼是OP_RETURN有什麼用
OP_RETURN是比特幣的一個備注功能,用於在交易中添加數據記錄。以下是關於OP_RETURN的詳細解釋:
功能定義:
交易特性:
數據長度限制:
額外用途:
交易限制:
綜上所述,OP_RETURN是比特幣中一個獨特且有用的功能,它允許用戶在交易中添加額外的數據記錄,同時不會干擾比特幣的正常交易和賬本記錄。
② 什麼是比特幣挖礦難度如何調整原理是什麼
比特幣挖礦難度(Difficulty),是對挖礦困難程度的度量,挖礦難度越大,挖出區塊就越困難。目標值(Target)與挖礦難度成反比。難度越高,目標值越小。而難度目標是目標值通過轉化得到,是一個只有 4 個位元組的欄位(為了便於理解,本文將難度目標等同目標值處理)。比特幣系統正是通過調整區塊頭中難度目標來控制挖出區塊所需平均時間的。
目標值是個長度為 256 比特的字元串,換句話說目標值約有 2^256 種可能的取值。調整難度目標就是調整目標值在整個輸出空間的佔比。
舉例說明:挖礦就如射擊,所有射出去的子彈都會落在一個很大的靶子上。難度目標就是這個大靶子上圈出一個范圍,這個范圍越小,被射中的難度就越高。調節難度目標,就是調節這個圈在整個靶子上的佔比。
挖礦算力增大,單位時間射擊的次數就越多,目標范圍被射中所需的時間就越短。反之,挖礦算力減小,目標范圍被擊中所需的時間就越長。而比特幣系統追求的平均出塊時間為 10 分鍾,這時候就需要調整難度目標來實現。
02 如何調整難度目標?
比特幣系統是怎樣調整難度目標的呢?在《白話區塊鏈入門 080 | 數說比特幣,了解 比特幣 必須知道這 10 個數字》一文中,我們介紹了比特幣系統每過 2016 區塊(大約為 14 天時間),會自動調整一次難度目標。所有區塊高度為 2016 整數倍的區塊,系統就會自動調整難度目標。如果上一個難度目標調整周期(也就是之前 2016 個區塊),平均出塊時間大於 10 分鍾,說明挖礦難度偏高,需要降低挖礦難度,增大難度目標(准確地說是目標值);反之,前一個難度目標調整周期,平均出塊時間小於 10 分鍾,說明挖礦難度偏低,需要縮小難度目標。
03 難度目標的可調范圍
比特幣系統設定,難度目標上調和下調的范圍都有 4 倍的限制。舉例說明:假設上一個難度目標調整周期內的 2016 個區塊,由於算力暴漲,只用 7 天就全部挖出來了,通過難度目標調整,將難度目標縮小一倍,可以將平均出塊時間維持在 10 分鍾左右,但如果算力暴漲,前 2016 個區塊全部挖出只用了 1 天,那麼難度目標最小隻能調整為原來的四分之一。
04 總結
比特幣的算力是持續波動的,比特幣系統通過難度目標的調整,使得平均出塊時間維持在 10 分鍾左右。難度目標和挖礦難度成反比,挖礦難度越大,難度目標越小。當區塊高度為 2016 的整數倍時,比特幣系統就會在該區塊上,自動調整難度目標。如果上一個難度目標調整周期內,平均出塊時間超過 10 分鍾,那麼降低挖礦難度,增大難度目標;反之則提高挖礦難度,減小難度目標。難度目標上調和下調的范圍都有 4 倍的限制。
比特幣每 2016 個區塊(大約 14 天)調整一次挖礦難度,相比於 BCH 每個區塊都調整(大約 10 分鍾調整一次),有明顯的滯後性。你認為是哪種調整方式更合理呢?為什麼呢?歡迎在留言區分享你的觀點。
③ 為什麼比特幣總量是2100萬枚
比特幣有爭議的屬性之一就是它的固定的供應量。當前每10分鍾又25個新的比特幣被生產出來,並且這一數字每4年減半。總的來講,不會有超過2100萬個比特幣的存在>。另一方面,每個比特幣可以被劃分成1億份(每份叫做1「聰」),如果一美分都足夠買輛車的話,用美元來交易就麻煩重重了,但比特幣就算升值到和上面假設的美元的>狀況,也不會遇到那樣的問題。因此,總之,將永遠存在的貨幣單位的總數字是2,100,000,000,000,000,也就是2100萬億,或者說250.899。在選擇這個數值的方>面,中本聰比大多數人意識到的要幸運的多或者說聰明的多。首先,這個數字遠小於264-1,這是一台計算機裡面可以以標准整數形式存放的最大整數,超過那個值的話,>數值將像里程錶那樣歸零。
其次,然而,還有一個總「聰」數要設法低於的更小的閾值:可以用浮點的格式表示的可能的最大整數。整數不是計算機可以存儲的唯一一種數字;為了處理小數,計算機>使用一種做浮點表示法的格式。浮點表示法本質上就是一個科學記數法的二進製版本。舉個例子,下面是一個在你學習物理學的時候會遇到的值:
地球的質量: 5.972 1024 kg
太陽的質量: 1.989 1030 kg
光速: 2.998 108 m/s
一光年: 9.460 1015 m
質子的質量: 1.672 10-27 kg
普朗克長度: 1.616 10-35 m
我們可以注意到,科學記數法是如何使得你可以在合理的精度下表示所有的這些數值,盡管它們的大小相差極大。浮點表示法本質上就是二進制的科學記數法;當你存儲數>字9.625的時候,你的計算機存放的是「1.001101
* 1011」(或者說,它存放的是01000000 00100011 01000000 00000000 00000000 00000000
>00000000
00000000,這是高精度序列形式的同樣一回事)。在這個高精度形式中,系數(也就是不是指數的那部分)有52位(52bits)。這意味著高精度(更加精>確的說法是「雙精度」)浮點數足以存貯高達253的數字,但不能再高了,如果超過了,你就得開始砍掉末尾的數字。比特幣的250.9這一以指數形式表現的總「聰」數,剛>好低於這個最大值。
如果我們有了整數,我們為什麼還要關心浮點值呢?因為更多的高階編程語言(比如說Javascript)並不開放低階的「浮點」和「整數表示法」,而只給程序員提供「數」的>概念
– 當然以浮點的形式提供。如果中本聰當時選擇了2億1千萬而不是2100萬這個值的話,用很多語言里比特幣編程就會比現在要麻煩得多了。
注意,Stefan Thomas不幸的在他寫BitcoinJS的時候沒有及時留意到這個,以至於那個庫使用了一個專門的『大數big
number』對象,而不是一個普通數來存儲教程輸出值;我自己分叉的的BitcoinJS(同時還加入了其他的改進)使用了普通數。
④ 【區塊鏈】什麼是比特幣地址
比特幣地址是一串由字母和數字組成的26位到34位字元串,看起來有些像亂碼。但它就是你個人的比特幣賬戶,相當於你的銀行卡卡號,任何人都可以通過你的比特幣地址給你轉賬比特幣。
它與比特幣私鑰不同,不會因為信息泄露而造成比特幣丟失,因此你可以將比特幣地址放心的告訴任何人。
通過區塊鏈瀏覽器可以查看每個比特幣地址所有的轉賬交易記錄。
常用的比特幣區塊鏈瀏覽器有:
https://btc.com/block
https://www.blockchain.com/zh-cn/explorer
我們常用的比特幣地址格式一般有如下四種。
1、BASE58格式
BASE58格式是人們常見的比特幣地址格式,一般由1開頭的。
例如:
2、HASH160格式
HASH160格式為RIPEMD160演算法對130位公鑰的SHA256簽名進行計算得出的結果 。
例如:
3、WIF壓縮格式
WIF壓縮格式即錢包輸入格式,是將BASE58格式進行壓縮後的結果130位公鑰格式 這是最原始的由ECDSA演算法計算出來的比特幣公鑰。
例如:
4、60位公鑰格式
60位公鑰格式即130位公鑰進行壓縮後得出的結果。
例如:
比特幣是建立在數學加密學基礎上的,中本聰大神用了橢圓加密演算法(ECDSA)來產生比特幣的私鑰和公鑰。
由私鑰是可以計算出公鑰的,公鑰的值經過一系列數字簽名運算會得到比特幣地址。
比特幣地址是由演算法隨機生成,那麼就會有人問,既然都是隨機生成的,那麼比特幣的地址會不會重復呢?關於這個問題,想必就更不用擔心。
因為比特幣的私鑰長度是256位的二進制串,那麼隨機生成的兩個私鑰正好重復的的概率是2 ^ 256 ≈ 10 ^ 77之一,這個數字大到你根本無法想像,比中彩票的概率還要小好多;所以不用擔心的啦,每個人的比特幣地址都是獨一無二的。
⑤ 比特幣如何算出來的
要想了解bitcoin的技術原理,首先需要了解兩個重要的密碼技術: HASH碼:將一個長字元串轉換成固定長度的字元串,並且其轉換不可逆,即不太可能從HASH碼猜出原字元串。bitcoin協議里使用的主要是SHA256。
公鑰體系:對應一個公鑰和私鑰,在應用中自己保留私鑰,並公開公鑰。當甲向乙傳遞信息時,可使用甲的私鑰加密信息,乙可用甲的公鑰進行解密,這樣可確保第三方無法冒充甲發送信息;同時,甲向乙傳遞信息時,用乙的公鑰加密後發給乙,乙再用自己的私鑰進行解密,這樣可確保第三者無法偷聽兩人之間的通信。最常見的公鑰體系為RSA,但bitcoin協議里使用的是lliptic Curve Digital Signature Algorithm。 和現金、銀行賬戶的區別? bitcoin為電子貨幣,單位為BTC。在這篇文章里也用來指代整個bitcoin系統。 和在銀行開立賬戶一樣,bitcoin里的對應概念為地址。每個人都可以有1個或若干個bitcoin地址,該地址用來付賬和收錢。每個地址都是一串以1開頭的字元串,比如我有兩個bitcoin賬戶,和。一個bitcoin賬戶由一對公鑰和私鑰唯一確定,要保存賬戶,只需要保存好私鑰文件即可。 和銀行賬戶不一樣的地方在於,銀行會保存所有的交易記錄和維護各個賬戶的賬面余額,而bitcoin的交易記錄則由整個P2P網路通過事先約定的協議共同維護。 我的賬戶地址里到底有多少錢? 雖然使用bitcoin的軟體可以看到當前賬戶的余額,但和銀行不一樣,並沒有一個地方維護每個地址的賬面余額。它只能通過所有歷史交易記錄去實時推算賬戶余額。 我如何付賬? 當我從地址A向對方的地址B付賬時,付賬額為e,此時雙方將向各個網路節點公告交易信息,告訴地址A向地址B付賬,付賬額為e。為了防止有第三方偽造該交易信息,該交易信息將使用地址A的私鑰進行加密,此時接受到該交易信息的網路節點可以使用地址A的公鑰進行驗證該交易信息的確由A發出。當然交易軟體會幫我們做這些事情,我們只需要在軟體中輸入相關參數即可。 網路節點後收到交易信息後會做什麼? 這個是整個bitcoin系統里最重要的部分,需要詳細闡述。為了簡單起見,這里只使用目前已經實現的bitcoin協議,在當前版本中,每個網路節點都會通過同步保存所有的交易信息。 歷史上發生過的所有交易信息分為兩類,一類為"驗證過"的交易信息,即已經被驗證過的交易信息,它保存在一連串的「blocks」裡面。每個"block"的信息為前一個"bock"的ID(每個block的ID為該block的HASH碼的HASH碼)和新增的交易信息(參見一個實際的block)。另外一類指那些還"未驗證"的交易信息,上面剛剛付賬的交易信息就屬於此類。 當一個網路節點接收到新的未驗證的交易信息之後(可能不止一條),由於該節點保存了歷史上所有的交易信息,它可以推算中在當時每個地址的賬面余額,從而可以推算出該交易信息是否有效,即付款的賬戶里是否有足夠余額。在剔除掉無效的交易信息後,它首先取出最後一個"block"的ID,然後將這些未驗證的交易信息和該ID組合在一起,再加上一個驗證碼,形成一個新的「block」。 上面構建一個新的block需要大量的計算工作,因為它需要計算驗證碼,使得上面的組合成為一個block,即該block的HASH碼的HASH碼的前若干位為1。目前需要前13位為1(大致如此,不確定具體方式),此意味著如果通過枚舉法生成block的話,平均枚舉次數為16^13次。使用CPU資源生成block被稱為「挖金礦」,因為生產該block將得到一定的獎勵,該獎勵信息已經被包含在這個block裡面。 當一個網路節點生成一個新的block時,它將廣播給其它的網路節點。但這個網路block並不一定會被網路接受,因為有可能有別的網路節點更早生產出了block,只有最早產生的那個block或者後續block最多的那個block有效,其餘block不再作為下一個block的初始block。 對方如何確認支付成功? 當該筆支付信息分發到網路節點後,網路節點開始計算該交易是否有效(即賬戶余額是否足夠支付),並試圖生成包含該筆交易信息的blocks。當累計有6個blocks(1個直接blocks和5個後續blocks)包含該筆交易信息時,該交易信息被認為「驗證過」,從而該交易被正式確認,對方可確認支付成功。 一個可能的問題為,我將地址A裡面的余額都支付給地址B,同時又支付給地址C,如果只驗證單比交易都是有效的。此時,我的作弊的方式為在真相大白之前產生6個僅包括B的block發給B,以及產生6個僅包含C的block發給C。由於我產生block所需要的CPU時間非常長,與全網路相比,我這樣作弊成功的概率微乎其微。 網路節點生產block的動機是什麼? 從上面描述可以看出,為了讓交易信息有效,需要網路節點生成1個和5個後續block包含該交易信息,並且這樣的block生成非常耗費CPU。那怎麼樣讓其它網路節點盡快幫忙生產block呢?答案很簡單,協議規定對生產出block的地址獎勵BTC,以及交易雙方承諾的手續費。目前生產出一個block的獎勵為50BTC,未來每隔四年減半,比如2013年到2016年之間獎勵為25BTC。 交易是匿名的嗎? 是,也不是。所有BITCOIN的交易都是可見的,我們可以查到每個賬戶的所有交易記錄,比如我的。但與銀行貨幣體系不一樣的地方在於,每個人的賬戶本身是匿名的,並且每個人可以開很多個賬戶。總的說來,所謂的匿名性沒有宣稱的那麼好。 但bitcoin用來做黑市交易的還有一個好處,它無法凍結。即便警方追蹤到了某個bitcoin地址,除非根據網路地址追蹤到交易所使用的電腦,否則還是毫無辦法。 如何保證bitcoin不貶值? 一般來說,在交易活動相當的情況下,貨幣的價值反比於貨幣的發行量。不像傳統貨幣市場,央行可以決定貨幣發行量,bitcoin里沒有一個中央的發行機構。只有通過生產block,才能獲得一定數量的BTC貨幣。所以bitcoin貨幣新增量決定於: 1、生產block的速度:bitcoin的協議里規定了生產block的難度固定在平均2016個每兩個星期,大約10分鍾生產一個。CPU速度每18個月速度加倍的摩爾定律,並不會加快生產block的速度。 2、生產block的獎勵數量:目前每生產一個block獎勵50BTC,每四年減半,2013年開始獎勵25BTC,2017年開始獎勵額為12.5BTC。 綜合上面兩個因素,bitcoin貨幣發行速度並不由網路節點中任何單個節點所控制,其協議使得貨幣的存量是事先已知的,並且最高存量只有2100萬BTC