contract Ownable {
    address public owner;


    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);



// @dev Ownable构造函数将合约的原始“所有者”设置为发件人帐户。

    function Ownable() public {
        owner = msg.sender;
    }

//@dev如果由所有者以外的任何帐户调用，则抛出异常。
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

//@dev允许当前所有者将合同的控制权转移给新的用户。
//@param newOwner将所有权转让给的地址。
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

}
/**
 * @title 项目管理员基类
 * @dev 可持有合同具有所有者地址，并提供基本的授权控制
 *      函数，这简化了“用户权限”的实现。
 */
function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
}

//@dev允许当前所有者将合同的控制权转移给新的用户。
//@param newOwner将所有权转让给的地址。