开源地址:https://github.com/apolonsoft/ethereum-event-explorer
How to run
python3 -m venv venv
. venv/bin/activate
pip install -r requirements.txt
python3 event_listener.py
开源地址:https://github.com/apolonsoft/ethereum-event-explorer
python3 -m venv venv
. venv/bin/activate
pip install -r requirements.txt
python3 event_listener.py
关于
令牌Multisender Dapp智能合约。空投令牌。批量发送ERC20,ETH,以太坊令牌。在几笔交易中发送数千笔转帐。与一一发送相比,它可以帮助用户节省更多的发送费用和时间
演示:https://multisender.app/
开源:https://github.com/rstormsf/multisender
为了实现已以太坊为资金链,另一个高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/