Plutus教程:#8 脚本
8. Plutus Scripts Cardano 使用脚本来验证操作。这些脚本是代码片段,使用 True 或 False 输出实现纯函数。脚本验证是调用脚本解释器以在适当的参数上运行给定脚本的过程。 8.1 什么是脚本? 脚本是一个程序,它决定花费输出的交易是否被授权这样做。这样的脚本称为验证器脚本,因为它验证是否允许支出。一个简单的验证器脚本将检查支出交易是否由特定密钥签名——这将完全复制简单的支付到公钥输出的行为。但是,通过一些仔细的扩展,我们可以使用脚本来表达链上有用的逻辑。EUTXO 模型的工作方式是验证器脚本传递三个参数: 数据(Datum):这是附加到脚本锁定的输出的一段数据(严格来说,同样,只有散列存在)。这通常用于携带状态。 Redeemer:这是一个附加到支出输入的数据。这通常用于从支出者向脚本提供输入。 上下文(Context):这是一条数据,表示有关支出交易的信息。这用于对输出的发送方式进行断言(例如“Bob 签名”)。 8.2 直观的例子 例如,一个孩子想坐摩天轮,但在上车之前,他们必须比安全标志高。我们可以用伪代码表达这个想法,比如: if isTallEnough(attraction=ferrisWheel,passenger=michael): getOnFerrisWheel() def isTallEnough(attraction,kid): return kid["height"] >= attraction["minimumHeight"] def getOnFerrisWheel(): print ("get On the Ferris Wheel") ferrisWheel = {"minimumHeight":120} michael = {"height":135} 在本例中,以下适用: 数据是关于这次交易的信息:michael.height。 上下文是世界的状态,此时的意思是:ferrisWheel.minimumHeight。 reedemer,是要执行的操作:getOnFerrisWheel() 验证器脚本是使用所有信息的函数 isTallEnough 8.3 定义示例 现在让我们看一个来自 DeFi 领域的例子。我们可以实现原子交换,如下所示: 数据包含交换双方的密钥,以及他们交换的内容的描述 救赎者未使用。 上下文包含交易的表示。 验证器脚本的逻辑如下:交易是否从第二方支付给第一方,包含他们应该发送的价值? 如果是这样,那么他们可能会花费这个输出并将其发送到他们想要的地方(或者我们可以坚持他们将其发送到他们的密钥,但我们不妨让他们用它做他们喜欢的事情)。 8.4 代码示例 您可以在每个智能合约上找到验证器脚本的真实代码示例,例如: Plutus 交易教程:在这个验证器上,它总是成功的。 Plutus Hello World:在此验证器上,如果数据等于“Hello”,则将其转换为整数。 Plutus Pioneers English Auction:在这条线上,验证器确保新的出价(数据)优于前一个,直到时间结束。 8.