具有抽象方法的智能合约

时间:2018-08-12 17:04:48

标签: blockchain ethereum solidity

我遇到一个问题,我想实现一个考虑“未来可维护性”软件设计的智能合约。假设有一个代表某人personal.sol的合同,我们还有另一个名为record.col的合同,开始时此记录仅需要由警察局处理,如果他们想向{{1 }并更改其状态。稍后,personal.sol需要修改,以供医院record.sol

使用

现在需要继承和抽象方法,我现在不知道该怎么做。以下代码应进一步阐明我要实现的目标。

  

Person.sol

hospital.sol
  

Record.sol

contract Person 
 {

 Record[] records
 strut Record{
   string name;
   uint time;
  }

  function updateRecords(string _name, uint _time){
     Record _record = Record({name:_name,time:_time});
     records.push(_record);
  }
}
  

Police.sol

contract Record{
 contract Person {
  struct Record{} // can this work? Object properties are defined in Person
 function updateRecords(string _name, uint _time){};
 }

function commit(address _personaddr, string _name, uint _time){
  _personaddr.transfer(address(this).balance;
  Person person = Person.at(_personaddr); // creates an instance of the Person contract located at _personaddr address
  person.updateRecords(_name,_time);   
}
function abstractMethod() {}
// an abstract method which must be defined in contracts extending this
}
}
  

Hospital.sol

contract Police is Record {
//inherits updateRecords & abstract abstractMethod

function policeNewMethod(address _personaddr, string _name, uint _time){
// does something neww
commit(address _personaddr, string _name, uint _time);    
}

function abstractMethod(){
  //police own implementation of the method
} 
}

我不希望扩展contract Hospital is Record { //inherits updateRecords & abstract abstractMethod function HospitalNewMethod{ // does something commit(address _personaddr, string _name, uint _time); } function abstractMethod(){ //police own implementation of the method } } 的合同直接与Record.sol的{​​{1}}方法进行交互。相反,应该执行检查以验证调用Person.sol的合同确实是实体文件updateRecords()的扩展。是否可以像Java updateRecords()或{{ 1}}

很抱歉格式不正确,但我都是在编辑器中编写的。缩进效果不佳

1 个答案:

答案 0 :(得分:0)

简短的回答至少不是简单的实现,您也许可以使用汇编来实现,但是我不知道,您可以在Record.sol中放置一个函数,例如

function isRecord() public pure returns(bool){
    return true;
}

然后从“个人”合同中调用该命令,以验证调用合同确实包含记录类。尽管这可能会使您容易受到安全漏洞的影响,具体取决于您将如何处理这些合同。