找回密码
 立即注册

新浪微博登陆

只需一步, 快速开始

查看: 1867|回复: 4

透明锻造是什么

942

主题

1096

帖子

4670

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4670
nxt 发表于 2015-2-25 09:18:29 | 显示全部楼层 |阅读模式

Nxt最核心的创新不是去中心化资产交易,不是别名系统,不是任意消息,也不是多重网关,而是透明锻造(Transparent Forging)。

透明锻造的基本规则包含在下面这段代码中:

  1. Account account = unlockedAccountEntry.getKey();
  2. User user = unlockedAccountEntry.getValue();
  3. Block lastBlock = Block.getLastBlock();
  4. if ( lastBlocks.get(account) != lastBlock )
  5. {
  6. byte[] generationSignature = Crypto.sign(lastBlock.generationSignature, user.secretPhrase);
  7. byte[] generationSignatureHash = MessageDigest.getInstance(“SHA-256″).digest(generationSignature);
  8. BigInteger hit = new BigInteger(1, new byte[] {generationSignatureHash[7], generationSignatureHash[6], generationSignatureHash[5], generationSignatureHash[4], generationSignatureHash[3], generationSignatureHash[2], generationSignatureHash[1], generationSignatureHash[0]});
  9. lastBlocks.put(account, lastBlock);
  10. hits.put(account, hit); // jl777: hit now contains a deterministic but pseudo-random number
  11. JSONObject response = new JSONObject();
  12. response.put(“response”, “setBlockGenerationDeadline”);
  13. response.put(“deadline”, hit.divide(BigInteger.valueOf(Block.getBaseTarget()).multiply(BigInteger.valueOf(account.getEffectiveBalance()))).longValue() – (getEpochTime(System.currentTimeMillis()) – lastBlock.timestamp));//bitcrab: here the deadline is calculated by hit/(BaseTarget*balance)-elapsedTime
  14. user.send(response);
  15. }
  16. int elapsedTime = getEpochTime(System.currentTimeMillis()) – lastBlock.timestamp;
  17. if ( elapsedTime > 0 )
  18. {
  19. BigInteger target = BigInteger.valueOf(Block.getBaseTarget()).multiply(BigInteger.valueOf(account.getEffectiveBalance())).multiply(BigInteger.valueOf(elapsedTime)); // jl777: chance proportional to effective balance
  20. if ( hits.get(account).compareTo(target) < 0 ) { // jl777: as time elapses the target gets larger, eventually triggering the acct closest to target.
  21. account.generateBlock(user.secretPhrase);
  22. }
复制代码


NXT使用了账户余额(balance),而非输入/输出来处理账户。它同样使用了区块结构来记录交易,但交易的验证机制与比特币完全不同。

每一个区块都有一个generationSignature参数,它是由产生这个区块的用户用自己的私钥对前一个区块的generationSignature签名产生的。

一个激活的NXT节点会不断地检测网络中有无新的有效区块产生,当检测到有新的有效区块产生时,它就对该区块的generationSignature参数进行私钥签名,之后计算这个签名的SHA256哈希,该64字节哈希的前8个字节被取出并写入一个叫hit的变量中,这个hit是对区块产生有决定作用的一个伪随机数。

之后节点会根据hit/(BaseTarget*balance)-elapsedTime计算出自己产生下一个区块的时间(期望时间)并向全网广播。

每个激活的账号都对应一个不断变化的target变量,该变量是表示该账号产生区块机会大小的一个指标,target与账号有效NXT余额成正比,并且与消逝时间(当前时间-前有效区块的时间戳)成正比。而BaseTarget是当余额为1消逝时间为60秒条件下的target。

除非有新区块产生,不然target随时间增大,节点会不断比较hit与target,当hit<target时,产生新区块。

容易理解,节点检验一个新区块是否有效,要检验该区块的generationSignature参数是否确实是产生区块的节点对前一个有效区块generationSignature参数的私钥签名,还要检验新区块的时间戳是否与产生区块的节点之前发布的期望时间吻合,以及期望时间是否按正确的公式计算。

每次客户端检测到网络中有有效区块产生,都会重新计算自己的期望时间并向全网发布,所以,只有期望时间离现在非常近时,客户端才有机会真正产生区块。

所以,节点间竞争以获取产生新区块的机会,这种机会总体来讲与节点的NXT有效余额成正比,但hit的引入使得每次产生区块的机会分配有了一定的随机性,也即NXT有效余额较小的节点也有机会产生新区块。验证机制中时间因素的加入大大限制了恶意节点操纵网络的自由度。

由于下个区块何时由谁产生是可以近似精确地预测的,所以交易可以直接发送给产生下个区块的用户,这大大降低了网络带宽需求并使NXT的交易处理能力达到接近VISA/Mastercard的水平。

由于能够预测哪个个账号锻造出下一个区块以及什么时候锻造出来。拥有许多账户且拥有大算力的人可以计算出哪个账户最有可能锻造出下一个区块,然后将所有的NXT转移到那个账号里去锻造区块。这对于系统安全构成了一种威胁,所以NXT添加了“成熟”机制,即转入一个账户的NXT需要经过1440个确认(通常需要一天时间)后才能成熟转为有效余额并参与锻造,这种设计不讨人喜欢,但有效减少了NXT受攻击的可能。

透明锻造可以临时性地将产生下个区块的节点的锻造能力减少至0。这个特性设计用于阻止拥有90%Nxt数目的节点进行分支或者分叉。因此,如果一个节点拥有90%的NXT而未按照计划产生区块,其它节点就会临时将其锻造能力减少到0以阻止可能的分叉。它的锻造能力就会分配给网络中剩余的节点,因此网络的能力还是100%,所以,不管该潜在的对手它在其它分支上做什么,都会被高级的共识机制(还未披露)所限制。

关于DDoS攻击问题,可以参考CFB的回复:https://nxtforum.org/transparent ... ar/msg6610/#msg6610

1. 交易使用UDP发送,不易被DDoS攻击,易于保护。

2.一个锻造工被允许最多发布127个接受节点。 (https://bitbucket.org/JeanLucPic ... feature%2Ftf#cl-319).

3. 可以使用DDoS防护服务。 (http://www.net-security.org/secworld.php?id=13446).

为了避免无谓的资源浪费,NXT系统中设置了每525949个区块(一年)的“收缩”周期,也即每次“收缩”之后节点只需关注收缩点之后的区块。

在三个多月的运行中,NXT已经初步经受住了考验,并在安全,效率和新特性方面都表现卓越,可以说,比特币照亮了人类金融变革的道路,而NXT必将在这条道路上走得更远,也更加夺目。

参考:

NXT白皮书:
中文:http://nxtchina.org/forum.php?mod=viewthread&tid=486&extra=page%3D1
英文:http://wiki.nxtcrypto.org/wiki/Whitepaper:Nxt
NXT源代码:https://bitbucket.org/JeanLucPic ... java/nxt/?at=master
BCNext:[ANN] Nxt :: descendant of Bitcoin https://bitcointalk.org/index.php?topic=303898.0 mthcl: the math of NXT forging

Transparent forging研究文章:http://nxtchina.org/forum.php?mod=viewthread&tid=386&extra=page%3D1


Total number of coins in Nxt is exactly 0.
In the very beginning,BCNext created coins and anti-coins out of the void just like vacuum creates particles and anti-particles.
In the very end,all coins will come back to genesis account and annihilate with their opposites...

NxtChina.org | 微博 | 关于我们
小王红粉宝宝 该用户已被删除
小王红粉宝宝 发表于 2018-4-11 00:44:44 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小王红粉宝宝 该用户已被删除
小王红粉宝宝 发表于 2018-7-13 00:57:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小王红粉宝宝 该用户已被删除
小王红粉宝宝 发表于 2018-7-28 00:29:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

快速回复 返回顶部 返回列表