开源地址
https://github.com/vittominacori/watch-token
https://github.com/vittominacori/erc20-generator
演示地址
https://vittominacori.github.io/watch-token/create/
https://vittominacori.github.io/erc20-generator/create-token/
为了实现已以太坊为资金链,另一个高TPS的链做应用链,之前已经计划做EOS2.0链的深度定制,以满足eth地址体系。由于为了尽快接入Eth生态,所以最近基于Eth做了共识方面定制,修改为DPOS共识。
目前一期先已以太坊侧链做应用链,后期根据生态需要,计划会继续之前的基于EOS做侧链,由于生态,账户体系,资源模型问题,暂时延后,后面考虑再做一层转换。
目前的侧链百花齐放,但侧链与以太坊之前的代币划转,都是通过中心化服务,保存eth公链与侧链两个锁定地址的私钥,然后进行双向转账的。这样由于私钥保存以及项目方等问题就影响了资金池的安全。
Eth公链部署一个IBC合约A,此合约地址接收用户跨链转账。
此IBC合约中维护着当前Eth侧链的21个正在出块BP地址,如果Eth侧链BP地址有变更,及时会更新此合约。
Eth侧链也部署着另一个IBC合约B。
Eth侧链21个正在出块的BP节点监测Eth公链上此IBC合约A的转入交易,当交易不可逆时,提交此交易并投票到Eth侧链IBC合约B中,当此交易投票达到 2/3+1 时,此交易达到执行条件,会从当前侧链IBC合约地址B中转出相应的代币到Eth侧链用户同样的账户地址中。
用户在Eth侧链中将对应的代币转到Eth侧链IBC合约B中,Eth侧链各BP节点监测此交易到达不可逆时,分别向Eth公链IBC合约A中发起转账请求,当达到2/3+1 时,此交易达到执行条件,会从当前Eth公链IBC合约A中转出相应的代币到Eth公链用户同样的账户地址中。
对于eth公链和侧链的两个账户接收地址,都是需要侧链当前出块BP总数的2/3+1授权才能转移资金的,所以实现了去中心化,保证了资金池的安全
伊斯坦布尔拜占庭容错(IBFT)共识是受Castro-Liskov 99论文启发的。
了iBFT通过使用3相一致,从原来PBFT继承PRE-PREPARE,PREPARE和COMMIT。系统最多可以容忍验证器网络中的F故障节点N,其中N = 3F + 1。
《伊斯坦布尔BFT共识协议》从回合开始,0验证者以循环方式从他们自己选择提议者。然后,提议者将提出一个新的整体提议,并将其与PRE-PREPARE消息一起广播。在收到PRE-PREPARE来自提议者的消息后,其他验证者将验证传入的提议并输入消息的状态PRE-PREPARED并广播PREPARE消息。此步骤是确保所有验证程序都在相同的序列和同一轮上工作。当验证器从其他验证器接收到ceil(2N/3)ofPREPARE消息时,验证器将切换到的状态PREPARED并进行广播COMMIT信息。此步骤是要通知其他验证者它接受建议的块,并将该块插入到链中。最后,验证等待ceil(2N/3)的COMMIT消息进入COMMITTED状态,再追加块链。
Istanbul BFT协议中的块是最终的,这意味着没有分叉,并且任何有效块都必须位于主链中的某个位置。为了防止故障节点生成与主链完全不同的链,每个验证器都会在将ceil(2N/3)接收到的COMMIT签名extraData插入到链中之前,将接收到的签名附加到标头中的字段。因此,所有块都是可自我验证的。但是,动态extraData会导致块哈希计算出现问题。由于来自不同验证器的同一块可以具有不同的COMMIT签名集,因此同一块也可以具有不同的块哈希。为了解决这个问题,我们通过排除COMMIT签名部分来计算块哈希。因此,我们仍然可以保持块/块哈希的一致性,并在块头中放入共识证明。
Istanbul BFT是一种状态机复制算法。每个验证器维护一个状态机副本,以便达成块共识。IBFT共识中的各个州是,
目前,我们支持两种政策:轮循和粘性提议者。
Istanbul BFT使用与Clique类似的验证者投票机制,并从Clique EIP复制大部分内容。每个时代的交易都会重置验证者投票,这意味着将添加或删除验证者的所有待处理投票都将重置。
对于所有交易块:
在异步网络环境中,可能会收到将来无法在当前状态下处理的消息。例如,验证程序可以COMMIT在上接收消息NEW ROUND。我们称这种消息为“未来消息”。当验证器收到将来的消息时,它将把消息放入待办事项中,并尝试在以后尽可能的处理。
Istanbul BFT定义以下常量
Istanbul BFT不会添加新的块标题字段。相反,它遵循Clique重新使用ethash标头字段的方式,如下所示:
nonce:有关受益人字段定义的帐户的提案人提案。
mixHash:固定0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365用于识别伊斯坦布尔街区的魔幻数字。
ommersHash:必须如此,UNCLE_HASH因为叔叔在PoW之外毫无意义。
timestamp:必须至少是父时间戳+ BLOCK_PERIOD
difficulty:必须填充0x0000000000000001。
extraData:签名人虚荣和RLP编码的Istanbul额外数据的组合字段,其中Istanbul额外数据包含验证者列表,提议者印章和提交印章。伊斯坦布尔的额外数据定义如下:
type IstanbulExtra struct {
Validators []common.Address //Validator addresses
Seal []byte //Proposer seal 65 bytes
CommittedSeal [][]byte //Committed seal, 65 * len(Validators) bytes
}
因此,extraData形式为EXTRA_VANITY | ISTANBUL_EXTRAwhere|代表固定索引,以分隔虚荣和伊斯坦布尔额外数据(不是分隔符的实际字符)。
前EXTRA_VANITY字节(固定)可以包含任意提议者虚荣数据。
ISTANBUL_EXTRA字节是根据所计算的RLP编码的Istanbul额外数据RLP(IstanbulExtra),其中RLP()RLP编码函数IstanbulExtra是Istanbul的额外数据。
散列哈希,提议者印章和承诺印章
ethash由于以下原因,Istanbul区块哈希计算与区块哈希计算有所不同:
ethash除了需要处理之外,该计算仍然类似于块哈希计算extraData。我们计算字段如下:
到提议者印章计算时,提交的印章仍然是未知的,因此我们计算出那些未知数为空的印章。计算如下:
在计算块哈希时,我们需要排除提交的密封,因为该数据在不同的验证器之间是动态的。因此,我们CommittedSeal在计算哈希值时会创建一个空数组。计算公式为:
在将区块插入区块链之前,每个验证者都需要ceil(2N/3)从其他验证者那里收集已提交的印章,以构成共识证明。一旦接收到足够的承诺密封,这将填补CommittedSeal中IstanbulExtra,重新计算extraData,然后再插入块成blockchain。请注意,由于提交的密封可能因不同的来源而有所不同,因此如上一节所述,我们在计算块哈希值时会排除该部分。
承诺印章计算:
提交的印章是由每个验证者对哈希值COMMIT_MSG_CODE及其私钥的消息代码签名而计算的。计算如下:
GoQuorum中的Istanbul BFT实施基于EIP 650。自从打开EIP以来,它已进行了更新,以通过引入锁定来解决安全问题。
原文:https://docs.goquorum.consensys.net/en/stable/Concepts/Consensus/IBFT/
开源地址:https://github.com/poanetwork/blockscout
BlockScout是一个Elixir应用程序,允许用户搜索交易,查看帐户和余额,并验证整个以太坊网络上的智能合约,包括所有的叉子和侧链。
目前可用的块探测器(即Etherscan和Etherchain)是封闭系统,不能独立验证。随着以太坊侧链在私人和公共场合的不断扩散,需要透明的工具来分析和验证交易。
开源地址:https://github.com/EthVM/EthVM
EthVM是一个开源的区块链浏览器,主要关注以太坊(虽然其他网络将受到支持)在MIT许可下,并以不同语言(即TypeScript,Kotlin和Solidity)的混合编写。
您可以使用EthVM作为工具来探索自定义专用网络或现有公用网络,或者作为ETL(提取,转换,加载)平台来对数据执行不同的分析。
开源地址:https://github.com/etherparty/explorer
轻盈的以太坊块探险家
开源地址:https://github.com/carsenk/explorer
以太坊Block Explorer基于etherparty/explorer
开源地址:https://github.com/gobitfly/etherchain-light
Etherchain Light是一个使用NodeJS,Express和Parity构建的以太坊区块链资源管理器。它不需要外部数据库,并从后端以太坊节点即时检索所有信息。
开源地址:https://github.com/curvegrid/toy-block-explorer
用Go编写的区块链资源管理器,用于了解如何构建与以太坊区块链一起使用的服务器端应用程序。
开源地址:https://github.com/ismaelbej/mini-eth-browser
一个简单的以太坊块和事务探索器。由于它不使用数据库,因此某些操作很慢。
开源地址:https://github.com/ethnamed/eth-explorer
简单的Nodejs以太坊资源管理器
开源地址:https://github.com/Magicking/Clixplorer
开源地址:https://github.com/ethereumproject/explorer
https://github.com/bing-chou/etherscan-explorer