我遇到一个问题,我想实现一个考虑“未来可维护性”软件设计的智能合约。假设有一个代表某人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}}
很抱歉格式不正确,但我都是在编辑器中编写的。缩进效果不佳
答案 0 :(得分:0)
简短的回答至少不是简单的实现,您也许可以使用汇编来实现,但是我不知道,您可以在Record.sol中放置一个函数,例如
function isRecord() public pure returns(bool){
return true;
}
然后从“个人”合同中调用该命令,以验证调用合同确实包含记录类。尽管这可能会使您容易受到安全漏洞的影响,具体取决于您将如何处理这些合同。