智能合约

“智能合约”是运行在TRON网络上的应用程序,它的代码和数据保存在相应的智能合约账户中。 由于智能合约是TRON网络的一种账户类型,因此,它们和普通账户一样,有余额,也可以发送交易,但它们却不受任何用户控制,当智能合约被部署到TRON网络后,将按程序运行,普通帐户可以通过创建交易以执行智能合约上定义好的函数来与智能合约进行交互,而与智能合约的交互是不可逆的。

智能合约就好比自动售货机。有了正确的输入,就能保证确定的输出。例如:逻辑 钱 + 选择的零食 = 分发零食 被编入自动售货机,用户就可以从自动售货机购买零食。

智能合约,就像自动售货机一样,内部嵌入编程逻辑,并按照程序运行。下面例子是一个简单的的智能合约 - 自动售货机:

pragma solidity 0.8.7;

contract VendingMachine {

    // Declare state variables of the contract
    address public owner;
    mapping (address => uint) public cupcakeBalances;

    // When 'VendingMachine' contract is deployed:
    // 1. set the deploying address as the owner of the contract
    // 2. set the deployed smart contract's cupcake balance to 100
    constructor() {
        owner = msg.sender;
        cupcakeBalances[address(this)] = 100;
    }

    // Allow the owner to increase the smart contract's cupcake balance
    function refill(uint amount) public {
        require(msg.sender == owner, "Only the owner can refill.");
        cupcakeBalances[address(this)] += amount;
    }

    // Allow anyone to purchase cupcakes
    function purchase(uint amount) public payable {
        require(msg.value >= amount * 1 trx , "You must pay at least 1 TRX per cupcake");
        require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
        cupcakeBalances[address(this)] -= amount;
        cupcakeBalances[msg.sender] += amount;
    }
}

就像自动售货机消除了对雇员的需求一样,智能合约可以应用在许多行业中,并可以取代中间商。

智能合约的特性

TRON网络智能合约具有如下特性:

  • 无需授权
    任何人都可以编写智能合约并将其部署到TRON网络中。因此,你只需要学习如何编写智能合约,并保证账户内有足够的TRX来部署合约。部署智能合约也是一种交易,与TRX转账一样,需要支付一定的资源费用,然而合约部署需要消耗的的资源要高得多。

    TRON支持开发者友好的智能合约开发语言Solidity。使用Solidity编写好智能合约代码后,需要对其进行编译,以便TRON虚拟机能够解释执行合约代码并存储相应的合约数据。

  • 可组合性
    智能合约在TRON网络上是公开的,智能合约也可以被看成是开放的API。这意味着您可以在自己的智能合约中调用其它智能合约,从而极大的扩展各种可能性。智能合约也可以部署其它的智能合约。在工程项目中,甚至不需要编写自己的智能合约,只需要知道如何与现成的合约交互即可。例如,对于应用程序中的token交换相关的逻辑,可以直接使用去中心化的交易所Sunswap现有的智能合约,而不用自己编写相关合约代码,即不需要一切从头开始。

智能合约的局限性

TRON网络智能合约存在如下局限性:

  • 无法与外部系统通信
    智能合约无法直接的与外部系统进行交流,因此智能合约本身无法获得关于“现实世界”中的事件信息,而这一瓶颈限制了智能合约应用场景,但这是设计所需,因为依赖外部信息可能会危及共识,而共识对于安全和去中心化至关重要。但是可以使用预言机Oracle来解决这个问题。

  • 智能合约的最大执行时间
    为了确保网络高吞吐,高稳定的运行,TRON设定了TVM的最大执行时间为80ms,以保证TRON网络每隔3s可以产生出一个新的区块,因此智能合约所允许的最大执行时间为80ms。TVM的最大执行时间是TRON网络的的#13动态参数,超级代表委员会可以通过发起提议来修改此参数。

    对于复杂的智能合约,可能会执行超时,并触发OUT_OF_TIME错误,同时调用者将被扣除全部的fee_limit费用。因此,为避免智能合约超时执行,请尝试将大型合约拆分成较小的合约,并根据需要进行相互引用,并注意常见的陷阱和递归调用,以避免无限循环。