美文网首页
Telepathy 协议

Telepathy 协议

作者: 雪落无留痕 | 来源:发表于2023-09-03 00:28 被阅读0次

Telepathy是基于Proof of consenus 的互操作协议,即采用zkSnarks 生成源链状态的有效性证明,并在上目标链的执行环境中运行,在目标链上保存源链的区块头,进而可以在目标链上证明源链的状态(账户余额,存储,交易, 事件)等。

Telepathy核心在于采用zkSnark 电路验证以太坊验证者签名,从而可以采用智能合约的形式在其它EVM链上部署以太坊轻客户端,可以实现以下三种功能:

  • 从以太坊向其它链实现链链消息传递,用于跨链桥或跨链治理等;
  • 从其它EVM链上请求以太坊的数据;
  • 允许在执行层访问以太坊共识层的数据。

目前支持3个源链(Mainnet, Gnosis, Goerli)和8个目标链 (Mainnet, Arbitrum, Avalanceh, Binance, Gnosis, Goerli, Optimism, Polygon), 已上线测试网。

Telepathy协议

Telepathy 的核心主要是验证以太坊共识中验证者的签名,通过智能合约实现轻客户端,实现以太坊和其它链的互操作性。

假如Alice 想从以太坊上发起一笔交易,调用Gnosis链上的合约,实现过程为:

  1. 调用以太坊上的Telepathy Router 合约的send函数:
function send(
    uint32 destinationChainId, bytes32 destinationAddress, bytes calldata data
)
  1. Proof of Consensus

    当交易固化后,Telepathy Operator 会生成区块头共识的证明,主要验证Validators的签名,并提交到Telepathy 轻客户端;

  2. Telepathy 监听到以太坊上Router合约的事件,会生成对应的Merkle 证明,然后处理接收到的数据:

//验证证明;
executeMessageFromLog(
    bytes calldata srcSlotTxSlotPack,
    bytes calldata messageBytes,
    bytes32[] calldata receiptsRootProof,
    bytes32 receiptsRoot,
    bytes[] calldata receiptProof,
    bytes memory txIndexRLPEncoded,
    uint256 logIndex
)

//调用目标链上函数:
handleTelepathy(uint32 sourceChainId, address sourceAddress, bytes memory data)

ZK电路

主要采用Circom, 基于Groth16证明系统,主要有两个电路:

  • Step 电路:主要是向轻客户端添加新的区块头,验证验证者的BLS12-381聚合签名;
  • Rotate 电路:对于每27个时,需要生成证明更新 sync commitee, 即验证者集。

状态查询

Telepathy 构建了一个证明者(Attestors)网络, 用于在L2上查询 L1上的数据,例如L2上的Defi协议可以获取L1 Chainlink L1上的数据,或者根据用户在L1上的NFT, 在L2上获取奖励。

查询的数据主要是view 类型的智能合约数据;

查询结果的准确性主要由>2/3的Attestors签名保证。

发送请求需要支付一定的费用。

应用示例

Cross-Chain Message

主要消息从源链到目标链,其中发送示例为:

contract TelepathySenderExample {
    address TELEPATHY_ROUTER = 0x41EA857C32c8Cb42EEFa00AF67862eCFf4eB795a;
    ITelepathyRouter router = ITelepathyRouter(TELEPATHY_ROUTER);

    function sendMessageWithTelepathy() external {
        uint16 destinationChainId = 100;
        // A contract I deployed on Gnosis Chain
        address destinationAddress = 0x690B9A9E9aa1C9dB991C7721a92d351Db4FaC990;
        router.send(
            destinationChainId,
            destinationAddress,
            bytes("Hello world!")
        );
    }
}

接收过程为:

contract TelepathyRecipientExample is ITelepathyHandler {
    address TELEPATHY_ROUTER = 0x41EA857C32c8Cb42EEFa00AF67862eCFf4eB795a;
    ITelepathyRouter router = ITelepathyRouter(TELEPATHY_ROUTER);
    // The contract I deployed on Ethereum
    address sourceChainContract = 0x71C7656EC7ab88b098defB751B7401B5f6d8976F;
    
    event SentMessage(uint32 srcChain, address srcSender, bytes message);
 
    function handleTelepathy(
        uint32 _sourceChainId, address _senderAddress, bytes memory _data
    ) external {
        require(msg.sender == address(router));
        require(_senderAddress == sourceChainContract);

        emit SentMessage(_sourceChainId, _senderAddress, _data);

        return ITelepathyHandler.handleTelepathy.selector;
    }
}

目前消息传递由Succinct官方的relayer 完成。

Ethereum Data Oracle

允许开发者从其它EVM 链上请求以太坊上的数据,实现过程为:

  1. 调用oracle.requestCrossChain 函数,例如:

    telepathyOracle.requestCrossChain(
        address(mainnetContractAddress),
        abi.encodeWithSelector(IERC721.ownerOf.selector, _tokenId),
        address(myCallbackAddress)
    );
    
  1. 处理oracle返回的请求,需要实现handleOracleResponse 函数:
abstract contract OracleCallbackBase is IOracleCallbackReceiver {
    error NotFromOracle(address sender);

    address private _oracle;

    constructor(address oracle) {
        _oracle = oracle;
    }

    function rawHandleOracleResponse(
        uint256 nonce,
        bytes memory responseData,
        bool responseSuccess
    ) external override {
        if (msg.sender != _oracle) {
            revert NotFromOracle(msg.sender);
        }
        handleOracleResponse(nonce, responseData, responseSuccess);
    }

    function handleOracleResponse(
        uint256 nonce,
        bytes memory responseData,
        bool responseSuccess
    ) internal virtual;
}

Ethereum Consensus Oracle

允许从执行层获取共识层的数据,目前还处在beta 版。

参考

https://docs.telepathy.xyz/

https://www.succinct.xyz/

https://github.com/succinctlabs/

相关文章

  • Telepathy•Chapter 16

    斯德哥尔摩 Chapter 16 记忆与消解 也不是没有濒死过,说到底,Root再强大,终究不过一具血肉之躯。 第...

  • git协议

    git支持的协议 local协议 https协议 ssh协议 git协议 github常用的协议

  • Dubbo服务 上传文件解决方案以及Hessian协议

    协议支持Dubbo支持多种协议,如下所示: Dubbo协议 Hessian协议 HTTP协议 RMI协议 WebS...

  • Procotol 和 Delegate

    目录 Procotol 协议的概念 协议的分类 协议的定义 协议的遵循 协议的方法 协议的属性 Delegate ...

  • 计算机网络题目

    几种协议分别属于哪一层传输层协议:TCP协议、UDP协议应用层协议:FTP、HTTP、SMTP网络层协议:IP协议...

  • ARP协议

    地址解析协议ARP 网络层四大协议:ARP协议,IP协议,ICMP协议,IGMP协议。 ARP(Address R...

  • IP数据报格式

    前言 先回顾一下TCP/IP协议栈 网络层的协议有IP协议、ARP协议、ICMP协议和IGMP协议。其中IP协议是...

  • 名词解析

    网络层:IP协议 : 网络协议ICMP协议: Internet互联网控制报文协议 ->IP协议的附属协议 IP...

  • 如何将Git仓库备份到本地

    git常用的传输协议传输协议.png哑协议:哑协议传输进度不可见;智能协议传输可见。传输速度:智能协议比哑协议传输...

  • NSURLSession学习笔记

    �Http协议-超文本传输协议 Http协议是应用层协议,底层要求的传输协议必须是可靠的传输协议,通常是TCP协议...

网友评论

      本文标题:Telepathy 协议

      本文链接:https://www.haomeiwen.com/subject/xadfvdtx.html