百独托管7500 紫田网络超高转化播放器收cps[推荐]速盾CDN 免实名免备防屏蔽阿里云 爆款特卖9.9元封顶提升alexa、IP流量7Q5团队
【腾讯云】中小企福利专场【腾讯云】多款产品1折起高防 随时退换 好耶数据小飞国外网赚带你月入万元炎黄网络4H4G10M 99每月
香港带宽CN2/美国站群优惠中客数据中心 服务器租用联盟系统移动广告平台 中易企业专场腾讯云服务器2.5折九九数据 工信部正规资质
腾讯云新用户大礼包代金券高价收cpa注册量高价展示【腾讯云】2核2G/9.93起租服务器找45互联 随时退换阿里云 短信服务 验证秒达

[国内信息] 36.248.209.1比特币知识(5)高防——区块链棋牌服务器基础 [复制链接]
查看:54 | 回复:1

691

主题

767

帖子

1

积分

落伍者(一心一意)

Rank: 1

贡献
996
鲜花
0
注册时间
2018-8-10

落伍手机绑定落伍微信绑定落伍者

发表于 2018-8-14 11:51:04 | |阅读模式 来自 中国广东东莞
                                                                 高防——区块链棋牌服务器基础
官网 http://www.rhidc.com.cn/
企业QQ 3004682120

在讨论比特币时候,技术上讨论最多的就是区块链。在介绍区块链之前,先从挖矿说起。

1 矿机、挖矿什么、矿池又是什么

直接的理解:矿机就是在不停的“挖矿”的机器(电脑),一堆矿机组织起来一起“挖矿”,平分一起挖到的“矿”,这堆机器就是一个矿池了。

比特币交易的数据是分布式存储记录的,在《认识比特币(2)——比特币诞生故事》文章里面提到需要找一干人来记账,挖矿本质就是记账,把一段时间内的交易打包在一起(一个区块),从而获得报酬——比特币。

2 挖矿的报酬来自哪里

作为报酬的这些比特币如何来?主要来源有两个。

1)系统生成。《认识比特币(3)——比特币上限为什么是2100万》提到,每生成一个区块就会按照约定生成一定的比特币奖励给矿工。但按照比特币“发行”约定,这个生成的比特币会越来越少的,总有一天生成的比特币会变成零。

2)交易手续费。在比特币交易中,可以拿出一点费用作为手续费,付出手续费的交易会优先被矿机记录,这样才能使得有矿机们继续工作(记账)下去——没有利益的劳动,谁会做?在比特币“发行”完毕后,矿机的主要报酬就是来自这部分了。

3 区块和区块链简说

挖矿表面就是上面那些了,本质上就是记账,把一堆账目(交易)打包在一起,就是一个区块。区块里面有很多交易条目,同时它也带有其他一些数据,比如hash、时间戳、索引号、上一块数据hash、随机数等。很多区块一个一个有机组织在一起,就是一条区块链了。



上图,左边就是一个区块的示意图(实际上还有其他数据),右边就是区块链示意。区块链内的区块是有机关联着的,除了第一个区块(创世块)外,每个区块都记录着自己的hash值和上一个区块的hash值。如上图块2的prev_hash 就是块1的hash,块3的prev_hash就是块2的hash。

4 谁来记账区块——工作量证明

如果只是把交易简单的组织在一起,是非常容易的事情,任何一个矿机都可以轻松完成。大家都可以轻松打包记录的事情,作为奖励的报酬给谁?这里就得来个“裁判”了,这里的“裁判”就是工作量证明(Proof Of Work,简称POW)——大家来算一条数学题吧,谁先算出,打包权和奖励金归谁。

每个区块里面有个记录信息摘要值 hash(简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数,下说哈希值)和随机数nonce,工作量证明就是在这个哈希值和nonce做文章了。

这道“数学题”是这样的:计算的哈希值有个这样要求,算出一个nonce,使得整个区块的哈希值前面有n个0(n称为计算难度)。哪个矿机先计算出合要求的nonce 和哈希,它就获得这次的记账权和奖励,同时把结果广播给其他矿机。

其他矿机收到有矿机计算好了的区块数据,则停止本轮争夺记账,马上进行下一轮记账权争夺。

做个比喻,如果数据为”hello china.”,而计算难度要求为3,要求算一个n,使得 “hello china.n” 的哈希值格式为:“000xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”,也就是前面三个要求为0。跑测试得:

sha256("hello china.0") = "72442cbab482ac912ab04a4d735ca13afad5d47970649fd4683775cb6080cd4f"
sha256("hello china.1") = "25d64131521b3c83d27c3cae53ef79e573bc27e3658566c25c33bffe8ba588a7"
sha256("hello china.2") = "bc79953d627fc9de365ed26018d663bafdf8c6c02e236d11816f94eecb484b0f"
……
sha256("hello china.2346") = "000b6d006b4e31d9837f446dca65ebfb7246196cb00e6ee404cf243e73eef413"
也就是nonce=2346满足了要求。如果n较大,这个求值计算量是非常庞大的。

来做个实验,模拟几个数据来创建几个区块,假定三条数据分别是:”zhang san send 10$ to lisi.”、”lisi send 0.01$ to wangwu.”、”wangwu send 100$ to zhaoliu.”。尝试从第一块区块(创世块)开始,创建三个区块,把他们连起来组成一个简单的区块链,第一个区块难度n为3,后面每个区块难度+1。实验打印下数据和运算时间,实验结果如下(代码文章在后面):



做一个假设:难度为1称为P1,难度为2称为P2……难度为n称为Pn。

上图可知,P3的运算时间(use time)约4.27毫秒,P4的时间约200毫秒,P5的时间约为7026毫秒。可见难度每增加1,计算量会增加一个数量级。哈希值是16进制格式输出(0-f),可以理解计算的某位哈希值是随机的,每位随机就有16种可能了,也就是说难度每增加1,计算量大约会放大16倍。粗略估算P6的计算时间约 7 * 16 = 112 (秒)了。

看一个真实的区块 #494016,其哈希值为:00000000000000000092df3f0a9ca450140ce64f6d196b06767fb89ae543df0d,前面18个0,难度是P18。简单运算下,P18运算量 是P6的运算量的16^12(281474976710656)倍,也就是112秒的281474976710656倍(这是多少年了)。

肯定不能112秒的281474976710656倍时间 来记录一个区块,这里是粗略说“单台机器的112秒的281474976710656倍工作量”。全世界矿机有多少具体不得知道,这些工作量会分摊到全世界矿机去,比特币系统会控制难度,使得大概每10分钟就有一个区块产生。由于有新矿机加入计算也有退出计算,机器硬件和运算速度也在发展,所以矿机们的总算力是在变化的。如果产出区块过快了,系统会控制难度增加,如果产出区块过慢了,难度会减小,使得产出区块在时间上是大约平均的。

矿机算这道数学题如此费力,争夺算出这道题,就是它的工作量证明。矿机耗电耗资源,原因就是耗在这些看似无用的(实质上也没有很大作用)蛮力计算上了。

5 协作挖坑——矿池的出现

矿机算力有强有弱,如果硬件太弱的机器去和强的机器争夺计算,几乎是拼不过的。再如上面估算,单台计算机计算难度为18的区块哈希,时间可能是112秒的281474976710656倍,这是多少年?这样,普通人几乎没有玩(参与挖矿)的可能。但是如果组织100个或者1000个或者10000个矿机在一起合作计算,得到报酬平分,这样就能大大降低了参与挖坑的门槛。这些组织在一起挖矿的机器群,就是一个矿池了。 矿池出现的原因——算力需求太大了。

6 区块链的难修改性

区块链中有个数据——previous hash,这个节点也很重要,它确保了整条链的难修改性。比如,有人恶意修改了第一个区块的数据,那么第一个区块的hash必然变化了,由于第二个区块的previous hash节点数据保存着第一个区块的hash,也就是修改了第一个区块数据的时候,也得修改第二个区块的previous hash才能确保链的完整性,如果修改了第二个区块的previous hash,导致第二个区块的hash 又变化了,还得修改第三个区块的previous hash……如此往复。若修改了某个区块的数据就得修改这个区块之后的所有区块才能确保区块链的完整性——一动则动全身了。这样保障了区块链的不容易被破坏性。

7 实验代码

#-*- coding: UTF-8 -*-
import random
import hashlib
import time

'''
---------------------
[  index            ]
---------------------
[  previous hash    ]
---------------------
[  timestamp        ]
---------------------
[  data             ]
---------------------
[  hash             ]
---------------------
[  nonce            ]
---------------------
'''

def hash_sha256(input):
    sha256obj = hashlib.sha256()
    sha256obj.update(input)

    return sha256obj.hexdigest()


def is_valid_hash_diffculty(hash, difficulty):
    for i in range(0, difficulty):
        if hash != '0':
            return False

    return True


def calculate(index, previous_hash, timestamp, transaction, difficulty):
    hash = ""
    nonce = 0
    while True:
        data = str(index) + previous_hash + timestamp + transaction + str(nonce)
        hash = hash_sha256(data)
        if is_valid_hash_diffculty(hash, difficulty):
            return hash, nonce

        nonce += 1


def print_blockchain(index, previous_hash, timestamp, transaction, hash, nonce):
    print("index:" + str(index))
    print("previous_hash:" + previous_hash)
    print("timestamp:" + timestamp)
    print("transaction:" + transaction)
    print("hash:" + hash)
    print("nonce:" + str(nonce))


if __name__ == "__main__":

    datas = ["zhang san send 10$ to lisi.",
            "lisi send 0.01$ to wangwu.",
            "wangwu send 100$ to zhaoliu."]

    previous_hash = ""

    now = time.time()

    for index in range(0, len(datas)):
         data = datas[index]
         timestamp = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(now))
         hash, nonce = calculate(index, previous_hash, timestamp, data, 3 + index)
         print_blockchain(index, previous_hash, timestamp, data, hash, nonce)
         previous_hash = hash

         print("use time:" + str((time.time() - now) * 1000) + "ms")
         print("----------")

         now = time.time()
36.248.209.1
36.248.209.2
36.248.209.3
36.248.209.4
36.248.209.5
36.248.209.6
36.248.209.7
36.248.209.8
36.248.209.9
36.248.209.10
36.248.209.11
36.248.209.12
36.248.209.13
36.248.209.14
36.248.209.15
36.248.209.16
36.248.209.17
36.248.209.18
36.248.209.19
36.248.209.20
36.248.209.21
36.248.209.22
36.248.209.23
36.248.209.24
36.248.209.25
36.248.209.26
36.248.209.27
36.248.209.28
36.248.209.29
36.248.209.30
36.248.209.31
36.248.209.32
36.248.209.33
36.248.209.34
36.248.209.35
36.248.209.36
36.248.209.37
36.248.209.38
36.248.209.39
36.248.209.40
36.248.209.41
36.248.209.42
36.248.209.43
36.248.209.44
36.248.209.45
36.248.209.46
36.248.209.47
36.248.209.48
36.248.209.49
36.248.209.50
36.248.209.51
36.248.209.52
36.248.209.53
36.248.209.54
36.248.209.55
36.248.209.56
36.248.209.57
36.248.209.58
36.248.209.59
36.248.209.60
36.248.209.61
36.248.209.62
36.248.209.63
36.248.209.64
36.248.209.65
36.248.209.66
36.248.209.67
36.248.209.68
36.248.209.69
36.248.209.70
36.248.209.71
36.248.209.72
36.248.209.73
36.248.209.74
36.248.209.75
36.248.209.76
36.248.209.77
36.248.209.78
36.248.209.79
36.248.209.80
36.248.209.81
36.248.209.82
36.248.209.83
36.248.209.84
36.248.209.85
36.248.209.86
36.248.209.87
36.248.209.88
36.248.209.89
36.248.209.90
36.248.209.91
36.248.209.92
36.248.209.93
36.248.209.94
36.248.209.95
36.248.209.96
36.248.209.97
36.248.209.98
36.248.209.99
36.248.209.100
36.248.209.101
36.248.209.102
36.248.209.103
36.248.209.104
36.248.209.105
36.248.209.106
36.248.209.107
36.248.209.108
36.248.209.109
36.248.209.110
36.248.209.111
36.248.209.112
36.248.209.113
36.248.209.114
36.248.209.115
36.248.209.116
36.248.209.117
36.248.209.118
36.248.209.119
36.248.209.120
36.248.209.121
36.248.209.122
36.248.209.123
36.248.209.124
36.248.209.125
36.248.209.126
36.248.209.127
36.248.209.128
36.248.209.129
36.248.209.130
36.248.209.131
36.248.209.132
36.248.209.133
36.248.209.134
36.248.209.135
36.248.209.136
36.248.209.137
36.248.209.138
36.248.209.139
36.248.209.140
36.248.209.141
36.248.209.142
36.248.209.143
36.248.209.144
36.248.209.145
36.248.209.146
36.248.209.147
36.248.209.148
36.248.209.149
36.248.209.150
36.248.209.151
36.248.209.152
36.248.209.153
36.248.209.154
36.248.209.155
36.248.209.156
36.248.209.157
36.248.209.158
36.248.209.159
36.248.209.160
36.248.209.161
36.248.209.162
36.248.209.163
36.248.209.164
36.248.209.165
36.248.209.166
36.248.209.167
36.248.209.168
36.248.209.169
36.248.209.170
36.248.209.171
36.248.209.172
36.248.209.173
36.248.209.174
36.248.209.175
36.248.209.176
36.248.209.177
36.248.209.178
36.248.209.179
36.248.209.180
36.248.209.181
36.248.209.182
36.248.209.183
36.248.209.184
36.248.209.185
36.248.209.186
36.248.209.187
36.248.209.188
36.248.209.189
36.248.209.190
36.248.209.191
36.248.209.192
36.248.209.193
36.248.209.194
36.248.209.195
36.248.209.196
36.248.209.197
36.248.209.198
36.248.209.199
36.248.209.200
36.248.209.201
36.248.209.202
36.248.209.203
36.248.209.204
36.248.209.205
36.248.209.206
36.248.209.207
36.248.209.208
36.248.209.209
36.248.209.210
36.248.209.211
36.248.209.212
36.248.209.213
36.248.209.214
36.248.209.215
36.248.209.216
36.248.209.217
36.248.209.218
36.248.209.219
36.248.209.220
36.248.209.221
36.248.209.222
36.248.209.223
36.248.209.224
36.248.209.225
36.248.209.226
36.248.209.227
36.248.209.228
36.248.209.229
36.248.209.230
36.248.209.231
36.248.209.232
36.248.209.233
36.248.209.234
36.248.209.235
36.248.209.236
36.248.209.237
36.248.209.238
36.248.209.239
36.248.209.240
36.248.209.241
36.248.209.242
36.248.209.243
36.248.209.244
36.248.209.245
36.248.209.246
36.248.209.247
36.248.209.248
36.248.209.249
36.248.209.250
36.248.209.251
36.248.209.252
36.248.209.253

351

主题

5729

帖子

189

积分

落伍者(一心一意)

Rank: 1

贡献
119
鲜花
0
注册时间
2010-8-13
发表于 2018-8-14 11:59:54 | 来自 中国湖南湘潭



我不是张杰,给不了你天下。
我不是光良,给不了你童话。
我不是陈翔,给不了你烟火。
我不是鹿晗,给不了你致爱。
我不是陈奕迅,给不了你十年。
但是你来找我,我可以给你最好的
江苏泰州BGP三线高防服务器,欢迎咨询
企业QQ2880671562    咨询电话 17742522331

江苏泰州BGP高防服务器租用
泰州BGP高防  防护200G  带宽50M  IP118.184.158段
配置CPU L5630 *2   /内存32G/硬盘 300G  价格:1288
泰州BGP高防  防护120G  带宽50M  IP118.184.158段
配置CPU L5630 *2   /内存32G/硬盘 300G  价格:800
企业QQ2880671562   电话 17742522331
快乐时光
论坛客服/商务合作/投诉举报:2171544 (QQ)
落伍者创建于2001/03/14,本站内容均为会员发表,并不代表落伍立场!
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!
落伍官方微信:2030286 邮箱:(djfsys@gmail.com|tech@im286.com)
© 2001-2014

浙公网安备 33060302000191号

浙ICP备11034705号 BBS专项电子公告通信管[2010]226号

  落伍法律顾问: ITlaw-庄毅雄

手机版|找回帐号|不能发帖?|Archiver|落伍者

GMT+8, 2024-4-24 19:42 , Processed in 0.122370 second(s), 37 queries , Gzip On.

返回顶部