在 NEAR 智能合约协议中跟踪承诺链

Posted

技术标签:

【中文标题】在 NEAR 智能合约协议中跟踪承诺链【英文标题】:Tracking promise chains in NEAR smart contract protocol 【发布时间】:2021-01-18 01:27:39 【问题描述】:

NEAR 协议是分片的,分片中跨合约调用之间的交易是最终的。在某些情况下,识别更长的交易链是有意义的,特别是如果承诺链两次命中同一个合约(重入)。

让我们想象一个承诺链:Alice 想要购买一个代币,并且交易通过多个智能合约进行路由,并且两次命中链中的一个合约。

Alice (user) (tx 1) -> 
exchange contract (triggers promise 1) -> 
aggregator contract (triggers promise 2) -> 
pool contact (triggers promise 3) -> 
exchange contract (again)

交易所合约可以通过signer_account_id识别Alice的账户。但是,交易所合约能否知道重入,即tx 1promise 1,是否可以从智能合约执行上下文中解决或推断这一点,以便交易所知道它已经在为 Alice 处理交易?

请注意,Alice 可能同时处理两条 Promise 链,因此 signer_account_id 不足以唯一识别 Promise 链。

我正在查看VMContext 并试图弄清楚这怎么可能。

【问题讨论】:

好问题。在智能合约上下文中,您看不到交易(例如 tx_hash)并且您不知道收据(这仅在单元测试中可用)。所以我想这是不可能的。您只能检查交易是来自签名者还是来自其他人。 但是 NEAR 本身是否有这些信息可用?因为区块链探索者还需要知道如何根据给定的交易来可视化不同的智能合约是如何交互的。 资源管理器依赖索引器解决额外收据。还有一个实验性的 TX 状态 API 即将返回所有收据,因此您可以跟踪整个链。除了signer_idsigner_public_keypredecessor_id 之外,合约没有太多上下文。所以它只知道谁发起了交易,谁直接调用了合约。 【参考方案1】:

在合约环境中,您必须通过参数传递所有必要的信息。

链下你可以使用NEAR Indexer 或 JSONRPC EXPERIMENTAL_tx_status 方法来获取所有收据及其结果

【讨论】:

以上是关于在 NEAR 智能合约协议中跟踪承诺链的主要内容,如果未能解决你的问题,请参考以下文章

如何让用户在前端部署 NEAR 协议智能合约?

NEAR 智能合约开发

XFS的智能合约

是否可以在 Rust 的 NEAR 智能合约中验证 NIST P-256 曲线?

NEAR 智能合约错误:“合约未初始化”

什么是智能合约