区块链简介
区块链服务于虚拟货币,区块链技术用个体自己算哈希数来进行货币发行,通过加密技术支持帐户交易,通过分布式通信进行全节点账本同步,提供架构来支持钱包等高级功能。它的出现再次证明计算机和互联网是强大工具,实体世界里的行业模型可以很好地在计算机世界里体现。
锐英源研究过区块链平台多个源代码版本,各个版本都进行了定制开发,客户满意,平台可靠稳定运行。这里分享2个方面的知识点:编译和参数。
区块链源代码编译
区块链是开源的,一般也是用开源的操作系统,现在经常用人的本质来当区块链的运行平台。在人的本质下正常的编译步骤如下:
sudo apt-get更新
sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils
sudo apt-get安装libboost-all-dev
sudo apt-get安装饭桶
sudo添加-apt-仓库PPA :比特币/比特币
sudo apt-get更新
sudo apt-get安装程序。/autogen.sh。/配置
制造在ubuntu12下,这些步骤没问题。但是到ubuntu14下,在处理libdb4.8行时,会提示找不到libdb,这时候不要慌,把libdb4.8去掉,变成如下行就可以:
sudo apt-get安装libdb4.8 -dev安装源在识别时,不能用libdb4.8-dev来找到包,但是用后者就可以,后者也包含libdb4.8-dev,安装后也可以编译出来区块链的可执行文件。这事件的原因就是开源的不全面性造成的,开源世界里遇到变化是常事。
另外要注意操作系统平台的32位或64位情况,一般是用64位平台操作系统才可以运行。
参数
Configuring a blockchain
在通过运行多链实用程序创建[链名]创建链之后,在通过运行多链[链名]启动链之前,配置区块链的参数。
在params.dat文件中为每个区块链设置参数,可以在任何文本编辑器中修改这些参数。一旦区块链初始化,这些参数就不能更改。为了防止意外修改,当链开始运行时,参数的散列被添加到params.dat中。多链实用程序创建[链名]创建区块链后,参数会配置上。
当新节点尝试连接到现有区块链时,它们首先从现有节点下载一组最小的区块链参数,并将其写入相应目录中的params.dat文件。一旦获得连接许可,他们就可以下载全套区块链参数。新节点想连接存在的区块链,必须先下载已创建区块链节点机器好的区块链参数。
可以使用getblockchainparams API调用来检索区块链的参数getblockchainparams。命令可以查看参数。
Full list of blockchain parameters
下面是params.dat文件中参数的完整列表,按节分组。
Basic chain parameters
参数
描述
例子
对多链区块链使用多链,或对没有权限、本地资产或流的比特币风格的区块链使用比特币。
多链
链式描述
向用户显示的区块链的文本描述。
内部链
根流名称
常规数据存储的根流的名称(留空表示无)。
根
根流打开
允许任何具有发送权限的人写入根流。
真实的
链是测试网
在各种JSON-RPC API调用的输出中是否将测试网设置为没错。这是为了与比特币核心兼容,不影响任何其他类似测试网的行为。
错误的
块之间的目标平均秒数,即确认交易的延迟。如果低于10秒,建议将采矿周转率设置为低,以最大限度地减少分叉数量。
60(一分钟)
最大块大小
1000000 (1MB)
Global permissions
参数
描述
例子
任何人都可以连接
对连接到网络不施加任何限制,即节点不需要连接权限。
错误的
任何人都可以发送
对发送交易不加限制,即签署交易输入。
错误的
任何人都可以接收
不限制接收交易,即出现在交易输出中。
错误的
任何人都能收到空的
对不包含本地货币、资产或其他元数据的交易输出中出现的地址不加限制。仅当任何人都可以接收=假时相关。这允许没有接收许可的地址在非资产事务中包含更改输出,例如发布到流。
真实的
任何人都可以创造
对创建新流没有任何限制。
错误的
任何人都可以发行
不限制发行(创建)新的本地资产。
错误的
任何人都可以-我的
对开采区块链不施加任何限制,即确认交易。
错误的
任何人都可以激活
对更改其他用户的连接、发送和接收权限没有任何限制。
错误的
任何人都可以管理
不限制更改其他用户的所有权限。
错误的
支持-挖掘-预检查
通过缓存管理员在设置管理或我的权限时花费的输入,支持高级矿工权限检查请参见权限管理了解更多信息。
真实的
允许-p2sh-输出
允许支付给脚本哈希输出,其中只有当输出被花费时才显示赎回脚本。有关权限和P2SH地址的更多信息,请参见权限管理。
真实的
允许多信号输出
允许多重签名输出,其中在事务输出中明确列出了多个地址,并且为了使用该输出,需要给定数量的这些地址签名。有关权限和多重签名输出的更多信息,请参见权限管理。
真实的
Consensus requirements
参数
描述
例子
设置-第一个-块
以块为单位的初始设置阶段的长度。在设置阶段,本节中其他参数指定的约束不适用。块里初始设置阶段的长度。在设置阶段,其它参数不生效。
1440
矿业公司
参与循环开采以获得有效区块链所需的许可采矿者的最小比例,介于0.0(无约束)和1.0之间(每个许可采矿者都必须参与)。与采矿周转率不同,这是一个决定区块链是否有效的硬性规则。许可矿工最小比例,在循环挖矿来提出一个有效区块链参与时需要
0.5
管理-共识-管理
必须同意修改地址管理权限的许可管理员的比例,介于0(不需要共识)和1(每个管理员都必须同意)之间。
0.5
管理-共识-激活
必须同意修改地址激活权限的允许管理员的比例,介于0和一之间。
0.5
管理-共识-我的
必须同意修改地址挖掘权限的许可管理员的比例,介于0和一之间。
0.5
管理-共识-创建
必须同意修改地址的流创建权限的许可管理员比例,介于0和一之间。
0.0
管理-共识-问题
必须同意修改地址的资产发放权限的许可管理员的比例,介于0和一之间。
0.0
Defaults for mining runtime parameters
锁定管理地雷轮次
忽略经过这许多(整数)轮挖掘后逆转管理或挖掘权限更改的分叉。一轮采矿被定义为采矿人数乘以允许的矿工人数,向上取整。这可以防止区块链治理模型中的更改被逆转,并且可以被每个节点使用lockadminminerounds运行时参数覆盖。
10
挖掘需要对等体
一个节点只有连接到至少一个其他节点时才会挖掘。在设置阶段或者如果只有一个地址具有我的权限,这将被忽略,并且可以由每个节点使用挖掘要求者运行时参数来覆盖。
真实的
地雷空弹
如果没有新的事务,在这许多轮空块之后停止挖掘。一轮采矿被定义为采矿人数乘以允许的矿工人数,向上取整。这减少了区块链在低活动时段的磁盘使用量。如果为负,则无限期地继续挖掘。这在设置阶段或如果目标-调整-频率0时被忽略,并且可以由每个节点使用mineemptyrounds运行时参数来覆盖。
2.5
采矿营业额
如果值为0.0,则倾向于在自动发现的允许挖掘者子集之间进行纯循环挖掘,只有当某个挖掘者失败时,其他挖掘者才会介入。在这种情况下,有效矿工人数将是采矿者人数乘以允许矿工人数,四舍五入。值1.0表示在所有允许的挖掘者之间进行纯粹的随机挖掘。中间值设置了这两种行为之间的平衡。较低的值会减少分叉的数量,使区块链更有效,但会提高采矿集中度。与矿业公司不同,这是一个建议规则,而不是一致规则,可以由每个节点使用采矿翻转运行时参数覆盖。
0.5
Native blockchain currency
在创建区块链时,一个根本问题是它是否应该使用一种原生货币(相当于作为资产的比特币)。默认情况下,多链区块链不使用本国货币。但是,您可能希望改变这种情况,以创建一个交易市场,交易通过附加本币交易费来竞标区块,矿工将获得这些费用以及区块奖励。
参数
描述
例子
初始块奖励
奖励给每个区块的矿工的原始货币单位数,以原始整数单位表示。
0
第一轮奖励
仅对第一个区块使用不同的采矿奖励,以原始整数为单位。如果为负,则忽略。
-1
奖励减半间隔
每经过这么多块,每块矿工奖励减半。
52560000
奖励可消费延迟
矿工获得区块奖励后,该奖励可以使用的区块数。
一
最小单位产量
每笔交易输出中的最小原币数量,以原始整数单位表示。
0
最大单位产量
每笔交易输出中的最大本币数量,以原始整数单位表示。
0
最低中继费
传递交易所需的最低本币费用,以原始整数为单位。这可以被minrelaytxfee运行时参数覆盖。
0
本地货币倍数
JSON-RPC API中使用的本地货币的每个显示单位有多少个原始整数单位。例如,在比特币网络中,这将是每个比特币的中本聪数量。
100000000
Advanced mining parameters
参数
描述
例子
跳过功率检查
跳过检查块哈希是否证明了足够的工作证明。
错误的
功率最小位
最小/初始工作验证难度,即块哈希中前导零的位数。
20
目标-调整-频率
重新计算工作证明难度级别的频率,以秒为单位。对于不需要工作证明的区块链,请使用负值以防止重新计算。
86400 (1天)
允许最小难度块
如果方块出现的时间太长,忽略当前的目标难度。
错误的
Transaction limits
参数
描述
例子
仅接受标准事务
根据以下标准,仅接受和转递符合\"标准\"的交易。
真实的
最大标准发送尺寸
标准事务的最大大小,以字节为单位。
10万英镑
最大标准工序退货数量
标准事务中OP _返回输出的最大数量(用于一般数据)。
10
最大标准操作返回尺寸
标准事务中OP _返回元数据输出的最大大小,以字节为单位。
4096 (4K)
最大标准操作丢弃数
标准事务中单个输出中内联OP_DROP元数据元素的最大数量。
5
最大标准元素大小
标准事务中数据元素的最大大小,以字节为单位。
600
Advanced parameters
默认网络端口
用于节点间对等通信的默认互联网协议(Internet Protocol)端口(可由每个节点使用端口运行时间参数覆盖)。
8571
默认(同radarplanningchart)雷达规划表端口
用于对多链的远程过程调用调用的默认互联网协议(Internet Protocol)端口(可以由每个节点使用rpcport运行时参数覆盖)。
8570
链名
区块链名称,一般通过调用多链效用来设置。
链一
协议版本
使用的链协议协议的版本。这可用于向后兼容旧版本的多链参见创建新的区块链。
10007
网络-消息-开始
在每个对等协议消息开始时发送的四字节\"幻值\"。
fddcc6f1
地址-公钥哈希-版本
地址脚本哈希版本
私钥版本
地址校验和值
这些控制常规地址、付费脚本哈希(multisig)地址和导出的私钥的格式。有关更多信息,请参见地址和密钥格式。
下面的
Production recommendations
是参数列表,其值对于多链1.0的长期生产部署至关重要。(我们希望正在开发的多链2.0能够在运行的区块链中根据管理员的一致意见更改许多参数。)
目标闭塞时间
考虑您的验证器节点将在地理上部署在哪里,以及这些位置之间的延迟。确保该值足够长,以便在峰值预期吞吐量下,在这些节点之间保持一致。使用生产前测试来确定安全值,然后增加50-100%的误差幅度。此参数应与最大数据块大小一起测试,因为较大的数据块需要更长的传播时间。
最大块大小
确保这对于预期的未来增长来说足够大。使用生产前测试来确定给定工作负载的数据块大小。还要注意,对于任何给定的事务吞吐量,目标块时间的增加需要最大块大小的相应成比例增加。
任何人都可以-我的
设置为假的,除非您确定要使用工作证明挖掘,在这种情况下,请确保目标-调整-频率为正数。
任何人都可以管理
设置为假的,除非您确定希望连接到区块链的任何用户能够执行管理操作,这种情况非常罕见。
支持-挖掘-预检查
如果您的区块链对公众开放,或者任何参与者都有动机对网络进行拒绝服务攻击,则设置为没错。(矿工预检查由多链1.0 beta 2或更高版本执行。)
矿业公司
确保该值高于0.5,以防止长期运行的网络分裂导致两个区块链分叉,这两个分叉都可以长期持续增长。
管理-共识-管理
管理-共识-我的
为了防止管理员之间将来发生冲突而导致分叉,请将这些值设置为0.5以上。这意味着,对于链条的任何治理变更,总会有一个明显的多数。
目标-调整-频率
设置为-1,除非您希望在区块链中使用工作证明挖掘,否则随着时间的推移,块创建会变得很困难并且会占用大量中央处理器资源。没有理由在一个由矿业公司管理的特许矿工链中使用工作证明。
最大标准操作返回尺寸
确保这足以容纳您将在区块链中嵌入的最大数据块(但请注意64兆字节的硬限制)。最大标准发送尺寸和最大块大小都应该至少比这个值大几百个字节。
协议版本
设置为10008或更高(假设您的链协议是多链),以便您的区块链在多链的未来版本中支持升级到新协议。