A. 浠ュお鍧婄熆鏈虹畻鍔涙庝箞鏍
浠ュお鍧婄熆鏈虹畻鍔涙庝箞绠
浠ュお鍧婃槸涓绉嶅熀浜庡尯鍧楅摼鐨勫姞瀵嗚揣甯侊紝鍏剁熆鏈虹畻鍔涙槸鎸囩敤浜庤В鍐冲尯鍧楅摼涓鐨勫瘑鐮佸﹂毦棰樼殑璁$畻鑳藉姏銆備互澶鍧婇噰鐢ㄤ簡涓绉嶅悕涓衡滃伐浣滈噺璇佹槑鈥濈殑鍏辫瘑鏈哄埗锛屽畠瑕佹眰鐭垮伐蹇呴』閫氳繃璁$畻鏌愪釜澶嶆潅鐨勬暟瀛﹂棶棰樻潵楠岃瘉浜ゆ槗骞跺垱寤烘柊鍖哄潡銆
浠ヤ笅鏄璁$畻浠ュお鍧婄熆鏈虹畻鍔涚殑涓浜涙ラわ細
纭瀹氱熆鏈哄瀷鍙凤細涓嶅悓鍨嬪彿鐨勭熆鏈哄叿鏈変笉鍚岀殑绠楀姏锛屽洜姝ら栧厛闇瑕佺‘瀹氫娇鐢ㄧ殑鐭挎満鍨嬪彿銆
鏌ユ壘鐭挎満鐨勭畻鍔涘弬鏁帮細姣忎釜鐭挎満閮芥湁涓嶅悓鐨勭畻鍔涘弬鏁帮紝杩欎簺鍙傛暟閫氬父鍙浠ュ湪鐭挎満鍒堕犲晢鐨勭綉绔欐垨鐭挎満璁剧疆涓鎵惧埌銆
璁$畻鐭挎満鐨勬瘡绉掔畻鍔涳細鐭挎満鐨勭畻鍔涢氬父鐢ㄥ搱甯岀巼锛坔ashrate锛夋潵琛¢噺锛屽畠琛ㄧず鐭挎満姣忕掕兘澶熷勭悊澶氬皯娆″搱甯岃繍绠椼備互澶鍧婄殑鍝堝笇绠楁硶鏄鍩轰簬浠ュお鍧婅櫄鎷熸満锛圗VM锛夌殑锛屽叾鍝堝笇鐜囬氬父浠MH/s锛堢櫨涓囧搱甯岀巼姣忕掞級涓哄崟浣嶃
鑰冭檻鐢佃垂鎴愭湰锛氬湪璁$畻鐭挎満绠楀姏鏃讹紝杩橀渶瑕佽冭檻鐭挎満鐨勭數璐规垚鏈銆傜熆鏈虹殑绠楀姏瓒婇珮锛岄氬父闇瑕佹秷鑰楁洿澶氱殑鐢靛姏锛屽洜姝ら渶瑕佽$畻姣忓皬鏃舵垨姣忓ぉ鐨勭數璐规垚鏈銆
鑰冭檻鐭挎睜璐圭敤锛氬傛灉浣跨敤鐭挎睜杩涜屾寲鐭匡紝鍒欓渶瑕佽冭檻鐭挎睜鐨勮垂鐢ㄣ傜熆姹犻氬父浼氭敹鍙栦竴瀹氭瘮渚嬬殑鎸栫熆濂栧姳浣滀负璐圭敤锛屽洜姝ら渶瑕佸皢杩欎簺璐圭敤鑰冭檻鍦ㄥ唴銆
缁煎悎鑰冭檻浠ヤ笂鍥犵礌锛屽彲浠ヨ$畻鍑轰互澶鍧婄熆鏈虹殑绠楀姏銆傞渶瑕佹敞鎰忕殑鏄锛岀熆鏈虹畻鍔涚殑璁$畻浠呬粎鏄涓涓鍙傝冿紝瀹為檯鐨勬寲鐭挎敹鐩婅繕鍙楀埌甯傚満琛屾儏绛夊洜绱犵殑褰卞搷銆
B. 【以太坊易错概念】nonce, 公私钥和地址,BASE64/BASE58,
以太坊里的nonce有两种意思,一个是proof of work nonce,一个是account nonce。
在智能合约里,nonce的值代表的是该合约创建的合约数量。只有当一个合约创建另一个合约的时候才会增加nonce的值。但是当一个合约调用另一个合约中的method时 nonce的值是不变的。
在以太坊中nonce的值可以这样来获取(其实也就是属于一个账户的交易数量):
但是这个方法只能获取交易once的值。目前是没有内置方法来访问contract中的nonce值的
通过椭圆曲线算法生成钥匙对(公钥和私钥),以太坊采用的是secp256k1曲线,
公钥采用uncompressed模式,生成的私钥为长度32字节的16进制字串,公钥为长度64的公钥字串。公钥04开头。
把公钥去掉04,剩下的进行keccak-256的哈希,得到长度64字节的16进制字串,丢掉前面24个,拿后40个,再加上"0x",即为以太坊地址。
整个过程可以归纳为:
2)有些网关或系统只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法,而且base64特别适合在http,mime协议下快速传输数据。Base64使用【字母azAZ数字09和+/】这64个字符编码。原理是将3个字节转换成4个字节(3 X 8) = 24 = (4 X 6)
当剩下的字符数量不足3个字节时,则应使用0进行填充,相应的,输出字符则使用'='占位,因此编码后输出的文本末尾可能会出现1至2个'='。
1)Base58是用于Bitcoin中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+"和"/"符号。
Base58Check是一种常用在比特币中的Base58编码格式,增加了错误校验码来检查数据在转录中出现的错误。 校验码长4个字节,添加到需要编码的数据之后。校验码是从需要编码的数据的哈希值中得到的,所以可以用来检测并避免转录和输入中产生的错误。使用 Base58check编码格式时,编码软件会计算原始数据的校验码并和结果数据中自带的校验码进行对比。二者不匹配则表明有错误产生,那么这个 Base58Check格式的数据就是无效的。例如,一个错误比特币地址就不会被钱包认为是有效的地址,否则这种错误会造成资金的丢失。
为了使用Base58Check编码格式对数据(数字)进行编码,首先我们要对数据添加一个称作“版本字节”的前缀,这个前缀用来明确需要编码的数 据的类型。例如,比特币地址的前缀是0(十六进制是0x00),而对私钥编码时前缀是128(十六进制是0x80)。 表4-1会列出一些常见版本的前缀。
接下来,我们计算“双哈希”校验码,意味着要对之前的结果(前缀和数据)运行两次SHA256哈希算法:
checksum = SHA256(SHA256(prefix+data))
在产生的长32个字节的哈希值(两次哈希运算)中,我们只取前4个字节。这4个字节就作为校验码。校验码会添加到数据之后。
结果由三部分组成:前缀、数据和校验码。这个结果采用之前描述的Base58字母表编码。下图描述了Base58Check编码的过程。
相同:
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编码实现示例
https://blog.csdn.net/QQ604666459/article/details/82419527
6) 比特币交易中的签名与验证
https://www.jianshu.com/p/a21b7d72532f
C. 浠ュお鍧婄畻鍔157鎬庝箞鏍
浠ュお鍧婄畻鍔157鎬庝箞鏍
浠ュお鍧婄畻鍔157鏄鎸囦互澶鍧婄綉缁滀笂鐨勪竴绉嶈$畻鑳藉姏锛岄氬父鏄鐢ㄦ潵鎸栫熆鑾峰彇浠ュお甯併備互澶鍧婄畻鍔157閫氬父鐢ㄥ搱甯岀巼锛坔ashrate锛夋潵琛¢噺锛屽畠琛ㄧず姣忕掗挓鍙浠ヨ$畻澶氬皯娆″搱甯岀畻娉曘傚搱甯岀巼瓒婇珮锛屾剰鍛崇潃璁$畻鑳藉姏瓒婂己锛屽洜姝ゆ寲鍒版柊鐨勫尯鍧楃殑姒傜巼涔熷氨瓒婂ぇ銆
浠ュお鍧婄畻鍔157瀵逛簬涓浜烘寲鐭胯岃█锛屽凡缁忓睘浜庣浉瀵硅緝楂樼殑绠楀姏浜嗐傚傛灉浣犳嫢鏈夎繖鏍风殑绠楀姏锛岄偅涔堝湪浠ュお鍧婄綉缁滀笂鎸栫熆鍙浠ヨ幏寰楁瘮杈冨彲瑙傜殑鏀剁泭銆備絾鏄闇瑕佹敞鎰忕殑鏄锛屼互澶鍧婄畻鍔157骞朵笉鏄瓒婇珮瓒婂ソ锛屽洜涓鸿繖涔熸剰鍛崇潃浣犻渶瑕佹姇鍏ユ洿澶氱殑鎴愭湰鍘荤淮鎶ゅ拰鍗囩骇浣犵殑鎸栫熆璁惧囥傛ゅ栵紝闅忕潃浠ュお鍧婄綉缁滅殑绔炰簤瓒婃潵瓒婃縺鐑堬紝鎸栫熆鐨勯毦搴︿篃浼氳秺鏉ヨ秺澶э紝鍥犳や互澶鍧婄畻鍔157鐨勬敹鐩婁篃浼氶愭笎鍑忓皯銆
鎬讳箣锛屼互澶鍧婄畻鍔157鏄涓涓鐩稿硅緝楂樼殑绠楀姏姘村钩锛屽湪浠ュお鍧婄綉缁滀笂鎸栫熆鍙浠ヨ幏寰椾笉閿欑殑鏀剁泭銆備絾鏄闇瑕佹敞鎰忔垚鏈鍜岄庨櫓锛屼互鍙婇殢鐫鏃堕棿鎺ㄧЩ绠楀姏鐨勫彉鍖栥
D. 12个NFT重点热词详解
12个NFT重点热词解析
NFT定义:即非同质化代币,NFT是映射笑裤特定资产的非同质化通证,本质上是基于以太坊的智能合约。
特点:
标记特定资产的所有权
真实性与唯一性
锚定非同质化资产价值
FT定义:即同质化代币。
特点:
能够替换
统一性
可接近无穷拆分
区块链定义:是一种由多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、防篡改、防抵赖的技术体系。
特点:
去中心化
开放性、安全性
独立性、匿名性
智能合约定义:指以信息化方式传播、验证或执行合同的计算机协议。
特点:
没有第三方可以进行可信交易
交易可追踪且不可逆转
目的:
提供优于传统合约的安全方法
减少合约相关交易成本
哈希算法:哈希算法可以将一个数据转换为一个标志,这个标志和判升祥源数据的每一个字节都有十分紧密的关系。
ETH:即以太币,被视为比特币2.0版,采用与比特币不同的区块链技术以太坊。
元宇宙:元宇宙是一套吸纳了信息革命、互联网革命、人工智能革命,以及 VR、AR、MR,特别是游戏引警在内的虚拟现实技术革命的成果,向人掘搏类展现出构建与传统物理世界平行的全息数字世界的全新理念与体系。
DeFi:即去中心化金融,是指在可编程的公有区块链网络上搭建的,以加密货币价值错定、借贷、互换等类金融活动为功能目标,由一系列智能合约和应用程序,共同构成的区块链应用项目。
DApp:即分布式应用或去中心化,应用指底层区块链平台衍生的各种分布式应用程序,一般是开源和去中心化。
Flow链
定义:是一个快速,去中心化且对开,发人员友好的区块链。
目的:为下一代应用程序、游戏以及数字资产提供动力。
Gas费:Gas是用于测量在以太坊区块链上执行特定操作所需工作量的单位,Gas费是以太坊首创的一个概念。说白了就是过路费,发起一笔交易,执行一段程序,就需要掏钱。
IPFS
定义:IPFS是一个分布式的web,点到点超媒体协议。
目的:打造一个更加开放、快速、安全的互联网。
E. 浠ュお鍧婃寲鐭跨殑绠楁硶鏄浠涔
浠ュお鍧婃寲鐭跨殑绠楁硶鏄浠涔堬紵
浠ュお鍧婃寲鐭跨殑绠楁硶鏄浠涔堬紵
浠ュお鍧婃槸涓绉嶅尯鍧楅摼鎶鏈锛屽彲鐢ㄤ簬鍒涘缓鍒嗗竷寮忓簲鐢ㄧ▼搴忥紙DApps锛夈傛寲鎺樹互澶鍧婄殑杩囩▼娑夊強閫氳繃璁$畻瑙e喅鏁板﹂棶棰樻潵娣诲姞鏂板潡锛岃繖琚璁や负鏄鈥滃伐浣滆瘉鏄庘濈畻娉曪紝浠ヤ繚鎸佸尯鍧楅摼鐨勫畨鍏ㄦу拰瀹屾暣鎬с傝繖涓绠楁硶鍚嶄负鈥淓thash鈥濓紝骞跺湪2015骞村彂甯冧簡浠ュお鍧婄殑绗涓鐗堛
Ethash绠楁硶鏄涓绉嶆暎鍒楀嚱鏁扮畻娉曪紝瀹冨熀浜庡搱甯岀巼锛圚ashrate锛夊拰绠楃姸鎬佹牴锛圫tateRoot锛変骇鐢熸棤瑙勫緥涓斿浐瀹氶毦搴︾殑闂棰樸傝繖涓绠楁硶鐨勭嫭鐗逛箣澶勫湪浜庡畠闇瑕佸ぇ閲忕殑鍐呭瓨锛屼笉鍒╀簬ASIC锛堜笓鐢ㄩ泦鎴愮數璺锛夌殑瀹炵幇鎸栨帢锛岄槻姝涓浜轰互鍙婂皯鏁扮熆宸ヨ幏寰楁洿楂樼殑绔炰簤鍔涳紝浠庤屽炲姞浜嗗幓涓蹇冨寲鐨勭綉缁滃畨鍏ㄦс
鎸栨帢浠ュお鍧婇渶瑕佺殑纭浠朵篃鏈変竴浜涚壒娈婅佹眰銆傞櫎浜咷PU锛堝浘褰㈠勭悊鍣锛夎兘澶熸樉鐫鎻愰珮鎬ц兘澶栵紝鍐呭瓨閲忎篃闇瑕佽冻澶熷ぇ浠ュ圭撼寮閲囪繃绋嬩腑浣跨敤鐨勬暟鎹鍧椼傛ゅ栵紝浠ュお鍧婅繕瑕佹眰浣跨敤楂橀熶簰鑱旂綉杩炴帴銆
鍦ㄦ寲鎺樹互澶鍧婃椂锛岀熆宸ュ繀椤绘壘鍒颁竴涓鈥渘once鈥濓紙涓涓鐢ㄤ簬璁$畻鏁e垪鍑芥暟鐨勪换鎰忔暟瀛楋級锛屼娇寰楀潡澶寸殑鍝堝笇鍊兼弧瓒崇綉缁滅殑闅惧害瑕佹眰銆傝繖绉嶉毦搴︽槸鍔ㄦ佺殑锛屽彇鍐充簬鐭垮伐鐨勬讳綋绠楀姏鍜岀綉缁滀笂鐨勮妭鐐规暟閲忋傚洜姝わ紝鎸栨帢浠ュお鍧婇渶瑕佸ぇ閲忕殑璁$畻鑳藉姏鍜岀數鍔涳紝浠ュ強蹇閫熺殑浜掕仈缃戣繛鎺ワ紝浠ヤ究涓庣綉缁滆繘琛屽悓姝ャ
鎬荤粨涓涓嬶紝浠ュお鍧婄殑鎸栫熆绠楁硶Ethash鏄涓绉嶆暎鍒楀嚱鏁扮畻娉曪紝闇瑕佸ぇ閲忕殑鍐呭瓨鏉ラ槻姝ASIC鎸栨帢锛屼粠鑰屽炲姞浜嗗幓涓蹇冨寲鐨勭綉缁滃畨鍏ㄦс傛寲鎺樹互澶鍧婇渶瑕佸ぇ閲忕殑璁$畻鑳藉姏銆佸唴瀛樺拰缃戠粶杩炴帴銆
F. 小白如何秒懂区块链中的哈希计算
小白如何秒懂区块链中的哈希计算
当我在区块链的学习过程中,发现有一个词像幽灵一样反复出现,“哈希”,英文写作“HASH”。
那位说“拉稀”同学你给我出去!!
这个“哈希”据说是来源于密码学的一个函数,尝试搜一搜,论文出来一堆一堆的,不是横式就是竖式,不是表格就是图片,还有一堆看不懂得xyzabc。大哥,我就是想了解一下区块链的基础知识,给我弄那么难干啥呀?!我最长的密码就是123456,复杂一点的就是654321,最复杂的时候在最后加个a,你给我写的那么复杂明显感觉脑力被榨干,仅有的脑细胞成批成批的死亡!为了让和我一样的小白同学了解这点,我就勉为其难,努力用傻瓜式的语言讲解一下哈希计算,不求最准确但求最简单最易懂。下面我们开始:
# 一、什么是哈希算法
## 1、定义:哈希算法是将任意长度的字符串变换为固定长度的字符串。
从这里可以看出,可以理解为给**“哈希运算”输入一串数字,它会输出一串数字**。
如果我们自己定义 “增一算法”,那么输入1,就输出2;输入100就输出101。
如果我我们自己定义“变大写算法”,那么输入“abc”输出“ABC”。
呵呵,先别打我啊!这确实就只是一个函数的概念。
## 2、特点:
这个哈希算法和我的“增一算法”和“变大写算法”相比有什么特点呢?
1)**确定性,算得快**:咋算结果都一样,算起来效率高。
2)**不可逆**:就是知道输出推不出输入的值。
3)**结果不可测**:就是输入变一点,结果天翻地覆毫无规律。
总之,这个哈希运算就是个黑箱,是加密的好帮手!你说“11111”,它给你加密成“”,你说“11112”它给你弄成“”。反正输入和输出一个天上一个地下,即使输入相关但两个输出毫不相关。
# 二、哈希运算在区块链中的使用
## 1、数据加密
**交易数据是通过哈希运算进行加密,并把相应的哈希值写入区块头**。如下图所示,一个区块头包含了上一个区块的hash值,还包含下一个区块的hash值。
1)、**识别区块数据是否被篡改**:区块链的哈希值能够唯一而精准地标识一个区块,区块链中任意节点通过简单的哈希计算都可以获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块链中的信息没有被篡改。
2)、**把各个区块串联成区块链**:每个区块都包含上一个区块的哈希值和下一个区块的值,就相当于通过上一个区块的哈希值挂钩到上一个区块尾,通过下一个区块的哈希值挂钩到下一个区块链的头,就自然而然形成一个链式结构的区块链。
## 2、加密交易地址及哈希
在上图的区块头中,有一个Merkle root(默克尔根)的哈希值,它是用来做什么的呢?
首先了解啥叫Merkle root? 它就是个二叉树结构的根。啥叫二叉树?啥叫根?看看下面的图就知道了。一分二,二分四,四分八可以一直分下去就叫二叉树。根就是最上面的节点就叫 根。
这个根的数据是怎么来的呢?是把一个区块中的每笔交易的哈希值得出后,再两两哈希值再哈希,再哈希,再哈希,直到最顶层的数值。
这么哈希了半天,搞什么事情?有啥作用呢?
1)、**快速定位每笔交易**:由于交易在存储上是线性存储,定位到某笔交易会需要遍历,效率低时间慢,通过这样的二叉树可以快速定位到想要找的交易。
举个不恰当的例子:怎么找到0-100之间的一个任意整数?(假设答案是88)那比较好的一个方法就是问:1、比50大还是小?2、比75大还是小?3、比88大还是小? 仅仅通过几个问题就可以快速定位到答案。
2)、**核实交易数据是否被篡改**:从交易到每个二叉树的哈希值,有任何一个数字有变化都会导致Merkle root值的变化。同时,如果有错误发生的情况,也可以快速定位错误的地方。
## 3、挖矿
在我们的区块头中有个参数叫**随机数Nonce,寻找这个随机数的过程就叫做“挖矿”**!网络上任何一台机器只要找到一个合适的数字填到自己的这个区块的Nonce位置,使得区块头这6个字段(80个字节)的数据的哈希值的哈希值以18个以上的0开头,谁就找到了“挖到了那个金子”!既然我们没有办法事先写好一个满足18个0的数字然后反推Nounce,唯一的做法就是从0开始一个一个的尝试,看结果是不是满足要求,不满足就再试下一个,直到找到。
找这个数字是弄啥呢?做这个有什么作用呢?
1)、**公平的找到计算能力最强的计算机**:这个有点像我这里有个沙子,再告诉你它也那一个沙滩的中的一粒相同,你把相同的那粒找出来一样。那可行的办法就是把每一粒都拿起来都比较一下!那么比较速度最快的那个人是最有可能先早到那个沙子。这就是所谓的“工作量证明pow”,你先找到这个沙子,我就认为你比较的次数最多,干的工作最多。
2)、**动态调整难度**:比特币为了保证10分钟出一个区块,就会每2016个块(2周)的时间计算一下找到这个nonce数字的难度,如果这2016个块平均时间低于10分钟则调高难度,如高于十分钟则调低难度。这样,不管全网的挖矿算力是怎么变化,都可以保证10分钟的算出这个随机数nonce。
# 三、哈希运算有哪些?
说了这么多哈希运算,好像哈希运算就是一种似的,其实不是!作为密码学中的哈希运算在不断的发展中衍生出很多流派。我看了”满头包”还是觉得内在机理也太复杂了,暂时罗列如下,小白们有印象知道是怎么回事就好。
从下表中也可以看得出,哈希运算也在不断的发展中,有着各种各样的算法,各种不同的应用也在灵活应用着单个或者多个算法。比特币系统中,哈希运算基本都是使用的SHA256算法,而莱特币是使用SCRYPT算法,夸克币(Quark)达世币(DASH)是把很多算法一层层串联上使用,Heavycoin(HAV)却又是把一下算法并联起来,各取部分混起来使用。以太坊的POW阶段使用ETHASH算法,ZCASH使用EQUIHASH。
需要说明的是,哈希运算的各种算法都是在不断升级完善中,而各种币种使用的算法也并非一成不变,也在不断地优化中。
**总结**:哈希运算在区块链的各个项目中都有着广泛的应用,我们以比特币为例就能看到在**数据加密、交易数据定位、挖矿等等各个方面都有着极其重要的作用**。而哈希运算作为加密学的一门方向不断的发展和延伸,身为普通小白的我们,想理解区块链的一些基础概念,了解到这个层面也已经足够。