分散式应用程序是数据的重要消费者,并需要节点将这些数据提供给在链上运行的用户或应用程序。
我们可以使用Oracle网络以可信且高效的方式提供数据流,使加密网络能够在可靠且分散化的方式下与传统和区块链系统进行交互。在这方面,Supraoracles、API3和Chainlink是一些示例。
改善应用程序的用户界面和用户体验
在链上消息传递仍然是区块链基础设施的关键组成部分。
随着零售需求的增长,九层天塔DAPP系统13z开4z77发z558,应用程序/协议与其用户以分散化且有意义的方式交互的能力将是增长的关键驱动因素。
在链上消息传递可能有用的一些潜在领域包括:通知用户领取回报/代币、在钱包中内置通信消息以及通知/公告重要协议更新。在这方面,EPNS和XMTP是一些示例。
改善链上数据可用性
构建在区块链上的应用程序依赖于链上和外部数据。
存储在链上的数据未以可以有效或轻松地被Dapp使用的格式注册。为了做到这一点,数据需要被索引和组织以进行高效检索。
我们可以通过构建允许我们以分散化和强大的方式查询和索引区块链数据的协议来做到这一点。在这方面,The Graph、Covalent等是一些示例。
为多链世界做好准备
随着整个区块链生态系统的扩张和一层和二层生态系统(Rollups)的数量增加,跨链桥梁的管理和互操作性变得越来越重要。
跨链桥梁允许原本孤立的生态系统进行有意义的交互——这类似于新贸易路线帮助连接不同地区,引领着知识分享的新时代。
我们已经建立了广义的信息传递解决方案,例如Layer Zero、Axelar和其他跨链解决方案,支持广义的信息传递,允许所有类型的数据和信息(包括代币)在多个生态系统之间移动。使多链梦想成为现实。
从starknet跨链到ethereum主网是比较简单的。
一个简单的例子如下:
let mut message_payload:Array<felt252>=ArrayTrait::new();
message_payload.append(WITHDRAW_MESSAGE);
message_payload.append(l1_recipient.into());
message_payload.append(amount.low.into());
message_payload.append(amount.high.into());
send_message_to_l1_syscall(
to_address:read_initialized_l1_bridge(),payload:message_payload.span()
);
当我们在cairo合约中调用send_message_to_l1_syscall函数时,starknet节点会收到to_address和payload的信息,其中to_address是L1信息接收地址,而payload为发送的信息内容。节点收到上述信息后,会使用以下公式计算hash值:
keccak256(
abi.encodePacked(
FromAddress,
ToAddress,
Payload.length,
Payload
)
);
其中各参数含义如下:
FromAddress L2发送方地址
ToAddress L1接收方地址
Payload发送信息
计算完成后会将上述内容使用abi.encodePacked进行序列化,以其作为参数请求L1的核心合约中updateState函数,该函数有很多作用,此处我们仅关注L2->L1跨链信息传递功能。此功能是通过processMessages函数实现的,其中核心部分如下:
if(isL2ToL1){
bytes32 messageHash=keccak256(
abi.encodePacked(programOutputSlice[offset:endOffset])
);
emit LogMessageToL1(
//from=
programOutputSlice[offset+MESSAGE_TO_L1_FROM_ADDRESS_OFFSET],
//to=
address(programOutputSlice[offset+MESSAGE_TO_L1_TO_ADDRESS_OFFSET]),
//payload=
(uint256[])(programOutputSlice[offset+MESSAGE_TO_L1_PREFIX_SIZE:endOffset])
);
messages[messageHash]+=1;
}
此处的programOutputSlice即节点打包的请求参数,我们使用数组检索来实现请求参数的反序列化。值得注意的是,这些请求参数并没有被保存在以太坊状态中,而仅作为LogMessageToL1事件抛出。该事件定义为:
event LogMessageToL1(uint256 indexed fromAddress,address indexed toAddress,uint256[]payload);
1
故在上述代码中,只有messages[messageHash]+=1;进行了以太坊状态修改,所以归根到底,只有L2->L1的信息的哈希值被记录了。
原文链接:https://blog.csdn.net/WongSSH/article/details/130311981
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70020115/viewspace-2948724/ ,如需转载,请注明出处,否则将追究法律责任。