【发布时间】:2017-10-05 16:47:10
【问题描述】:
在我们的用例中,我们需要在运行时定义某些规则,节点将根据这些规则与网络中的其他节点进行交易。例如,我们想在前端定义一个速率,并检查事务是否仅针对该特定节点以该速率发生。换句话说,我们能否在运行时定义条款和条件,这是否仍被称为智能合约,或者智能合约是否需要始终进行硬编码。有没有其他的方法来看待这个?
【问题讨论】:
标签: corda
在我们的用例中,我们需要在运行时定义某些规则,节点将根据这些规则与网络中的其他节点进行交易。例如,我们想在前端定义一个速率,并检查事务是否仅针对该特定节点以该速率发生。换句话说,我们能否在运行时定义条款和条件,这是否仍被称为智能合约,或者智能合约是否需要始终进行硬编码。有没有其他的方法来看待这个?
【问题讨论】:
标签: corda
合约本身是硬编码的。这是因为每个节点都需要同意给定的交易根据合约规则永远有效。如果它们因节点而异,一些节点会认为交易有效,而另一些节点会认为交易无效,从而导致账本不一致。
相反,您必须在流程中强制执行此逻辑。假设您有一个提议交易的TradeOffer 流。每个节点都可以安装自己的由TradeOffer 流发起的响应流。每个节点的响应流可以施加不同的条件。例如,一个节点可能会签署任何交易,而另一个节点会检查提议的速率是否在指定范围内。
【讨论】:
为了扩展 Joel 的评论,合约确实是硬编码的,但只要代码每次都以相同的方式运行(即它是确定性的),将元逻辑放入其中并没有错。
这是什么意思?好吧,你可以在你的状态中放置一个 String 类型,它包含一个可以被评估的表达式(如果你参考https://relayto.com/r3/FIjS0Jfy/VB8epyay73,你可以看到包含在智能合约中使用的一个非常基本的数学表达式)。使这个 String 尽可能复杂并没有错,但是请注意,如果您删除 Corda 提供的大量验证保护,如果您开始简化编码验证逻辑和把它全部放到一个字符串中。
【讨论】: