# 跨链机制

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链。
