频道澳门葡京手机版网址
登录注册
澳门葡京手机版网址 > 网络 > 云计算 > 正文

olidity语言开发以太坊智能合约中的继承

2018-11-27 11:59:37           
收藏   我要投稿

在Solidity中,继承与经典的面向对象编程语言非常相似。你首先编写基本智能合约并告知你的新智能合约将从基础合约继承。

你还必须通过复制包含多态的代码来了解Solidity支撑多重继承。所有函数调用都是虚函数,这意味着会是调用派生函数最多的函数,除非明确给出了合约名称。当某一个智能合约从多个合约继承时,只在区块链上创建一个智能合约,并将所有基础合约中的代码复制到创建的智能合约中。

让大家写下大家的基本智能合约:它将让大家轻松地为大家的合约添加所有权。大家将其命名为Ownable。OpenZeppelin的员工写了很多可以在智能合约中使用的可重用代码。这些代码段可通过其工具或其Github存储库获得。

这是代码:

pragmasolidity^0.4.11;/**
*@titleOwnable
*@devTheOwnablecontracthasanowneraddress,andprovidesbasicauthorizationcontrol
*functions,thissimplifiestheimplementationof"userpermissions".
*/contractOwnable{

addresspublicowner;/**
*@devTheOwnableconstructorsetstheoriginal`owner`ofthecontracttothesender
*account.
*/
functionOwnable(){
owner=msg.sender;
}/**
*@devThrowsifcalledbyanyaccountotherthantheowner.
*/
modifieronlyOwner(){require(msg.sender==owner);
_;
}/**
*@devAllowsthecurrentownertotransfercontrolofthecontracttoanewOwner.
*@paramnewOwnerTheaddresstotransferownershipto.
*/
functiontransferOwnership(addressnewOwner)onlyOwner{require(newOwner!=address(0));
owner=newOwner;
}

}

大家经常写的另一种模式是破坏大家的合约并将合约中存储的资金转移给所有者或另一个地址的能力。重要的是大家不希翼任何人能够破坏大家的合约,所以大家的Destructible应该继承Ownable。继承是使用智能合约名称后面的is关键字完成的。

必须注意,它是Solidity,默认情况下是函数,或者可以从派生类访问。与其他编程语言一样,你可以指定从外部或派生合约中可以访问的内容。函数可以指定为external,public,internal,private,默认为public。

external:外部函数是智能合约接口的一部分,这意味着可以从其他合约和交易中调用它们。external函数f不能在内部调用(即f()不起作用,但this.f()起作用)。当外部函数接收大量数据时,它们有时会更有效。

public:公共函数是智能合约接口的一部分,可以在内部调用,也可以通过消息调用。对于公共状态变量,会生成自动getter函数(见下文)。

internal:这些函数和状态变量只能在内部访问(即从当前合约或从中派生的合约中),而其他情况不使用它。

private:私有函数和状态变量仅对定义它们的智能合约可见,而不是在派生合约中可见。

下面是大家的第二份智能合约:

pragmasolidity^0.4.11;/**
*@titleDestructible
*@devBasecontractthatcanbedestroyedbyowner.Allfundsincontractwillbesenttotheowner.
*/contractDestructibleisOwnable{functionDestructible()payable{}

/**
*@devTransfersthecurrentbalancetotheownerandterminatesthecontract.
*/
functiondestroy()onlyOwner{
selfdestruct(owner);
}functiondestroyAndSend(address_recipient)onlyOwner{
selfdestruct(_recipient);
}
}

现在使用这两个基本合约,大家将写一个简单的BankAccount智能合约,人们可以汇款,业主可以提取。

pragmasolidity^0.4.11;

contractBankAccountisOwnable,Destructible{functionstore()publicpayable{

}

functionwithdraw(uintamount)publiconlyOwner{if(this.balance>=amount){
msg.sender.transfer(amount);
}
}

}

请注意,大家需要从两个智能合约继承。继承的顺序很重要。判断顺序的一个简单规则是按照“最类似基类”到“最多派生”的顺序指定基类。

以下是大家将部署的整个代码:

pragmasolidity^0.4.11;/**
*@titleOwnable
*@devTheOwnablecontracthasanowneraddress,andprovidesbasicauthorizationcontrol
*functions,thissimplifiestheimplementationof"userpermissions".
*/contractOwnable{

addresspublicowner;/**
*@devTheOwnableconstructorsetstheoriginal`owner`ofthecontracttothesender
*account.
*/
functionOwnable(){
owner=msg.sender;
}/**
*@devThrowsifcalledbyanyaccountotherthantheowner.
*/
modifieronlyOwner(){require(msg.sender==owner);
_;
}/**
*@devAllowsthecurrentownertotransfercontrolofthecontracttoanewOwner.
*@paramnewOwnerTheaddresstotransferownershipto.
*/
functiontransferOwnership(addressnewOwner)onlyOwner{require(newOwner!=address(0));
owner=newOwner;
}

}/**
*@titleDestructible
*@devBasecontractthatcanbedestroyedbyowner.Allfundsincontractwillbesenttotheowner.
*/contractDestructibleisOwnable{functionDestructible()payable{}

/**
*@devTransfersthecurrentbalancetotheownerandterminatesthecontract.
*/
functiondestroy()onlyOwner{
selfdestruct(owner);
}functiondestroyAndSend(address_recipient)onlyOwner{
selfdestruct(_recipient);
}
}

contractBankAccountisOwnable,Destructible{functionstore()publicpayable{

}

functionwithdraw(uintamount)publiconlyOwner{if(this.balance>=amount){
msg.sender.transfer(amount);
}
}

}

大家现在可以部署大家的银行账户bank account智能合约了。

    上一篇:K8s原理架构先容
    下一篇:最后一页
    相关文章
    图文推荐
    热门资讯

    关于大家 | 联系大家 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

    版权所有: 澳门葡京手机版网址_澳门新莆京娱乐_www.88807.com - 点此进入--致力于做实用的IT技术学习网站

    XML 地图 | Sitemap 地图