簡體   English   中英

得到 parsererror 我在 remix 上寫 inheritance solidity 代碼我得到了錯誤

[英]getting parsererror I write inheritance solidity code on remix i got error

從solidity:contracts/inheritance 添加兩個contract.sol:32:1:ParserError:Function,變量,結構或修飾符聲明預期。 合同 Mycontract 是 Ownable{ ^-----^

//代碼雜注solidity ^0.6.0;

合約擁有{

地址公共所有者;

constructor( string memory _secret)public{
    owner = msg.sender;
}

modifier addcontract(string memory _secret){
    require(owner == msg.sender, "only owner can accesss");
    _;

}

}

合同秘密保險庫{字符串秘密;

constructor() public{
    secret = _secret;

}

function getsecret() public view returns(string memory){
    return secret;

}

contract Mycontract is Ownable{ //錯誤在這一行

address vault;

constructor(string memory _secret)  public{
    secretvault _Vault = new Vault(_secret);
    secretvault = address(_Vault);
    super;

}
function getsecret() public view addcontract returns(string memory){
    secretvault _Vault = Vault(secretvault);
    return _Vault.getsecret();
}

}

如果您繼承的合同期望 arguments 到它的構造函數,那么您應該在兩個地方之一傳遞那些 arguments 像Ownable("secret value")

在這里,我們聲明 inheritance:

contract MyContract is Ownable("secret value") {

    address vault;

    constructor(string memory _secret) public {
        secretvault _Vault = new Vault(_secret);
        secretvault = address(_Vault);
        super;
    }
    function getsecret() public view addcontract returns(string memory){
        secretvault _Vault = Vault(secretvault);
        return _Vault.getsecret();
    }
}

或者在子構造函數上:

contract MyContract is Ownable {

    address vault;

    constructor(string memory _secret) Ownable("secret value") public {
        secretvault _Vault = new Vault(_secret);
        secretvault = address(_Vault);
        super;
    }
    function getsecret() public view addcontract returns(string memory){
        secretvault _Vault = Vault(secretvault);
        return _Vault.getsecret();
    }
}

順便說一句,我不確定您要做什么,或者您是否只是在玩一些概念,但是智能合約和區塊鏈中沒有“私人”或“秘密”數據之類的東西。 智能合約中的所有數據都可以直接從區塊鏈訪問,使用web.eth.getStorageAt(contractAddress, storageIndex)類的東西。

另外,我建議您在專門的社區中詢問這些與 Ethereum/Solidity 相關的問題: https://ethereum.stackexchange.com/

順便說一句,試圖猜測您要做什么,我將您的代碼重構為如下所示:


//code
pragma solidity ^0.6.0;

contract Ownable {

   address public owner;

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(owner == msg.sender, "Only owner can accesss");
        _;
    }
}

contract Vault {
    // There is nothing actually private in a smart contract or blockchain.
    string private secret;

    constructor(string memory _secret) public {
        secret = _secret;
    }

    function getSecret() public view returns(string memory){
        return secret;
    }
}

contract MyContract is Ownable {

    Vault vault;

    constructor(string memory _secret) public {
        vault = new Vault(_secret);
    }
    function getSecret() public view onlyOwner returns(string memory){
        return vault.getSecret();
    }
}

secretvault智能合約聲明中,您必須以這種方式在末尾(在getsecret()函數之后)關閉大括號:

contract secretvault { 
  string secret;

  constructor() public {
    secret = _secret;
  }

  function getsecret() public view returns(string memory){
    return secret;
  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM