![](/img/trans.png)
[英]Solidity Error :: ParserError: Expected ',' but got 'Number'
[英]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.