Транзакция, превышающая лимит газа - PullRequest
0 голосов
/ 24 апреля 2020

Я пишу умный контракт, который выглядит следующим образом:

pragma solidity ^0.6.4;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol";

contract Project {

    using SafeMath for uint;

    address payable private _owner;

    struct Request {
        string description;
        uint totalRequirement;
        uint accumulatedAmount;
        address payable recipient;
        bool complete;
        uint minimumContribution;
    }

    struct Media {
        string title;
        string description;
        string objectId;
    }

    string public title;
    string public category;
    string public description;
    address payable creator;

    Request[] public requests;
    Media[] public media;

    event NewRequest(string description, uint totalRequirement, address recipient);
    event NewMedia(string title, string objectId);

    constructor(string memory _title, string memory _category, string memory _description, address payable _ownerAccount) public {
        title = _title;
        category = _category;
        description = _description;
        creator = _ownerAccount;
        _owner = _ownerAccount;
    }

    function owner() public view returns (address payable) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "The desired operation can be carried out by the owner only.");
        _;
    }

    function createRequest(string memory _description, uint _totalRequirement, address payable _recipient,
                           uint _minimumContribution) public onlyOwner {
        Request memory newRequest = Request({
            description: _description,
            totalRequirement: _totalRequirement,
            accumulatedAmount: 0,
            complete: false,
            minimumContribution: _minimumContribution,
            recipient: _recipient
        });

        requests.push(newRequest);

        emit NewRequest(_description, _totalRequirement, _recipient);
    }

    function uploadMedia(string memory _title, string memory _description, string memory _objectId) public onlyOwner {
        Media memory newMedia = Media({
            title: _title,
            description: _description,
            objectId: _objectId
        });

        media.push(newMedia);        
        emit NewMedia(_objectId);
    }
}

Функция создания запроса, которая идентична функции uploadMedia, работает нормально, но функция uploadMedia продолжает давать сбой с ошибкой, сообщающей, что gas предел превышен. Я попытался сделать это в другом умном контракте, который выглядит следующим образом:

pragma solidity ^0.6.4;

contract Media {

    struct Content {
        string title;
        string description;
        string objectId;
    }

    Content[] public contentArray;

    function publishContent(string memory _title, string memory _description, string memory _objectId) public {
        Content memory newContent = Content({
            title: _title, 
            description: _description,
            objectId: _objectId
        });

        contentArray.push(newContent);
    }
}

Этот умный контракт имеет точно такую ​​же функциональность, за исключением дополнительных функций и переменных предыдущего, и метод publishContent в этом контракте работает нормально. .

Только что стало непонятно, в чем проблема ... любая помощь будет высоко ценится.

...