一、比特币使用教程
比特币是一种建立在全球网络上的货币。
比特币是一种没有央行参与发行的,总量固定的数字货币。
比特币建立在全球的P2P网络上。
全球无数的P2P节点全天候的在维护着比特币的网络。
英文:bitcoin货币符号:英文缩写:BTC或 XBT。
维基百科对比特币的介绍:
Bitcoin与传统货币不同,比特币运行机制不依赖中央银行、政府、企业的支持或者信用担保,而是依赖对等网络中种子文件达成的网络协议,去中心化、自我完善的货币体制,理论上确保了任何人、机构、或政府都不可能操控比特币的货币总量,或者制造通货膨胀。它的货币总量按照设计预定的速率逐步增加,增加速度逐步放缓,并最终在2140年达到2100万个的极限。
为什么要使用比特币?
全球交易畅通无阻。
比特币费用低廉。
比特币易于携带,在全球范围内交易畅通无阻,全世界很多地方都接受比特币。
去中心化。
比特币的发行由整个P2P网络完成,不受任何组织和个人控制,是一个完全去中心化的货币系统。
比特币的发行数量是固定的,不会因通胀而贬值,就像黄金一样。
如何使用比特币钱包?
我们从三个方面来说明这个问题。
一:什么是比特币钱包?
简单来说,比特币钱包可以让你和整个世界进行交易。利用比特币钱包中生成的比特币地址你可以接收来自他人的比特币,你也可以将你帐户上的比特币转到他人的比特币地址上面。比特币地址就像银行卡号一样,你只有知道别人的比特币地址才能进行比特币转账。比特币钱包中保存着你自己的所有比特币地址和私钥信息。
二:什么是比特币地址和私钥?
比特币地址和私钥是成对出现的,他们的关系就像银行卡号和密码。比特币地址就像银行卡号一样用来记录你在该地址上存有多少比特币。你可以随意的生成比特币地址来存放比特币。每个比特币地址在生成时,都会有一个相对应的该地址的私钥被生成出来。这个私钥可以证明你对该地址上的比特币具有所有权。我们可以简单的把比特币地址理解成为银行卡号,该地址的私钥理解成为所对应银行卡号的密码。只有你在知道银行密码的情况下才能使用银行卡号上的钱。所以,在使用比特币钱包时请保存好你的地址和私钥。
三:比特币地址和私钥的格式
比特币地址是一段由数学算法生成的二十七到三十四位长度的字符串,一般以数字“1”或者“3”开头。每个比特币地址都对应着一个比特币私钥。比特币私钥亦是由一串字符组成,一般以数字“5”开头。私钥保证了你对该比特币地址上比特币的所有权。比特币私钥有不同的格式,详细资料读者可参见下面的基础教学内容。
请注意
比特币的私钥可以生成该私钥对应的比特币地址,但是比特币地址不能计算出该地址所对应的私钥。因此,假如你忘记了私钥而只记得比特币地址,那么该地址上的比特币便不属于你了。所以,一定要备份好比特币钱包,保护好私钥。如何生成比特币地址和私钥呢?你可以用比特币钱包来生成任意数量的地址和私钥。当然,也有离线生成比特币地址和私钥的比特币钱包工具(关于钱包的概念详见后面的基础教学)。
比特币钱包的种类有哪些?
比特币常用的钱包有三种:软件钱包、手机钱包、在线钱包。
软件钱包:通常指可以在本地机子上运行的比特币客户端。使用软件钱包是最安全的保护你比特币的方式。
手机钱包:只装在手机上的比特币钱包,用手机钱包你可以随时随地的使用比特币。
在线网络钱包:让你可以在任何地方使用比特币,在线服务提供商帮助你保护你的比特币安全。但是值得注意的是,你要仔细谨慎的选择你的在线钱包提供商。
常用软件钱包介绍:
①Bitcoin-Qt:
是最早的比特币客户端,比特币初期的骨干网络就是建立在它上面的。它提供了最高级别的安全性,隐私性和稳定性。然而,它具有的功能并不多。
②Multibit:
是一个轻量级的客户端。Multibit专注于便捷和易用。它与网络同步是在几分钟内就可以使用。Multibit还支持多语言。对于非技术用户,这是一个不错的选择。
③Electrum:
和Multibit类似,Electrum是一款基于SPV原理的比特币钱包软件客户端,它能在几分钟之内完成同步。不同的是Electrum采用了和Bitcoin-qt和Multibit不同钱包的找零机制,所有的比特币私钥都由安全密码种子生成,因此他的安全性更高。Electrum适合对比特币技术原理已经有一定了解的玩家使用。
④Armory:
Armory客户端是运行于Bitcoin-Qt客户端之上的高级比特币客户端,为高级用户提供了更多的扩展功能,其中包括了很多关于备份和加密的功能,以及非常安全的线下冷存储。和Electrum一样,Armory适合对比特币有一定了解的用户使用。
常用的手机钱包介绍:
Bitcoin Wallet:
Bitcoin Wallet可以在Googleandroid商店找到。它是一个轻量级的移动客户端,支持Android和黑莓系统。这个客户端并不需要在线才能工作。它支持QR码(二维码)扫描和NFC(近距离无线通信)。
常用的在线钱包介绍:
①Blockchain:
Blockchain是最早的比特币在线钱包提供商,它提供的功能最多,也非常可靠。您可以用它在全球免费付款。它支持在手机上或个电脑上使用。
②P2PBUCKS:
提示:为保证安全,Blockchain.info在线钱包的用户请使用GoogleAuthenticator或Yubikey等双因子认证方式登陆。并定时从Blockchain上下载自己的钱包备份到本地电脑。
我是在完美生活卫星号上看到这篇文章哦,详细的你可以去关注一下:funinusa
二、psp金手指教程
因为我不知道你哪里不懂,根据你百度知道的回答情况,我不能断定你是不是能理解。所以我只能大概讲一下金手指用法。
你可以搜索下载金手指傻瓜包,但是你是哪个版本的psp?
我这里以3000为例。
1、先把压缩包直接解压到记忆棒根目录下。就是说把CheatMaster和seplugins两个文件夹及其内容放在根目录下(和iso目录并列)
2、进入破解系统的菜单,选择启用插件。如果知道如何操作则跳过第3布。否则转到第3步。
3、关机并重新刷机。
4、进入游戏测试,方法是按下音量键♪。如果操作正确则会跳出金手指菜单。如果不出现,你再留言。
使用简例:
1、如何修改血量:
比如有1000点,在金手指菜单中选择“搜索数据”
如果你对这些比较苦手,那么保持一切默认,搜索10进制的1000,然后让小怪兽A几下,然后选择再次搜索,比如只剩200点血了,就搜索10进制的200,这样的搜索方式原理是,保持第一次搜索结果(1000)不变的情况下,从这些结果中找出变成200的地址,基本上只会有几条剩下,如果数据较多你可以循环搜索,直到找出确认是正确血量的地址(如何判断,自己学习)。这个方法同样适用于修改其他数值。
2、血量不是用数字表示的,只有血槽。
就要用到模糊搜索了,在搜索类型中选择“模糊自动”,然后选择自动搜索。这样会把所有地址记录下来。然后被小怪兽A一下,血量减少,再次搜索选择“减少”。然后加点血,搜索选择增加,再被打,搜索选择减少。如此循环直到找出正确地址。
3、复杂情况的修改方法
由于玩家技术水平参差不齐,推荐苦手直接寻找互联网上提供的金手指代码。比如要修改使所有的道具出现,按下select键可以补满血等等。
这些修改类型的金手指的技术超出了一般玩家的能力。所以我推荐使用别人的金手指。这里我提供一下使用别人发出的金手指的方法。
以下以战场女武神2为例。
网上搜索出以下提供的金手指代码(部分):
_S NPJH-50145
_G战场女武神2←这上面两个是游戏在金手指中的名字
_C0 DCT金钱←这个是修改金钱的标题
_L 0x20537180 0x000F423F←具体代码(修改金钱为999999,0F423F的十进制,具体是把0x00537180处的地址按16进制方式倒序填入0F423F,无需理解。)
但为什么不是改0x20537180而是改0x00537180呢?最后会说明。
_C0 EXP经验值
_L 0x20537184 0x0098967F←具体代码
_C0这个表示该条代码不锁定
_C1表示锁定
_L后面跟的是代码。
像一般的修改只有一条_L而高级修改涉及到金手指代码(金手指语言)可以对数据进行自定义式修改方法。所以有的复杂修改会有很多条_L.
比如:
_C0全人物
_L 0x805357AC 0x004A002C←这些代码可不像改钱一样
_L 0x00000001 0x00000000←不是把0x00000001改成0.下同
_C0新闻全部
_L 0x40542270 0x00080001
_L 0xFFFFFFFF 0x00000000
_C0设计図全部
_L 0x80541F6C 0x00730001
_L 0x00000003 0x00000000
这里的代码是有程序性的,具体金手指插件的作者有具体说明,我把它方在了最后。
下面说如何调用别人的代码
如:你下载到一段代码
S NPJH-50145
_G战场女武神2
_C0 01拉玛尔
_L 0x20386694 0x10000011
_L 0x20386738 0x34120001
_C0 02赛姐
_L 0x20386694 0x10000011
_L 0x20386738 0x34120002
_C0 03伊萨拉
_L 0x20386694 0x10000011
_L 0x20386738 0x34120003
_C0 04猎天使魔女徽章
_L 0x20386694 0x10000011
_L 0x20386738 0x34120004
_C0 06伊蒂小队
_L 0x20386694 0x10000011
_L 0x20386738 0x34120006
_C0 07第七小队偶像(伊蒂)徽章
_L 0x20386694 0x10000011
_L 0x20386738 0x34120007
_C0 08DC蚊香徽章
_L 0x20386694 0x10000011
_L 0x20386738 0x34120008
_C0 0A加利亚义勇兵徽章
_L 0x20386694 0x10000011
_L 0x20386738 0x3412000A
_C0 0BBLITZ徽章
_L 0x20386694 0x10000011
_L 0x20386738 0x3412000B
_C0 0C腹黑王子(动画前作BOSS)+帝国军旗徽章
_L 0x20386694 0x10000011
_L 0x20386738 0x3412000C
_C0 0EPUYOPUYO世嘉徽章
_L 0x20386694 0x10000011
_L 0x20386738 0x3412000E
你把这段代码放在一个文本文档中,然后把文本文档的后缀名命名成cmf
即将xxx.txt改成xxx.cmf把这个保存到记忆棒根目录\CheatMaster\CMF\文件夹下即可。然后进入游戏,呼出金手指,选择载入表格。你会看到xxx.cmf。载入即可。由于xxx和游戏名不同所以金手指表格不会每次游戏启动时自动加载。要想自动加载,你只要载入后再选“保存表格”即可,金手指会自动以游戏名重新命名地址表格。
以上是大概是用方法,至于其他如快速存档等等功能,你可以搜索其他教程,或者发信息给我。
——————————————————————————————
以下内容是插件作者的说明,一般玩家无需掌握。
代码格式说明:
首先应该知道的一点,
CM里输入数字的时候,一般都可以按□在16进制和10进制数字显示之间切换
锁定的使用:
只要某行代码属性是非锁定,则该行代码不会执行.
当前行是D码或者E码行非锁定的话,就跳过后续n行.
指针6码行非锁定的话,则跳过若干行(具体看6码书写规则).
字节类型的选择:
CW码因为字节数根据金手指代码语法即可判断,所以CW码行的字节类型选自动即可.
CM码,则根据自己要求选择,一般自动也可以满足要求.
------------------------------------------------------------------------------------
支持以下金手指代码,cw代码基本上拿过来就可用
数字一律16进制
最简单的,直写码
0aaaaaaa 0x000000dd
将地址aaaaaaa处数据改为dd
1aaaaaaa 0x0000dddd
将地址aaaaaaa处数据改为dddd
写入地址必须是偶数
2aaaaaaa 0xdddddddd
将地址aaaaaaa处数据改为dddddddd
写入地址必须是4的倍数
压缩码,比较有用
8aaaaaaa nnnnmmmm
000000dd 000000ss
从aaaaaaa地址开始,每增加mmmm的地址,就修改这个地址处的数据
写入数据dd为基数,每次递增ss,共修改nnnn条
8aaaaaaa nnnnmmmm
1000dddd 0000ssss
从aaaaaaa地址开始,每增加mmmm*2的地址,就修改这个地址处的数据
数据dddd为基数,每次递增ssss,共修改nnnn条
写入地址必须是偶数
4aaaaaaa nnnnmmmm
dddddddd ssssssss
从aaaaaaa地址开始,每增加mmmm*4的地址,就修改这个地址处的数据
写入数据dddddddd为基数,每次递增ssssssss,共修改nnnn条
写入地址必须是4的倍数
条件码,也很有用
Daaaaaaa 200000dd
当地址aaaaaaa处数据等于dd时,执行下一条密码,否则跳过
Daaaaaaa 201000dd
当地址aaaaaaa处数据不等于dd时,执行下一条密码,否则跳过
Daaaaaaa 202000dd
当地址aaaaaaa处数据小于dd时,执行下一条密码,否则跳过
Daaaaaaa 203000dd
当地址aaaaaaa处数据大于dd时,执行下一条密码,否则跳过
Daaaaaaa 0000dddd
当地址aaaaaaa处数据等于dddd时,执行下一条密码,否则跳过
地址必须是偶数
Daaaaaaa 0010dddd
当地址aaaaaaa处数据不等于dddd时,执行下一条密码,否则跳过
地址必须是偶数
Daaaaaaa 0020dddd
当地址aaaaaaa处数据小于dddd时,执行下一条密码,否则跳过
地址必须是偶数
Daaaaaaa 0030dddd
当地址aaaaaaa处数据大于dddd时,执行下一条密码,否则跳过
地址必须是偶数
0xDaaaaaaa 0x4bbbbbbb
0xnnnnnnnn 0x0000000(0)
0xXXXXXXXX 0xYYYYYYYY(起始行)
※当地址aaaaaaa上的値等於地址aaaaaaa上的则从起始行开始连续执行nnnnnnnn行码,否则跳过这些码不执行。
括号内的数字决定两个地址上的比较値的类型,0表示单字节(8-bit)、1表示双字节(16-bit)、2表示四字节(32-bit)。
0xDaaaaaaa 0x5bbbbbbb
0xnnnnnnnn 0x0000000(0)
0xXXXXXXXX 0xYYYYYYYY(起始行)
※这个是作不等於的运算。
0xDaaaaaaa 0x6bbbbbbb
0xnnnnnnnn 0x0000000(0)
0xXXXXXXXX 0xYYYYYYYY(起始行)
※这个是作小於的运算。
0xDaaaaaaa 0x7bbbbbbb
0xnnnnnnnn 0x0000000(0)
0xXXXXXXXX 0xYYYYYYYY(起始行)
※这个是作大於的运算。
下面这个条件码可以嵌套
E0nndddd 0aaaaaaa
当地址aaaaaaa数据等于dddd时,执行下nn条密码,否则跳过
地址必须是偶数
E0nndddd 1aaaaaaa
当地址aaaaaaa数据不等于dddd时,执行下nn密码,否则跳过
地址必须是偶数
E0nndddd 2aaaaaaa
当地址aaaaaaa数据小于dddd时,执行下nn密码,否则跳过
地址必须是偶数
E0nndddd 3aaaaaaa
当地址aaaaaaa数据大于dddd时,执行下nn密码,否则跳过
地址必须是偶数
E1nn00dd 0aaaaaaa
当地址aaaaaaa数据等于dd时,执行下nn条密码,否则跳过
E1nn00dd 1aaaaaaa
当地址aaaaaaa数据不等于dd时,执行下nn密码,否则跳过
E1nn00dd 2aaaaaaa
当地址aaaaaaa数据小于dd时,执行下nn密码,否则跳过
E1nn00dd 3aaaaaaa
当地址aaaaaaa数据大于dd时,执行下nn密码,否则跳过
复制码
5aaaaaaa nnnnnnnn
bbbbbbbb 00000000
将aaaaaaa地址处数据拷贝nnnnnnnn字节到bbbbbbbb地址处
逻辑运算码
单字节/8 bits
0x7aaaaaaa 0x000000bb
将aaaaaaa地址上的数値作或运算,由bb决定哪些比特作比较。
0x7aaaaaaa 0x000200bb
将aaaaaaa地址上的数値作与运算,由bb决定哪些比特作比较。
0x7aaaaaaa 0x000400bb
将aaaaaaa地址上的数値作非运算,由bb决定哪些比特作比较。
双字节/16 bits
0x7aaaaaaa 0x0001bbbb
将aaaaaaa地址上的数値作或运算,由bbbb决定哪些比特作比较
地址必须是偶数
0x7aaaaaaa 0x0003bbbb
将aaaaaaa地址上的数値作与运算,由bbbb决定哪些比特作比较
地址必须是偶数
0x7aaaaaaa 0x0005bbbb
将aaaaaaa地址上的数値作非运算,由bbbb决定哪些比特作比较
地址必须是偶数
加减码
单字节/8 bits
0x301000nn 0x0aaaaaaa
将aaaaaaa地址上的数値每经过一帧就增加nn。
0x302000nn 0x0aaaaaaa
将aaaaaaa地址上的数値每经过一帧就减去nn。
双字节/16 bits
0x3030nnnn 0x0aaaaaaa
将aaaaaaa地址上的数値每经过一帧就增加nnnn,地址必须是偶数
0x3040nnnn 0x0aaaaaaa
将aaaaaaa地址上的数値每经过一帧就减去nnnn,地址必须是偶数
四字节/32 bits
0x30500000 0x0aaaaaaa
0xnnnnnnnn 0x00000000
将aaaaaaa地址上的数値每经过一帧就增加nnnnnnnn,写入地址必须是4的倍数
0x30600000 0x0aaaaaaa
0xnnnnnnnn 0x00000000
将aaaaaaa地址上的数値每经过一帧就减去nnnnnnnn,写入地址必须是4的倍数
这些码可以把地址上的原数値作加减法运算,加减的速度非常快,通常要配合条件码使用。
键位码
D00000dd 1nnnnnnn
当键位值等于nnnnnnn时执行该行代码下的dd+1行代码,否则跳过dd+1行代码。
反向键位码
D00000dd 3nnnnnnn
当键位值等于nnnnnnn时跳过下面dd+1行代码,否则执行下面dd+1行代码。
每个按键对应的键位値如下:
Button Code
SELECT 0x00000001
START 0x00000008
DPAD UP 0x00000010
DPAD RIGHT 0x00000020
DPAD DOWN 0x00000040
DPAD LEFT 0x00000080
L TRIGGER 0x00000100
R TRIGGER 0x00000200
TRIANGLE 0x00001000
CIRCLE 0x00002000
CROSS 0x00004000
SQUARE 0x00008000
HOME 0x00010000
HOLD 0x00020000
NOTE 0x00800000
SCREEN 0x00400000
VOLUME UP 0x00100000
VOLUME DOWN 0x00200000
WLAN UP 0x00040000
REMOTE HOLD 0x00080000
如果想配组合键的话可以将每个按键的值相加
支持嵌套
指针码
适用于某些每次变化,动态分配的内存数值
反正想做这个码的人会自己研究,用的人直接输入,这里不详细说明了
8位+
0x6aaaaaaa 0x000000vv
0x0000nnnn 0xiiiiiiii
16位+
0x6aaaaaaa 0x0000vvvv
0x0001nnnn 0xiiiiiiii
32位+
0x6aaaaaaa 0xvvvvvvvv
0x0002nnnn 0xiiiiiiii
8位-
0x6aaaaaaa 0x000000vv
0x0003nnnn 0xiiiiiiii
16位-
0x6aaaaaaa 0x000000vv
0x0004nnnn 0xiiiiiiii
32位-
0x6aaaaaaa 0x000000vv
0x0005nnnn 0xiiiiiiii
多级指针
0x6aaaaaaa 0xvvvvvvvv
0xqqqynnnn 0xbbbbbbbb
0x2ccccccc 0x3ddddddd
……
aaaaaaa还是最原始的base,vvvvvvvv是value,y是指针类型决定了value的数据类型以及bbbbbbbb是正向还是逆向的。
nnnn〉1时判断下面的附加行是甚麼数字开头的,1开头的是之前的指针复制码,9开头的是之前的指针压缩码,2或3开头的就是多级指针码。
如果是多级指针码的话那qqq部分必须是000,ccccccc是1级offset,ddddddd是2级offset,后面依次类推,而bbbbbbbb是末级offset,也就是最后将要写入vvvvvvvv时的那个offset。
附加行中开头的2表示ccccccc是正向offset,开头的3表示ddddddd是逆向offset。
擧两个战神的例子:
锁mp
[[[0x60346B00]+0xA8]+0x68]+0x64
0x60346B00 0x43480000
0x00020003 0x00000064
0x200000A8 0x20000068
因为末级offset是0x64而且是正向的所以bbbbbbbb部分是0x00000064,y部分是2(因为锁32bit数据);0xA8是1级offset而且是正向的所以附加行开头就是0x200000A8;2级offset是0x68就是0x20000068。
三、区块链入门的教程
可是,简单易懂的入门文章却很少。区块链到底是什么,有何特别之处,很少有解释。
下面,我就来尝试,写一篇最好懂的区块链教程。毕竟它也不是很难的东西,核心概念非常简单,几句话就能说清楚。我希望读完本文,你不仅可以理解区块链,还会明白什么是挖矿、为什么挖矿越来越难等问题。
需要说明的是,我并非这方面的专家。虽然很早就关注,但是仔细地了解区块链,还是从今年初开始。文中的错误和不准确的地方,欢迎大家指正。
一、区块链的本质
区块链是什么?一句话,它是一种特殊的分布式数据库。
首先,区块链的主要作用是储存信息。任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库。
其次,任何人都可以架设服务器,加入区块链网络,成为一个节点。区块链的世界里面,没有中心节点,每个节点都是平等的,都保存着整个数据库。你可以向任何一个节点,写入/读取数据,因为所有节点最后都会同步,保证区块链一致。
二、区块链的最大特点
分布式数据库并非新发明,市场上早有此类产品。但是,区块链有一个革命性特点。
区块链没有管理员,它是彻底无中心的。其他的数据库都有管理员,但是区块链没有。如果有人想对区块链添加审核,也实现不了,因为它的设计目标就是防止出现居于中心地位的管理当局。
正是因为无法管理,区块链才能做到无法被控制。否则一旦大公司大集团控制了管理权,他们就会控制整个平台,其他使用者就都必须听命于他们了。
但是,没有了管理员,人人都可以往里面写入数据,怎么才能保证数据是可信的呢?被坏人改了怎么办?请接着往下读,这就是区块链奇妙的地方。
三、区块
区块链由一个个区块(block)组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。
每个区块包含两个部分。
区块头(Head):记录当前区块的特征值
区块体(Body):实际数据
区块头包含了当前区块的多项特征值。
生成时间
实际数据(即区块体)的哈希
上一个区块的哈希
...
这里,你需要理解什么叫哈希(hash),这是理解区块链必需的。
所谓哈希就是计算机可以对任意内容,计算出一个长度相同的特征值。区块链的哈希长度是256位,这就是说,不管原始内容是什么,最后都会计算出一个256位的二进制数字。而且可以保证,只要原始内容不同,对应的哈希一定是不同的。
举例来说,字符串123的哈希是a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0(十六进制),转成二进制就是256位,而且只有123能得到这个哈希。(理论上,其他字符串也有可能得到这个哈希,但是概率极低,可以近似认为不可能发生。)
因此,就有两个重要的推论。
推论1:每个区块的哈希都是不一样的,可以通过哈希标识区块。
推论2:如果区块的内容变了,它的哈希一定会改变。
四、 Hash的不可修改性
区块与哈希是一一对应的,每个区块的哈希都是针对区块头(Head)计算的。也就是说,把区块头的各项特征值,按照顺序连接在一起,组成一个很长的字符串,再对这个字符串计算哈希。
Hash= SHA256(区块头)
上面就是区块哈希的计算公式,SHA256是区块链的哈希算法。注意,这个公式里面只包含区块头,不包含区块体,也就是说,哈希由区块头唯一决定,
前面说过,区块头包含很多内容,其中有当前区块体的哈希,还有上一个区块的哈希。这意味着,如果当前区块体的内容变了,或者上一个区块的哈希变了,一定会引起当前区块的哈希改变。
这一点对区块链有重大意义。如果有人修改了一个区块,该区块的哈希就变了。为了让后面的区块还能连到它(因为下一个区块包含上一个区块的哈希),该人必须依次修改后面所有的区块,否则被改掉的区块就脱离区块链了。由于后面要提到的原因,哈希的计算很耗时,短时间内修改多个区块几乎不可能发生,除非有人掌握了全网51%以上的计算能力。
正是通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。这就像历史一样,发生了就是发生了,从此再无法改变。
每个区块都连着上一个区块,这也是区块链这个名字的由来。
五、采矿
由于必须保证节点之间的同步,所以新区块的添加速度不能太快。试想一下,你刚刚同步了一个区块,准备基于它生成下一个区块,但这时别的节点又有新区块生成,你不得不放弃做了一半的计算,再次去同步。因为每个区块的后面,只能跟着一个区块,你永远只能在最新区块的后面,生成下一个区块。所以,你别无选择,一听到信号,就必须立刻同步。
所以,区块链的发明者中本聪(这是假名,真实身份至今未知)故意让添加新区块,变得很困难。他的设计是,平均每10分钟,全网才能生成一个新区块,一小时也就六个。
这种产出速度不是通过命令达成的,而是故意设置了海量的计算。也就是说,只有通过极其大量的计算,才能得到当前区块的有效哈希,从而把新区块添加到区块链。由于计算量太大,所以快不起来。
这个过程就叫做采矿(mining),因为计算有效哈希的难度,好比在全世界的沙子里面,找到一粒符合条件的沙子。计算哈希的机器就叫做矿机,操作矿机的人就叫做矿工。
六、难度系数
读到这里,你可能会有一个疑问,人们都说采矿很难,可是采矿不就是用计算机算出一个哈希吗,这正是计算机的强项啊,怎么会变得很难,迟迟算不出来呢?
原来不是任意一个哈希都可以,只有满足条件的哈希才会被区块链接受。这个条件特别苛刻,使得绝大部分哈希都不满足要求,必须重算。
原来,区块头包含一个难度系数(difficulty),这个值决定了计算哈希的难度。举例来说,第100000个区块的难度系数是 14484.16236122。
区块链协议规定,使用一个常量除以难度系数,可以得到目标值(target)。显然,难度系数越大,目标值就越小。
哈希的有效性跟目标值密切相关,只有小于目标值的哈希才是有效的,否则哈希无效,必须重算。由于目标值非常小,哈希小于该值的机会极其渺茫,可能计算10亿次,才算中一次。这就是采矿如此之慢的根本原因。
前面说过,当前区块的哈希由区块头唯一决定。如果要对同一个区块反复计算哈希,就意味着,区块头必须不停地变化,否则不可能算出不一样的哈希。区块头里面所有的特征值都是固定的,为了让区块头产生变化,中本聪故意增加了一个随机项,叫做 Nonce。
Nonce是一个随机值,矿工的作用其实就是猜出 Nonce的值,使得区块头的哈希可以小于目标值,从而能够写入区块链。Nonce是非常难猜的,目前只能通过穷举法一个个试错。根据协议,Nonce是一个32位的二进制值,即最大可以到21.47亿。第 100000个区块的 Nonce值是274148111,可以理解成,矿工从0开始,一直计算了 2.74亿次,才得到了一个有效的 Nonce值,使得算出的哈希能够满足条件。
运气好的话,也许一会就找到了 Nonce。运气不好的话,可能算完了21.47亿次,都没有发现 Nonce,即当前区块体不可能算出满足条件的哈希。这时,协议允许矿工改变区块体,开始新的计算。
七、难度系数的动态调节
正如上一节所说,采矿具有随机性,没法保证正好十分钟产出一个区块,有时一分钟就算出来了,有时几个小时可能也没结果。总体来看,随着硬件设备的提升,以及矿机的数量增长,计算速度一定会越来越快。
为了将产出速率恒定在十分钟,中本聪还设计了难度系数的动态调节机制。他规定,难度系数每两周(2016个区块)调整一次。如果这两周里面,区块的平均生成速度是9分钟,就意味着比法定速度快了10%,因此接下来的难度系数就要调高10%;如果平均生成速度是11分钟,就意味着比法定速度慢了10%,因此接下来的难度系数就要调低10%。
难度系数越调越高(目标值越来越小),导致了采矿越来越难。
八、区块链的分叉
即使区块链是可靠的,现在还有一个问题没有解决:如果两个人同时向区块链写入数据,也就是说,同时有两个区块加入,因为它们都连着前一个区块,就形成了分叉。这时应该采纳哪一个区块呢?
现在的规则是,新节点总是采用最长的那条区块链。如果区块链有分叉,将看哪个分支在分叉点后面,先达到6个新区块(称为六次确认)。按照10分钟一个区块计算,一小时就可以确认。
由于新区块的生成速度由计算能力决定,所以这条规则就是说,拥有大多数计算能力的那条分支,就是正宗的区块链。
九、总结
区块链作为无人管理的分布式数据库,从2009年开始已经运行了8年,没有出现大的问题。这证明它是可行的。
但是,为了保证数据的可靠性,区块链也有自己的代价。一是效率,数据写入区块链,最少要等待十分钟,所有节点都同步数据,则需要更多的时间;二是能耗,区块的生成需要矿工进行无数无意义的计算,这是非常耗费能源的。
因此,区块链的适用场景,其实非常有限。
不存在所有成员都信任的管理当局
写入的数据不要求实时使用
挖矿的收益能够弥补本身的成本
如果无法满足上述的条件,那么传统的数据库是更好的解决方案。
目前,区块链最大的应用场景(可能也是唯一的应用场景),就是以比特币为代表的加密货币。
本文来自用户投稿,不代表币大牛资讯立场,如若转载,请注明出处:https://www.98xmw.com/zhis/13330.html
发表回复
评论列表(0条)