nbits格式比特幣
block的版本 version
上一個block的hash值: prev_hash
需要寫入的交易記錄的hash樹的值: merkle_root
更新時間: ntime
當前難度: nbits
挖礦的過程就是找到x使得
SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET
上式的x的范圍是0~2^32, TARGET可以根據當前難度求出的。除了x之外,你還可以嘗試改動merkle_root和ntime。由於hash的特性,找這樣一個x只能暴力搜索。
一旦你找到了x,你就可以廣播一個新的block,其他客戶端會驗證你的block是否合法。如果你的block被接受,由於每個block中的第一筆交易必須是將新產生25個比特幣發送到某個地址,當然你會把這個地址設為你所擁有的地址來得到這25個比特幣。
---------------------------------------------------------------
比特幣從開始到現在的每一筆交易記錄都保存在網路上,整個比特幣網路維護的一個巨大的交易記錄文件(現在大約12G)。 這個文件的更新周期平均是10分鍾,新加入的交易記錄叫做一個block,而這個碩大的文件由一串block組成,叫做block chain.
為什麼是25個比特幣?
這是規定。最初是50個比特幣,每產生剩下比特幣的一半,這個所得就會減半,這樣最終能產生的比特幣總量趨近於2100萬。如果你現在仍然聲稱挖到了50個比特幣,這是不會被其他客戶端接受的,這個block就算白挖了。
怎麼保證更新周期平均是10分鍾?
TARGET越小,解出x的難度就越大,每產生2016個block(約14天),網路會根據這段時間產生新block的平均間隔調整之後的TARGET。
是不是計算速度最快的人總是先解出來?
不是。你總是想把挖礦所得據為己有,所以每個人在計算時,發送挖礦所得的地址是不一樣的,這樣merkle_root就不同,也就是說每個人是從不同的初始狀態開始求解的。
同時解出來怎麼辦?
block chain會出現分叉,部分客戶端接受了A,部分接受了B,直到某個分支變得更長,所有人就會選擇這個更長的分支。如果你挖出來的不幸沒有被選中,你的挖礦所得就無效了。
既然選更長的分支,那我用很低的難度去求解怎麼辦?
客戶端在眾多分支中找到符合當前難度且最長的。
這些計算浪費了嗎?
如果你要把一筆錢花兩次,你需要這么做。挖到一個新的block,但是藏著不廣播,並繼續挖礦。找到商家A,支付比特幣,讓網路上的其他人挖到block並寫入這筆交易記錄。找到商家B,支付比特幣,寫入自己挖的block。如果你能搶先挖到兩個block並廣播出去,所有人會以你這個更長的分支為當前的block chain,商家A收到的比特幣就不被承認了。這樣攻擊成功的概率取決於你計算hash的速度。整個網路的計算力足夠高的話,這樣的攻擊或者成功率極低,或者成本極大。
2. 比特幣挖礦是解決什麼問題的
題主你好:
在很早期,比特幣算力難度非常低時,還可以使用計算機依照演算法進行大量的運算來「開采」比特幣。
在用戶「開采」比特幣時,需要用電腦搜尋64位的數字就行,然後通過反 復解謎與其他淘金者相互競爭,為比特幣網路提供所需的數字,如果用戶的電腦成功地創造出一組數字,那麼就將會獲得區塊所獎勵的比特幣。但是由於比特幣價值不斷升高,目前比特幣挖礦的用戶數量非常龐大,有上百萬的專業礦機在同時挖礦,而每10分鍾產出的比特幣又十分有限,形成了千萬人搶1個區塊的情況出現,所以,如果你用個人電腦單獨挖礦,有可能一整年也搶不到一個區塊,在這種情況下,人們就想出了一種組隊挖礦的方法,於是礦池(mining pool)誕生了。在中幣上有很多的用戶就是在挖礦後玩的。
望題主採納。
3. Block Chain外的交易對比特幣不利嗎
比特幣計算需要以下參數: 1、block的版本 version 2、上一個block的hash值: prev_hash 3、需要寫入的交易記錄的hash樹的值: merkle_root 4、更新時間: ntime 5、當前難度: nbits 挖礦的過程就是找到x使得 SHA256(SHA256(version + prev_hash + ...
4. matlab能夠處理的音頻格式有哪些
matlab能夠處理的音頻格式有.wav和.au文件。
聲音數據輸入輸出函數:
可以方便地讀寫au和way文件,並可控制其中的位及頻率。
wavread()和wavwriteO。
聲音播放:
wavplay():播放wav聲音文件。當然,也可以把處理後的
wav文件保存後再用其它工具播放。
wavrecordO:可以對處理後的wav文件進行錄音。
PS:在日常生活中,我們聽到的聲音一般都屬於復音,其聲音信號由不同的振幅與頻率的波合成而得到
MATLAB 處理音頻信號的流程
分析和處理音頻信號 首先要對聲音信號進行採集 MATLAB 的數據採集工具箱提供了一整套命令和函數,通過調用這些函數和命令,可直接控制音效卡進行數據採集[1] Windows 自帶的錄音機程序也可驅動音效卡來採集語音信號 並能保存為 WAV 格式文件供 MATLAB 相關函數直接讀取 寫入或播放 本文以 WAV 格式音頻信號作為分析處理的輸入數據 用 MATLAB 處理音頻信號的基本流程是 先將 WAV 格式音頻信號經 wavread 函數轉換成 MATLAB 列數組變數 再用 MATLAB 強大的運算能力進行數據分析和處理 如時域分析 頻域分析 數字濾波 信號合成 信號變換 識別和增強等等 處理後的數據如是音頻數據 則可用 wavwrite 轉換成 WAV 格式文件或用 sound wavplay 等函數直接回放 下面分別介紹 MATLAB 在音量標准化 聲道分離合並與組合 數字濾波 數據轉換等音頻信號處理方面的技術實現
音量標准化
錄制聲音過程中需對聲音電平進行量化處理 最理想的量化是最大電平對應最高量化比特 但實際卻很難做到 常有音輕問題 利用 MATLAB 很容易實現音量標准化 即最大電平對應最高量化比特 基本步驟是 先用 wavread 函數將 WAV 文件轉換成列數組變數 再求出數組變數的極值並對所有元素作歸一化處理 最後用 wavwrite 函數還原成音量標准化的 WAV 文件
例 1 現以微軟自帶的 Windows XP 關機.wav 音頻信號為例 先將其復制另存到文件名為 XPexit.wav 的 MATLAB 當前目錄中再通過音量標准化處理後保存為 XPquit.wav 文件 實現程序如下
clear; close all; clc;
[Y,FS,NBITS]=wavread('XPexit.WAV'); % 將 WAV 文件轉換成變數
FS,NBITS, % 顯示采樣頻率和量化比特
Ym=max(max(max(Y)),max(abs(min(Y)))), % 找出雙聲道極值
X=Y/Ym; % 歸一化處理
wavwrite(X,FS,NBITS,'XPquit.wav') % 將變數轉換成 WAV 文件
試聽可知標准化處理後音量稍大
聲道分離合並與組合
立體聲或雙聲道音頻信號有左右兩個聲道 利用 MATLAB 實現雙聲道分離 兩路聲道合並和兩個單聲道組合成一個雙聲道等效果 實際上是利用了MATLAB 的矩陣抽取 矩陣相加和矩陣重組運算
例 2 現以例 1 生成的 XPquit.wav 為例 實現分離 合並和組合處理的程序如下
clear; close all; clc;
[x,FS,NBITS]=wavread('XPquit.WAV'); % 將 WAV 文件轉換成變數
x1=x(:,1); % 抽取第 1 聲道
x2=x(:,2); % 抽取第 2 聲道
wavwrite(x1,FS,NBITS,'XPquit1.WAV'); % 實現 1 聲道分離
wavwrite(x2,FS,NBITS,'XPquit2.WAV'); % 實現 2 聲道分離
%如果合並位置不對前面補 0 %聲道長度不對後面補 0
x12=x1+x2; % 兩路單聲道列向量矩陣變數合並
x12m=max(max(x12),abs(min(x12))), % 找出極值
y12=x12./x12m; % 歸一化處理
wavwrite(y12,FS,NBITS,'XPquit12.WAV'); % 實現兩路聲道合並
%如果組合位置不對前面補 0--聲道長度不對後面補 0
x3=[x1,x2]; % 兩路單聲道變數組合
wavwrite(x3,FS,NBITS,'XPquit3.WAV'); % 實現兩路聲道組合
可以試聽聲道分離 合並與組合的效果 也可對各文件大小進行比較
數字濾波
數字濾波是常用的音頻處理技術 可根據技術指標 先利用 FDATool 工具 設計一個數字濾波器[2] 再用 Filter 或 Filter2 函數即可實現濾波處理 調用的 Filter 函數格式是 Y = filte (B,A,X) 其中 B 和 A 是濾波器傳輸函數的分子和分母系數 X 是輸入變數 Y是實現濾波後的輸出變數 如果處理立體聲音頻信號 可分開處理 但用 FIR 濾波器時調用 Filter2 函數更方便
例 3 現以例 2 生成的 XPquit12.wav 為例 實現數字濾波的程序如下
clear; close all; clc;
[X,FS,NBITS]=wavread('XPquit12.WAV'); % 將 WAV 文件轉換成變數
%利用 FDATool 設計一個 LowpassButterworth 濾波器
%指標 FS=22050Hz Fp=1000Hz Ap=1dB Fs=3000Hz As=20dB
B =[0.0062,0.0187,0.0187,0.0062]; % 分子系數
A =[1,-2.1706,1.6517,-0.4312]; % 分母系數
Y=filter(B,A,X); % 實現數字濾波
t=(0:length(X)-1)/FS; % 計算數據時刻
subplot(2,2,1);plot(t,X); % 繪制原波形圖
title(' 原信號波形圖 '); % 加標題
subplot(2,2,3);plot(t,Y); % 繪制濾波波形圖
title(' 濾波後波形圖 '); % 加標題
xf=fft(X); % 作傅里葉變換求原頻譜
yf=fft(Y); % 作傅里葉變換求濾波後頻譜
fm=3000*length(xf)/FS; % 確定繪頻譜圖的上限頻率
f=(0:fm)*FS/length(xf); % 確定繪頻譜圖的頻率刻度
subplot(2,2,2);plot(f,abs(xf(1:length(f)))); % 繪制原波形頻譜圖
title(' 原信號頻譜圖 '); % 加標題
subplot(2,2,4);plot(f,abs(yf(1:length(f)))); % 繪制濾波後頻譜圖
title(' 濾波後信號頻譜圖 '); % 加標題
wavwrite(Y,FS,NBITS,'XPquitFilter.WAV'); % 寫成 WAV 文件
5. 比特幣如何算出來的
要想了解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