合约中堆栈太深引发的错误 / 学习智能合约#24

in STEEM CN/中文4 years ago

stack.jpg

今天在设计一个场外合约时遇到了一个错误,如上图所示:堆栈太深!

struct OrderMessage
    {
        uint256 orderNumber;
        string typeOfPayment;
        string collectingAccount;
        string sellerSteem;
        address sellerTron;
        string buyerSteem;
        address buyerTron;
        uint256 amount;
        uint256 price;
        uint256 orderCreated;
        uint256 orderValidity;
        uint256 submitTime;
        State state;
    }

如上所示,如果一个结构体有太多变量,或是函数有太多参数就会引发堆栈太深的错误,必须要删除些变量才行。在以太坊中这个上限是16个,在波场中13个就会引发。

所以,在设计中不能真把区块链当数据库来存储,很多变量应该打包在一个变量中,或是用IPFS来存储大部分的变量,区块链只存储必要的数据,这样才是一个好的方案。