Skip to main content

What is ERC173?

ERC-173是一个以太坊智能合约标准,这个标准定义了智能合约所有权的基本接口。该标准允许合约的所有者来管理合约,包括转移所有权和放弃所有权的功能。这个标准主要是为了提供一个通用的方法来处理合约的所有权问题,使得合约所有权的管理更加透明和标准化。

关键函数

  1. owner() - 这是一个view函数,返回当前合约所有者的地址。

  2. transferOwnership(address newOwner) - 这是一个只能由当前所有者调用的函数,用于将合约的所有权转移给新的地址。在调用此函数后,还应该触发一个OwnershipTransferred事件。

  3. OwnershipTransferred(address indexed previousOwner, address indexed newOwner) - 这是一个必须在所有权转移时被触发的事件,用于记录所有权的变更。

合约所有权通常用于控制对合约关键功能的访问权限,例如升级合约、修改关键参数或提取合约中的资金。通过使用ERC-173标准,开发者可以确保他们的合约在处理所有权转移时遵循一个公认的模式,这有助于提高代码的透明度和可互操作性。

/// @title ERC-173 Contract Ownership Standard
/// Note: the ERC-165 identifier for this interface is 0x7f5828d0
interface ERC173 /* is ERC165 */ {
/// @dev This emits when ownership of a contract changes.
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

/// @notice Get the address of the owner
/// @return The address of the owner.
function owner() view external returns(address);

/// @notice Set the address of the new owner of the contract
/// @dev Set _newOwner to address(0) to renounce any ownership.
/// @param _newOwner The address of the new owner of the contract
function transferOwnership(address _newOwner) external;
}

interface ERC165 {
/// @notice Query if a contract implements an interface
/// @param interfaceID The interface identifier, as specified in ERC-165
/// @dev Interface identification is specified in ERC-165.
/// @return `true` if the contract implements `interfaceID` and
/// `interfaceID` is not 0xffffffff, `false` otherwise
function supportsInterface(bytes4 interfaceID) external view returns (bool);
}
  • 要放弃合约的任何所有权,请将 _newOwner 设置为零地址: transferOwnership(address(0)) 。如果这样做了,那么合同就不再属于任何人。
  • 创建合约时应发出OwnershipTransferred事件。