今天来认识智能合约中常用的基础合约。
地址工具
用于检测某个地址是否为合约的工具
这个合约是一个librray,只有一个函数isContract,且被声明为internal view.internal 限制这个函数只能由import这个合约内部使用;view 声明这个函数不会改变状态
限制子合约的余额纸飞机的官方的下载的方法在哪
限制子合约以太币余额的基础合约
缺点:这种利用modifier来限制的方式,无法限制其它合约通过selfdestruct操作中指定合约地址而引发的转入操作;也没法限制没有使用limitedPayable来声明的合约函数进行转入操作。
安全算术(SafeMath.sol)
对uint256类型进行算术四则运算的库,也是最常用库,防止溢出。
自省(ERC165)
这是一个向外界提供一个特定函数的基础合约,这个函数可以用来查询合约支持的接口(函数)。
_interfaceId函数选择器,是合约某个函数的标识(合约函数调用数据的前4个字节)
接口查找基础合约
这是一个实现了ERC165的基础合约。
用一个mapping类型的状态变量持久化地保存了一个由函数接口(函数选择器)到布尔值的映射。它提供了一个internal函数来注册合约自身的接口函数,并在合约构造函数中直接注册了ERC165接口函数supportsInterfaces。注意_registerInterface断言基于ERC165的gas消耗。
归属权(Owner.sol)
这是一个用来给合约提供所属权特性的基础合约,这是一个非常重要的,大概也是最基础的合约。
这是一个非常通用的归属权基础合约。由一个状态变量来保存它的所有者地址,并在构造函数中将合约创建人设置为合约所有者。定义了两个事件:OwnershipRenounced 用来通知外部世界所有者放弃对合约的所有权;OwnershipTransfered 用来通知外部世界合约归属权发生转移。
用户角色(Roles.sol)
定义结构体Role,其中保留一组地址到布尔值的映射,也就是保留“某个地址是否是当前Role”的信息。
基于角色的访问控制(RBAC.sol)
非常重要的基础合约。可以用来基于用户角色进行相应的访问控制。合约中定义了一个string到Roles.Role的private映射,也就是角色名称到与角色相关联的所有地址信息映射的对应关系。
超级用户(Superuser.sol)
超级用户可用直接修改合约归属权,即使他不是合约的Owner.
联系方式(Contactable.sol)
简单地给Owner合约添加字符串附加信息的基础合约
归属权转移请求(Claimable.sol) 纸飞机的下载
Ownable的扩展,允许在做归属权转移时,由新的的合约拥有者“声明接受归属权”
有时限的归属权转移请求(DelayedClaimable.sol)
当前合约是对Claimable.sol的扩展,由当前合约所有者指定了一个接受归属权转移的时间期限,新的owner只有在时间期限内调用claimOwnership函数才能获得合约的归属权。
这里的时间条件是区块号(block.number)的范围。原因:区块链系统基于分布式对等网络,各个节点纸飞机官方网站的下载地址怎么找(客户端)本地时间未必与UTC时间一致,所有使用区块号这个全网共识的时间标志作为判定条件。
归属权继承(Heritable.sol)
合约不归属合约(HasNocontracts.sol)
当某个继承Ownable合约的合约,其所有者地址被设置为一个合约地址的时候,可以使用HasNoConstracts合约定义的reclaimConstract方法将其所有者地址转移到当前合约的所有者。
合约不持有以太币(HasNoEther.sol)
对Ownable合约的拓展,来确保合约中不持有以太币。
合约可找回token(CanClaimToken.sol)
将合约所持有的ERC20telegram官网下载的网站是多少 token取回到合约所有者的地址。
合约不持有token(HasNoToken.sol)
tokenFallback函数就是ERC233标准中要求接受者合约实现的一个函数,实现这个函数的合约会被认定是可以持有ERC233token的合约。
合约什么都不持有(NoOwner.sol)
签名保镖(SigmatureBouncer.sol)
这个合约继承了Owner和RBAC,它有一个所有者,且有一个保存了角色和相应地址的映射
白名单(Whitelist.sol)
可自毁(Destructible.sol)
可暂停运作(Pausable.sol)
token可自毁(TokenDestuctible.sol)
托管(Escrow.sol)
条件托(ConditionalEscrow.sol)
super is 调用父类的回撤方法
退还托管(RefundEscrow.sol)