随着移动互联网技术的成熟,区块链技术是后移动互联网时代的代表,是该时代的另一项重大创新。尽管这项技术还处于非常早期和神秘的阶段,但它充满了想象力。 。什么是智能合约? 1995年,尼克·萨博(Nick Szabo)首次提出了智能合约的概念,即:合约参与者(通常是相互的)约定的权利和义务。以销售合同为例。卖方承诺发送货物,买方承诺支付合理的价格。触发预编程条件后,智能合约将执行相应的合约条款。随着区块链技术的发展以及对核心价值的进一步探索,智能合约将不仅是传统合约的数字化。在区块链世界中,智能合约将扮演更多核心任务。本文将通过分析区块链3.0中智能合约的技术细节来展示区块链世界的未来智能合约形式。从技术角度分析智能合约,以Ultrain智能合约为例。在Ultrain的合同系统中,我们无法将其他合同的代码嵌入我们自己的合同中。当我们不得不在自己的合同中使用其他合同时该怎么办?该怎么办? Ultrain提供了三种方法,可让您从自己的合同中调用其他合同的代码。在这里,我将主要介绍三种交易方法及其特点。 1. Action.requireRecepient首先引入Require-recepient()方法。从名称中,我们可以知道这是一个通知。调用此方法时,将调用在“ To”合约上部署的具有相同名称的方法。例如,现在我们使用以下方法编写了两个合同。一个合约部署在帐户千斤顶上(图1),另一个合约部署在合约玫瑰上(图2)。通过发起交易进行测试。如果一切正常,您将看到在打印的日志中调用了具有相同名称的jack和rose接收器方法(图3)。从结果中,我们可以知道:(1)也叫杰克的同名方法。 (2)传递的参数与启动事务时的参数相同,无需显式传递此参数; (3)玫瑰玫瑰和杰克的接收器方法在同一个事务中被调用。 (4)rose和jack的接收器方法都具有rose的许可。 2. AcTIon.sendInline从Action.recepient()的测试结果可以知道,requireRecepient()方法只能使用相同的名称和相同的参数来调用该方法,但是在许多情况下,该方法受到限制。因此,需要解决该问题的另一种方法,该方法是能够调用具有任意参数的方法。这个方法是Action.sendInline(),同样,我们用一个例子来说明。在玫瑰合约中,调用千斤顶合约中的任何方法并传递任何参数。部署帐户后,执行玫瑰合同。执行成功后,您将看到Rose执行日志中确实存在杰克合同方法的执行(如图6所示),这意味着sendInline方法确实可以调用其他合同的任何方法。具有任意参数,并且双方具有相同的权限。与收据一样,交易在同一笔交易中执行。 3. Transaction.send先前介绍了requireRecepient和sendInline的用法以及它们的特征,其中之一是它们都在同一事务中执行,这意味着,如果操作在整个执行链中失败,则整个事务都会失败。在某些情况下,我们不希望所有操作都作为事务处理。此时,反映了Transaction.send的好处。接下来,让我们演示如何使用此方法。部署完成后,我们可以执行Rose的延迟方法,请注意将Rose的活动权限委派给utrio.code,否则该方法在执行时将失败。成功执行该方法后,您会发现结果中仅包含玫瑰日志信息(如图9所示),那么杰克合约中的日志信息打印在哪里?您可以查看该节点的日志信息,然后发现该节点中存在jack的日志信息(图10)。这也表明该方法确实不能在同一事务中执行,并且具有以下特征:1)Transaction.send()可以调用jack的任何方法。 2)调用方法时,可以传递任何参数。 3)调用jack中的方法时,它在启动时具有相同的权限(上升)。通过对以上三种方法的说明,再次总结了这三种方法的风格和特点,可以不同地使用不同的方法