【以太坊易錯概念】nonce, 公私鑰和地址坯汤,BASE64/BASE58,

1. nonce

以太坊里的nonce有兩種意思廉油,一個是proof of work nonce,一個是account nonce栖雾。

  • Proof of Work nonce:一個無意義的值,可以通過調整值得大小來試圖滿足proof of work的condition。這其實就是挖礦的本質村怪。這個值使得找出滿足proof of work condition的值變成了一個依靠運氣的計算密集型的工作。
  • Account nonce:每個帳戶中用來防止重放攻擊的交易計數(shù)器浮庐。例如甚负,一筆從A到B發(fā)送20個幣的交易可以被B不斷重復來消耗A的余額。
    這是為了防止雙花攻擊啦审残。舉個例子比如說
  • 你發(fā)出了一筆帶有normal GASPRICE的交易梭域,正等著被礦工加到塊里。
  • 你發(fā)出了另一筆帶有high GASPRICE的交易想使得在第一次交易之前進行第二次交易搅轿, 使得第一筆交易無效病涨。
    在以太坊中交易中有一個nonce域,double-spends就不會發(fā)生璧坟,nonce2的交易不會在nonce1的交易之前被添加進塊(也就是be mined)既穆,還要注意的是nonce不能被跳過,也就是說要是你發(fā)送了一個nonce3的交易但是沒有發(fā)送nonce2雀鹃,那么這個交易就沒用循衰。nonce一定要是順序的, no skips.

在智能合約里,nonce的值代表的是該合約創(chuàng)建的合約數(shù)量褐澎。只有當一個合約創(chuàng)建另一個合約的時候才會增加nonce的值会钝。但是當一個合約調用另一個合約中的method時 nonce的值是不變的。
在以太坊中nonce的值可以這樣來獲裙と(其實也就是屬于一個賬戶的交易數(shù)量):

eth.getTransactionCount(accountAddress)

但是這個方法只能獲取交易once的值迁酸。目前是沒有內置方法來訪問contract中的nonce值的

2,以太坊的公私鑰俭正,地址的關系

通過橢圓曲線算法生成鑰匙對(公鑰和私鑰)奸鬓,以太坊采用的是secp256k1曲線,
公鑰采用uncompressed模式,生成的私鑰為長度32字節(jié)的16進制字串掸读,公鑰為長度64的公鑰字串串远。公鑰04開頭。
把公鑰去掉04儿惫,剩下的進行keccak-256的哈希澡罚,得到長度64字節(jié)的16進制字串,丟掉前面24個肾请,拿后40個留搔,再加上"0x",即為以太坊地址铛铁。

整個過程可以歸納為:

Get Private-key[32字節(jié)] -> Public-key[64字節(jié)]-> (Keccak-256(
Public-key))-> Address [20字節(jié)]
secp256k1 -> 19784D0BCAE8E040DE1A33DAA74C749A1309BBD5E7776B3881F83531CE279636 -> ... -> 0xDD55dA111fBfcc671966D138dE7DFA249a6e76cC

3, BASE64和BASE58的區(qū)別隔显?

2)有些網(wǎng)關或系統(tǒng)只能使用ASCII字符却妨。Base64就是用來將非ASCII字符的數(shù)據(jù)轉換成ASCII字符的一種方法,而且base64特別適合在http括眠,mime協(xié)議下快速傳輸數(shù)據(jù)彪标。Base64使用【字母azAZ數(shù)字09和+/】這64個字符編碼。原理是將3個字節(jié)轉換成4個字節(jié)(3 X 8) = 24 = (4 X 6)
當剩下的字符數(shù)量不足3個字節(jié)時掷豺,則應使用0進行填充捞烟,相應的,輸出字符則使用'='占位萌业,因此編碼后輸出的文本末尾可能會出現(xiàn)1至2個'='坷襟。

1)Base58是用于Bitcoin中使用的一種獨特的編碼方式,主要用于產(chǎn)生Bitcoin的錢包地址生年。相比Base64婴程,Base58不使用數(shù)字"0",字母大寫"O"抱婉,字母大寫"I"档叔,和字母小寫"l",以及"+"和"/"符號蒸绩。

Base58Check是一種常用在比特幣中的Base58編碼格式衙四,增加了錯誤校驗碼來檢查數(shù)據(jù)在轉錄中出現(xiàn)的錯誤。 校驗碼長4個字節(jié)患亿,添加到需要編碼的數(shù)據(jù)之后传蹈。校驗碼是從需要編碼的數(shù)據(jù)的哈希值中得到的,所以可以用來檢測并避免轉錄和輸入中產(chǎn)生的錯誤步藕。使用 Base58check編碼格式時惦界,編碼軟件會計算原始數(shù)據(jù)的校驗碼并和結果數(shù)據(jù)中自帶的校驗碼進行對比。二者不匹配則表明有錯誤產(chǎn)生咙冗,那么這個 Base58Check格式的數(shù)據(jù)就是無效的沾歪。例如,一個錯誤比特幣地址就不會被錢包認為是有效的地址雾消,否則這種錯誤會造成資金的丟失灾搏。

為了使用Base58Check編碼格式對數(shù)據(jù)(數(shù)字)進行編碼,首先我們要對數(shù)據(jù)添加一個稱作“版本字節(jié)”的前綴立润,這個前綴用來明確需要編碼的數(shù) 據(jù)的類型狂窑。例如,比特幣地址的前綴是0(十六進制是0x00)范删,而對私鑰編碼時前綴是128(十六進制是0x80)蕾域。 表4-1會列出一些常見版本的前綴。

接下來到旦,我們計算“雙哈现枷铮”校驗碼,意味著要對之前的結果(前綴和數(shù)據(jù))運行兩次SHA256哈希算法:

checksum = SHA256(SHA256(prefix+data))
在產(chǎn)生的長32個字節(jié)的哈希值(兩次哈希運算)中添忘,我們只取前4個字節(jié)采呐。這4個字節(jié)就作為校驗碼。校驗碼會添加到數(shù)據(jù)之后搁骑。

結果由三部分組成:前綴斧吐、數(shù)據(jù)和校驗碼。這個結果采用之前描述的Base58字母表編碼仲器。下圖描述了Base58Check編碼的過程煤率。

相同:

  1. 一般都用于URL, 郵件文本, 可見字符顯示.
  2. 都會造成信息冗余, 數(shù)據(jù)量增大, 因此不會用于大數(shù)據(jù)傳輸編碼.
    區(qū)別:
  3. 編碼集不同, base 58 的編碼集在 base 64 的字符集的基礎上去掉了比較容易混淆的字符.
  4. base 64 采用直接切割 bit 的方法(8->6), 而 base 58 采用大數(shù)進制轉換, 效率更低, 使用場景更少.
    Note: base 58 解碼時需要將長度傳入, 這點與 base 64 有區(qū)別, 在代碼實現(xiàn)時應注意.

10,參考

1) 哈希算法乏冀、Merkle樹蝶糯、公鑰密碼算法
https://blog.csdn.net/s_lisheng/article/details/77937202?from=singlemessage

2)全新的 SHA-3 加密標準 —— Keccak
https://blog.csdn.net/renq_654321/article/details/79797428

3)在線加密算法
http://tools.jb51.net/password/hash_md5_sha

4)比特幣地址生成算法詳解
https://www.cnblogs.com/zhaoweiwei/p/address.html

5)Base58Check編碼實現(xiàn)示例
https://blog.csdn.net/QQ604666459/article/details/82419527

6) 比特幣交易中的簽名與驗證
http://www.reibang.com/p/a21b7d72532f

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辆沦,隨后出現(xiàn)的幾起案子昼捍,更是在濱河造成了極大的恐慌,老刑警劉巖肢扯,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妒茬,死亡現(xiàn)場離奇詭異,居然都是意外死亡蔚晨,警方通過查閱死者的電腦和手機乍钻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铭腕,“玉大人银择,你說我怎么就攤上這事〗髀模” “怎么了欢摄?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長笋粟。 經(jīng)常有香客問我怀挠,道長,這世上最難降的妖魔是什么害捕? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任绿淋,我火速辦了婚禮,結果婚禮上尝盼,老公的妹妹穿的比我還像新娘吞滞。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布裁赠。 她就那樣靜靜地躺著殿漠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪佩捞。 梳的紋絲不亂的頭發(fā)上绞幌,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音一忱,去河邊找鬼莲蜘。 笑死,一個胖子當著我的面吹牛帘营,可吹牛的內容都是我干的票渠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼芬迄,長吁一口氣:“原來是場噩夢啊……” “哼问顷!你這毒婦竟也來了?” 一聲冷哼從身側響起薯鼠,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤择诈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后出皇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羞芍,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年郊艘,在試婚紗的時候發(fā)現(xiàn)自己被綠了荷科。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡纱注,死狀恐怖畏浆,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情狞贱,我是刑警寧澤刻获,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站瞎嬉,受9級特大地震影響蝎毡,放射性物質發(fā)生泄漏。R本人自食惡果不足惜氧枣,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一沐兵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧便监,春花似錦扎谎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胧奔。三九已至,卻和暖如春老充,著一層夾襖步出監(jiān)牢的瞬間葡盗,已是汗流浹背螟左。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工啡浊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胶背。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓巷嚣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钳吟。 傳聞我的和親對象是個殘疾皇子廷粒,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內容