Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/StdPrecompiles.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ library StdPrecompiles {
address internal constant TIP_FEE_MANAGER_ADDRESS = 0xfeEC000000000000000000000000000000000000;
address internal constant TIP403_REGISTRY_ADDRESS = 0x403c000000000000000000000000000000000000;
address internal constant TIP20_FACTORY_ADDRESS = 0x20Fc000000000000000000000000000000000000;
address internal constant TIP20_REWARDS_REGISTRY_ADDRESS = 0x2100000000000000000000000000000000000000;
address internal constant STABLECOIN_DEX_ADDRESS = 0xDEc0000000000000000000000000000000000000;
address internal constant NONCE_ADDRESS = 0x4e4F4E4345000000000000000000000000000000;
address internal constant VALIDATOR_CONFIG_ADDRESS = 0xCccCcCCC00000000000000000000000000000000;
Expand Down
62 changes: 62 additions & 0 deletions src/Tempo.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity >=0.8.13 <0.9.0;

import {StdPrecompiles} from "./StdPrecompiles.sol";
import {StdTokens} from "./StdTokens.sol";
import {IAccountKeychain} from "./interfaces/IAccountKeychain.sol";
import {IAddressRegistry} from "./interfaces/IAddressRegistry.sol";
import {IFeeManager} from "./interfaces/IFeeManager.sol";
import {INonce} from "./interfaces/INonce.sol";
import {ISignatureVerifier} from "./interfaces/ISignatureVerifier.sol";
import {IStablecoinDEX} from "./interfaces/IStablecoinDEX.sol";
import {ITIP20} from "./interfaces/ITIP20.sol";
import {ITIP20Factory} from "./interfaces/ITIP20Factory.sol";
import {ITIP403Registry} from "./interfaces/ITIP403Registry.sol";
import {IValidatorConfig} from "./interfaces/IValidatorConfig.sol";
import {IValidatorConfigV2} from "./interfaces/IValidatorConfigV2.sol";

abstract contract Tempo {
// Nonce precompile
INonce public constant nonce = StdPrecompiles.NONCE_PRECOMPILE;
address public constant NONCE = StdPrecompiles.NONCE_ADDRESS;

// Account keychain precompile
IAccountKeychain public constant keychain = StdPrecompiles.ACCOUNT_KEYCHAIN;
address public constant KEYCHAIN = StdPrecompiles.ACCOUNT_KEYCHAIN_ADDRESS;

// Stablecoin DEX precompile
IStablecoinDEX public constant stableDEX = StdPrecompiles.STABLECOIN_DEX;
address public constant STABLE_DEX = StdPrecompiles.STABLECOIN_DEX_ADDRESS;

// Fee manager precompile
IFeeManager public constant feeAMM = StdPrecompiles.TIP_FEE_MANAGER;
address public constant FEE_AMM = StdPrecompiles.TIP_FEE_MANAGER_ADDRESS;

// Validator config precompile
IValidatorConfig public constant validatorConfig = StdPrecompiles.VALIDATOR_CONFIG;
address public constant VALIDATOR_CONFIG = StdPrecompiles.VALIDATOR_CONFIG_ADDRESS;

// Validator config v2 precompile
IValidatorConfigV2 public constant validatorConfigV2 = StdPrecompiles.VALIDATOR_CONFIG_V2;
address public constant VALIDATOR_CONFIG_V2 = StdPrecompiles.VALIDATOR_CONFIG_V2_ADDRESS;

// Signature verifier precompile
ISignatureVerifier public constant signatureVerifier = StdPrecompiles.SIGNATURE_VERIFIER;
address public constant SIGNATURE_VERIFIER = StdPrecompiles.SIGNATURE_VERIFIER_ADDRESS;

// TIP-403 registry precompile
ITIP403Registry public constant tip403Registry = StdPrecompiles.TIP403_REGISTRY;
address public constant TIP403_REGISTRY = StdPrecompiles.TIP403_REGISTRY_ADDRESS;

// Address registry precompile
IAddressRegistry public constant addrRegistry = StdPrecompiles.ADDRESS_REGISTRY;
address public constant ADDRESS_REGISTRY = StdPrecompiles.ADDRESS_REGISTRY_ADDRESS;

// TIP-20 factory precompile
ITIP20Factory public constant tip20Factory = StdPrecompiles.TIP20_FACTORY;
address public constant TIP20_FACTORY = StdPrecompiles.TIP20_FACTORY_ADDRESS;

// pathUSD is just a TIP20 at a special address (0x20C0...) with token_id=0
ITIP20 public constant pathUSD = StdTokens.PATH_USD;
address public constant PATH_USD = StdTokens.PATH_USD_ADDRESS;
}
14 changes: 9 additions & 5 deletions src/interfaces/ITIP20.sol
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity >=0.8.13 <0.9.0;

/// @title The interface for TIP-20 compliant tokens
/// @notice A token standard that extends ERC-20 with additional features including transfer policies, memo support, and pause functionality
interface ITIP20 {
import {ITIP20RolesAuth, ITIP20RolesAuthErr} from "./ITIP20RolesAuth.sol";

/// @title The interface for interacting with core TIP-20 token features.
/// @dev If you also need role authorization capabilities, use `ITIP20Token`.
interface ITIP20 is ITIP20RolesAuthErr {
/// @notice Error when attempting an operation while the contract is paused.
error ContractPaused();

Expand Down Expand Up @@ -40,8 +42,6 @@ interface ITIP20 {
error SupplyCapExceeded();
/// @notice Error when the transaction payload is invalid.
error InvalidPayload();
/// @notice Error when the caller lacks authorization for the requested action.
error Unauthorized();
/// @notice Error when that precompile instance has not been initialized yet.
error Uninitialized();

Expand Down Expand Up @@ -262,3 +262,7 @@ interface ITIP20 {
/// @notice Returns the EIP-712 domain separator for this token
function DOMAIN_SEPARATOR() external view returns (bytes32);
}

/// @title The interface for TIP-20 compliant tokens
/// @notice A token standard that extends ERC-20 with additional features including transfer policies, memo support, and pause functionality
interface ITIP20Token is ITIP20, ITIP20RolesAuth {}
10 changes: 4 additions & 6 deletions src/interfaces/ITIP20RolesAuth.sol
Original file line number Diff line number Diff line change
@@ -1,22 +1,20 @@
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity >=0.8.13 <0.9.0;

interface ITIP20RolesAuth {
interface ITIP20RolesAuthErr {
/// @notice Thrown when the caller lacks the required role for the requested action
error Unauthorized();
}

/// @title The interface for interacting with TIP-20 token authorization-related features.
interface ITIP20RolesAuth is ITIP20RolesAuthErr {
event RoleMembershipUpdated(bytes32 indexed role, address indexed account, address indexed sender, bool hasRole);
event RoleAdminUpdated(bytes32 indexed role, bytes32 indexed newAdminRole, address indexed sender);

function hasRole(address account, bytes32 role) external view returns (bool);

function getRoleAdmin(bytes32 role) external view returns (bytes32);

function grantRole(bytes32 role, address account) external;

function revokeRole(bytes32 role, address account) external;

function renounceRole(bytes32 role) external;

function setRoleAdmin(bytes32 role, bytes32 adminRole) external;
}