有关 Nervos 上 dApp 开发的疑惑

最近一直在了解 Nervos 上 dApp 开发的可能性,也看了学姐的文章。但目前我看到的 Demo 脚本只是通过调用系统提供的方法实现单一逻辑,例如 SimpleUDT 只是调用系统方法检查入参,然后判断是否符合并返回。

我想了解 Nervos 脚本是否可以像 ETH Solidity 一样,通过调用不同已上链脚本完成一系列操作,形成类“合约积木”?
例如假设链上已经部署了「预言机」,「DEX」和「闪电贷」这三款脚本,然后我写个脚本先从预言机里读取价格,然后从闪电贷里贷出一笔钱,接着去 DEX 交易,最后还回闪电贷。Nervos 脚本是否支持此类型操作?如果有是否可以提供事例学习下?

多谢!

2 Likes

CKB Transaction 里有个字段叫做 cell_deps,可以理解为 import 或者 require,放在这里的 cell 是可以在 script 访问的;但是能否一笔交易内完成,我不太确定,这个需要看 vm 执行脚本的顺序如何

1 Like

嗯,我了解。现在我在研究 Dao 的代码,看看能否找到答案

1 Like

CKB 同样支持多个 dapp 之间的交互,但是和 Ethereeum 上的形式有比较大的区别。最大的不同是 Ethereum 明确内置了一个标准的交互方式 (message call),而 CKB 没有一个内置的标准交互。CKB 的模型是面向数据的,更加抽象。dapps 之间的交互约定/标准可以随着生态的发展由社区制定,定义一个 CKB dapps 的交互标准某种程度上是在定义交易布局。

这篇文章的思路可以做参考:

3 Likes

cell_deps 是一个只读引用,可以在 script 里读到这个的 cell 的数据,对于 oracle 合约,可以用这个方法使用。

对于 DEX 和 闪电贷 的这类互操作,思路和以太坊不同。以太坊是基于过程的:

user ----call A----> Contract A ---- call B ----> Contract B ----back to A----> Contract A remain logics

在调用中实现对其它合约的状态转移。

在 CKB 中,不同 cell 是可以在一个交易里的,通过 input、output 直接描述了整个状态转移。

Contract A cell ----> Contract A cell after
Contract B cell ----> Contract B cell after

至于 Contract A/B 之间如何交叉验证对方的逻辑(或者说,保证一部分逻辑代理给了对方进行了验证),就是需要自定义或者参考社区交互标准的了。

1 Like