通过对签名算法、账本结构、数据操作、序列化、共识机制、消息扩散等关键环节的优化,FSC将以实现秒级的快速交易验证。满足绝大部分区块链应用下金融场景的用户体验。
区块链复式的记账模式,在系统不断的运用,积累了大量的数据,造成运行速度下降,FSC将会实现分离存储、分表存储机制,实现数据海量存储。
区块链的本质是一种分布式共享记账的技术,其分布式特征主要体现在分布式一致性而非分布式并发处理。为保证数据的一致性,防止拜占庭将军问题,某些特定环节只能串行执行,而无法并行。通过长期的测试与优化实践,FSC的处理性会进一步大幅提高交易吞吐量。
FSC将研发镜像机制,可以定期对本地账本制作镜像,实现便利的回滚机制,在统一共识下,可以指定镜像标签进行回滚。同时,缩短新加节点加入运转的周期,仅需同步最新镜像及少量近期交易集合,即可融入网络并参与共识验证。
FSC提供数据信息写入与读取两类权限控制策略。数据信息写入权限,同一账户下设置多个使用用户,并针对不同的操作设置相应的权限,满足多方签名控制的 使用场景。数据信息读取权限,用户可以授予和撤回单用户或用户组对数据的操 作权限,用户组可以由用户灵活配置。数据包括用户账户信息,交易信息等,粒度可以细化到交易或账户的各属性字段。
FSC的区块链结构,能够满足不同业务领域的需求,提高系统的可扩展能力和维护效率。即可用于标记资产和资产转移,也可提供不可篡改的多维事件记录,还可以用于溯源以跟踪金融资产的流通过程。
为了方便用户使用FSC产品服务,除了传统的客户端生成和保存的机制,FSC还提供网络托管存取和私钥硬件存取(U-key)两种方案。网络托管存取,即把用户名和密码通过特定算法映射成私钥并在服务端进行存储。服务器端存储的私钥均为加密数据,私钥仅能在用户端解密;硬件私钥是为了满足金融行业的使用需求。
同时,提供多重隐私保护功能。首先,FSC底层提供同态加密方式,用户所有数据均加密存储,仅用户本身可见。其次,提供加密中间件服务,用户可根据业务需要进行选择。最后,上层应用可以在录入时对数据进行加密处理,FSC负责对用户生成的加密数据进行写入和读取。
FSC将提供运维管理所需的可视化工具。FSC节点上部署的系统监控服务:支持业务(区块、交易、合约、共识等)、网络(组网、时延、吞吐量等)、系统层面(CPU、内存、磁盘等)的数据信息监控。同时,提供完备的日志、告警与通知机制,便于金融商用系统的维护。
尽管工作量证明(PoW)已被证明为实现去中心化网络的实用方案,但它对环境并不友好,而且还需要大量参与者来维护网络安全。
以太坊及一些其他网络,如 MATIC Bor、TOMOChain、GoChain、xDAI在不同的场景中使用权威证明(PoA)或其变体,包括测试网络和主网。PoA 为 51%的攻击提供了防御,更有效的防止一部分拜占庭节点作恶。 选用PoA作为底层共识是理想的选项之一。
同时,PoA 协议因不如PoW去中心化而被批评,因为验证人,即轮流生成块的节点,拥有极大的权力,并且容易产生腐败和遭受安全攻击。 其他区块链, 如 EOS, 引入了不同类型的委托权益证明(DPoS),允许代币持有者投票选举验证人节点。 它让网络更加去中心化,有利于社区管理。
受以上启发,FSC 将 DPoS 和 PoA 结合以达成共识,采用的方案为:
1. 区块是由有限数量的验证人生成的
2. 验证人轮流以 PoA 方式生成区块,类似于以太坊的Clique共识引擎
3. 验证人集合是基于权益质押的链上治理选出和淘汰
在网络启动的创世块阶段,一些受信任的节点将作为初始验证人集合运行。开始出块后,任何人都可以作为候选人参与竞选验证人,FON智能链再创世区块中对于验证器最大容忍度为99个验证人,当>99名验证人后将无法加入成为新的验证人。 权益质押状态决定前 21 个权益质押最多的节点成为下一个验证人集合,这样的选举和淘汰每 3小时进行一次。
为了保持与以太坊共识协议(包括即将到来的升级)的兼容性,FSC 选择独立的权益质押管理。 在 FSC权益质押的模块。 它将接受FON 持有者的FSC权益质押,并计算出权益质押最多节点集。 每次3小时 时,刷新出块人排名,通知 FSC 更新其验证人集合。
在生成新的区块前,现有的FSC验证人定期检查是否有“ValidatorSetUpdate”消息转发到FSC 。 如果有,它们将在一段高度后(即预定义的区块间隔)之后更新验证人集合。 例如,如果 FSC 每 5 秒生成一个区块且检查周期是 240 个区块,那么当前的验证人集合将在 1200 秒(20 分钟)内检查并更新下一周期的验证人集。
考虑到有超过一半的 ½*N+1 验证人是诚实可信的,基于 PoA 的网络通常可以安全、正常地工作。 然而在某些情况下,拜占庭验证人仍然可能设法攻击网络, 比如通过“克隆攻击”的方式。 为了保证具FSC安全性,我们鼓励FSC 用户等待到接收的区块被超过⅔*N+1 不同的验证人所确认,可以容忍少于1/3 *N 的拜占庭验证人。
对于 21 个验证人,如果区块时间为 5 秒,那么 ⅔* N + 1 个不同的验证人确认将需要(2/3*21 + 1)*5 =75秒的时间。FSC 的任何重要应用程序可能都必须等待⅔*N + 1,以确保相对安全的最终结果。
基于以上设计原则,FSC的共识协议是为了实现以下目标:
1. 出块时间应该比以太坊时间短,例如 5 秒甚至更短。
2. 只需要等待有限的时间就能最终确认交易,例如大约 1 分钟或更短。
3. 没有通货膨胀,区块链的收益来自手续费,手续费以FON的形式支付。
4. 尽可能与以太坊兼容。
5. 配备了基于权益质押的链上治理机制。
当前验证人集合中的所有 FSC 验证人都将从以FON 支付的手续费中获得收益。由于 FON 不是一个会通胀的通证,因此不会像比特币和以太坊网络那样产生挖矿收益,手续费是验证人的主要收益。 由于FON 也是其他应用的实用型通证,委托人和验证人仍将获得持有FON 的其他好处。
验证人的收益是从每个区块的交易中收取的手续费获得的。验证人获得总验证区块85%的收益,剩余的15%将进入官方财库用于奖励FON生态用户。 每个验证人将以相同的概率轮流生成区块(如果它们保持 100%在线),因此,从长远来看,所有稳定的验证人都可能获得类似规模的收益。
FSC 的可用性依赖于APoS共识中验证人集合中的每个验证人,当轮到其出块时,他们能够及时生成区块。 验证人可能由于一些原因而错过出块时机,特别是由于硬件、软件、配置或网络方面的问题。 这种不稳定运行将损害网络的性能,并给系统带来更多的不确定性。
FSC有一个内部的合约,负责记录每个验证人错过的区块。 一旦该指标超过预定义的阈值,验证人将在当前3小时不再参与出块,从而无法再获得分配的奖励,而是被其他更好的验证人共享。通过这种方式,运行不良的验证人会逐渐退出。
中继者负责在两个区块链之间提交跨链通信包。由于异构并行链结构,创建了两种不同类型的Relayer。
FSC中继器用于其他链到FSC通信的中继器称为“ FSC中继器 ”,或简称为“中继器”。Relayer是一个独立的进程,可以由任何人在任何地方运行,除了Relayer必须在FSC上注册并存入一定数量的可退还代币。FSC仅接受来自已注册中继器的中继请求。
他们中继的包裹将由FSC上的链上轻客户端进行验证。成功的中继需要通过足够的验证,并且需要在FSC上支付Gas费,因此应该有激励奖励来鼓励社区运行Relayer。
FSC到其他链通信的中继器使用“Oracle”模型,即所谓的“ Oracle Relayers*”。每个验证器都必须(并且只有验证器集中的验证器)运行Oracle中继器。每个Oracle Relayer都会观察区块链状态的变化。一旦它捕获到跨链通信包,它将提交对请求进行投票。在其他链验证者的 2/3 投票权中的Oracle Relayer投票支持更改后,将执行跨链动作。
Oracle Replayers 应该等待足够的区块来确认FSC上的最终性,然后再将跨链通信包提交并投票到其他链上。
跨链费用将与正常的其他链区块奖励一起分配给其他链验证者。
这种预言机类型的中继依赖于所有要支持的验证器。由于跨链通信包的所有投票都记录在区块链上,因此不难有一个度量系统来评估Oracle Relayers的性能。表现最差的人可能会通过未来引入的另一种 Slashing 逻辑收回他们的奖励。
不同的分布式账本系统通常在底层政治理念和技术选择上有所不同。以太坊项目最初承诺是可 以实现"代码即律法”的”不可停止的应用”。在一个重要的智能合约被黑客攻击之后, 由于缺少这段程序意图做什么的非代码形式的说明书,出现了关于发生的事件到底能不能被描述成黑客攻击的争论。分歧最终导致了社区内部的分裂。
因为FSC合约都是简单的zip文件,所以它很容易就能包含描述合约实际意图的PDF或其它格 式的文档。并没有要求必须使用这个机制,也没有要求这些文档具有法律效力。尽管如此,在金融应用案例中,如果发生了分歧,那么把他们包含的法律意义上的合同比包含的软件实现更为重要。
编写一个不可升级的合约在技术上是可能的。如果这种合约管理一种只存在于账本上的资产, 比如加密货币,那么这可以提供一种近似的”代码即律法"。我们把关于这个理念所蕴含的智慧的讨论留给政治学者和reddit.平台日志在 FSC中没有和区块链的"硬分叉”直接等价的机制,所以放弃问题交易链或欺诈交易链的唯一方法是在带外就抛弃一个完整的交易子图达成一致意见。既然不存在一个全局的可见性,这个一致的达成就不需要包括网络上的所有参与者: 只需要包括那些可能已经接收并处理相关交易的参与者。缺少全局可见性的另一方面后果是没有单个点准确记录了谁见过哪笔交易。确定那些必须就抛弃一个子图 达成一致意见的实体的集合,就意味着需要关联节点的活动日志。
FSC节点用日志记录了充分的信息,可以确保这样的关联可以实现。平台定义了一个任何人可用的流来协助这个过程。还提供了一个能生成”调查请求"并发送到一个种子节点的工具。流通知节点管理员,要求一个决策,并且充足的信息被传递到这个节点,用于尝试说服管理员进行参与(如一个签署的法庭指令)。如果管理员通过节点浏览器接受了这个请求,则交易链中后续的跳转被返回。这个工具以这样的方式半自动地抓取网络,找到所有会被提议的回滚操作所影响的参与者。平台不参与认定什么类型的交易回滚是正当的,在定位必须同意的参与方之外,只对实现回滚操作提供最小的支持。
一旦涉及到的参与者被确认,至少有两种策略可以修改账本。一种是使用简单修正数据库的交易扩展交易链,使其符合预期的现实。为了使这个方法成为可能,编写的智能合约必须在提交的签名达到充分的阈值时能够于正常业务逻辑之外被任意修改。这个策略简单,在状态包含的参与方数量较少且都没有在账本上遗留有害信息的动机时最为有意义。
对于由盗窃或诈骗产生的资产状态,其包含的参与者会反抗所有以上述方法进行修补的尝试, 因为他们可以在账本出错后、恢复到实际状态前的这段时间差里从现实世界获取利益。针对这 种情况,需要使用一种更复杂的方法,即除去不合作参与者之外的所有参与者都同意将相关状态标记为不再被消费或已被花费。这本质上是一种受限形式的数据库回滚。
FSC使用权益证明共识协议,该协议有机会分叉并需要确认更多块。一个区块只有一个验证者的签名,因此很难依靠一个区块来验证来自FSC的数据。
为了充分利用其他链的验证人法定人数,采用了类似于许多 [ Bridge ]或Oracle区块链的想法:
来自FSC的跨链通信请求将作为交易提交并执行到FON智能链上。交易的执行会发出`Events`,这些事件可以被观察到并打包在某个“ Oracle*”中到其他链上。这种类型的“Oracle”包没有Block Headers、Hash 和Merkle Proof,而是直接包含动作的跨链信息,例如发送者、接收者和转账金额。
为保证预言机的安全,其他链的验证人将形成另一个法定人数“Oracle Relayers”。其他链的每个验证者都应该运行一个专用进程作为 Oracle Relayer。这些Oracle Relayer 将使用相同的验证器密钥将跨链通信包(如Oracle)提交到其他链并投票。任何由超过⅔ \* N+1 Oracle Relayers投票权签名的包与由⅔ \* N+1相同法定人数的验证者投票权签署的任何区块一样安全。
通过使用相同的验证者法定人数,它将轻客户端代码保存在其他链上,并将连续的块更新保存到其他链上。此类Oracle还具有Oracle ID和类型,以确保排序和正确的错误处理。
存在跨链通信失败的场景。例如,由于合约中的一些编码错误,中继包无法在FSC上执行。超时和错误处理逻辑**用于此类场景。对于可识别的用户和系统错误或任何预期异常,两个网络应该自行修复。例如,当其他链到FSC转账失败时,FSC将发出失败事件,Oracle Relayers将执行其他链退款;当FSC到其他链转账失败时,其他链会发出退款包给Relayer进行中继,以解锁资金。但是,在跨链通信的任何步骤中仍然可能发生意外错误或异常。在这种情况下,Relayers 和Oracle Relayers会发现相应的跨链通道卡在特定的序列中。在超时时间之后,中继器和Oracle中继器可以请求“SkipSequence”事务,卡住的序列将被标记为“不可执行”。将发出相应的警报,社区必须讨论如何处理这种情况,例如通过验证者的赞助商进行回报,或在下次网络升级期间清除资金。
理想情况下,用户希望使用两条平行链,就像使用一条链一样。它需要将更多的聚合交易类型添加到跨链通信中才能实现这一点,这将增加极大的复杂性、紧密耦合和维护负担。这里其他链和FSC只实现了初始启动时启用价值流动的基本操作,而将大部分用户体验工作留给客户端UI,例如钱包。例如,一个出色的钱包可能允许用户以安全的方式直接从FSC 将代币出售到其他链的DEX订单簿上。
跨链合约事件(CCCE)旨在允许智能合约直接通过合约代码触发跨链交易。这成为可能,基于:
■ 可提供标准系统合约,服务于通用智能合约可调用的操作;
■ 标准事件可以由标准合约发出;
■ Oracle Relayers可以捕获标准事件,触发相应的跨链操作;
■ 可以在其他链上创建专用的、代码管理的地址(账户),并由FSC上的合约访问,这里命名为“其他链上的合约地址”(CAoB)。
实现了几个标准操作:
■ FSC到其他链转账:这与正常的FSC到其他链转账的实现方式相同,仅通过标准合约触发。资金可以转移到其他链上的任何地址,包括转移发起合约的相应CAoB。
■ 在其他链上转账:这是一种特殊的跨链转账,而真正的转账是从CAoB到任何其他地址(甚至是另一个CAoB)。
■ 其他链到FSC的转账:这是通过两次跨链通信实现的。第一次由FSC合约触发并传播到其他链,然后在第二次通过时,其他链将开始正常的其他链到FSC的跨链转移,从CAoB到FSC上的合约地址。需要特别注意的是,FSC合约仅在第二遍的任何转账时增加余额,第二遍中的错误处理与正常的其他链到FSC转账相同。
■ IOC (Immediate-Or-Cancel) Trade Out:将资产转移到其他链的主要目标是进行交易。该事件将指示将CAoB中的一定数量的资产尽可能交易成另一种资产,并将交易的所有结果,即留下的源和交易的目标代币,转回FSC。其他链将通过向交易对发送“立即或取消”(即 IOC 订单)来处理此类中继事件,一旦下一次匹配完成,结果将被中继回 FSC。
■ Auction Trade Out:该事件将指示其他链发送拍卖订单,将CAoB中的一定数量的资产尽可能多地交易为另一种资产,并在结束时将所有结果转回 FSC拍卖。FSC将推出拍卖功能。
Trade Out有一些细节:
■ 两者都可以有交易的限价(绝对或相对);
■ 最终结果将被写成跨链包传递回FSC;
■ 转回FSC的资产可能会收取跨链通讯费用;
■ FSC合约维护CAoB上余额和未完成订单的镜像。无论在Trade Out期间发生什么错误,最终状态都会传播回原始合约并清除其内部状态。
有了上述特点,它简单地在FSC上的所有智能合约中添加了具有高流动性的跨链转账和兑换功能。将大大增加智能合约和dApps上的应用场景,实现1链+1链>2链。