pragma solidity ^0.5.11;

contract CampaignFactory {
    address[] public deployedCampaigns;

    function createCampaign(uint minimum) public {
        address newCampaignAddress = new Campaign(minimum, msg.sender);

    function getDeployedCampaing() public view returns(address[]memory) {
        return deployedCampaigns;
contract Campaign {

    struct Request {
        string description;
        uint value;
        address payable recipient;
        bool complete;
        uint approvalCount;
        mapping(address => bool) approvals;

    Request[] public requests;
    address public manager;
    uint public minimumContribution;
    mapping(address => bool) public approvers;
    uint public approversCount;

    modifier restricted() {
        require(msg.sender == manager);

    constructor(uint minimum, address creator) public {
        manager = creator;
        minimumContribution = minimum;

    function contribute() public payable {
        require(msg.value > minimumContribution);
        approvers[msg.sender] = true;

    function createRequest(string memory description, uint value, address payable recipient) public restricted {
        Request memory newRequest = Request({
            description: description,
            value: value,
            recipient: recipient,
            complete: false,
            approvalCount: 0


    function approveRequest(uint index) public {
        Request storage request = requests[index];


        request.approvals[msg.sender] == true;

    function finalizeRequest(uint index) public restricted{
        Request storage request = requests[index];

        require(request.approvalCount > (approversCount / 2));

        request.complete = true;
  • there is a error on line 7, – aybars dorman Sep 21 '19 at 1:07
  • you didn't mention what the error message is, but I bet it's because you are assigning a Campaign object to an address variable. – Chan-Ho Suh Sep 21 '19 at 1:22
  • right not thise error was solved , but ı have got new erros message when ı click minimum contribition output is like ; call to Campaign.minimumContribution errored: VM error: revert. revert The transaction has been reverted to the initial state. Note: The called function should be payable if you send value and the value you send should be less than your current balance. Debug the transaction to get more information. – aybars dorman Sep 21 '19 at 4:39

I assume the issue is on this line:

address newCampaignAddress = new Campaign(minimum, msg.sender);

newCampaignAddress is an address, while the right hand side of the assignment is not. It's a Campaign. As the error message indicates, Solidity will not implicitly cast from Campaign to address. You can, however, explicitly cast the value:

address newCampaignAddress = address(new Campaign(minimum, msg.sender));

Not the answer you're looking for? Browse other questions tagged or ask your own question.