在我们的用例中,我们需要在运行时定义某些规则,根据这些规则,节点将与网络中的其他节点进行交互。例如,我们希望在前端定义一个速率,并检查该事务是否仅针对该特定节点以此速率发生。换句话说,我们是否可以在运行时定义条款和条件,这仍然可以称为智能合约,或者智能合约是否需要始终进行硬编码。有没有其他方法来看待这个?
答案 0 :(得分:1)
合同本身是硬编码的。这是因为每个节点都需要永久地根据合同规则同意给定的交易是有效的。如果它们根据节点而变化,则某些节点会认为事务有效,而另一个节点认为事务无效,导致其分类帐不一致。
相反,你必须在流程中强加这个逻辑。我们假设您有一个TradeOffer
流量提出交易。每个节点都可以安装由TradeOffer
流启动的自己的响应流。每个节点的响应流可以施加不同的条件。例如,一个节点可能签署任何事务,而另一个节点将检查建议的速率是否在指定的范围内。
答案 1 :(得分:1)
为了扩展Joel的评论,合同确实是硬编码的,但只要代码每次都以相同的方式运行(即它是确定性的),将元逻辑放在那里并没有错。
这是什么意思?好吧,你可以在你的状态中放入一个String类型,其中包含一个可以被评估的表达式(如果你引用https://relayto.com/r3/FIjS0Jfy/VB8epyay73,你可以看到包含一个智能合约中使用的非常基本的数学表达式)。使这个String尽可能复杂没有任何问题,但是请注意,如果你开始减少Corda提供的验证,如果你开始减少编码的验证逻辑,那么你的应用程序的任何潜在用户都会开始引起人们的注意。把它全部放入一个字符串中。