Created
December 11, 2018 12:00
-
-
Save ixtgorilla/cb6badeeeb2e0148da8a6ea5f17591f8 to your computer and use it in GitHub Desktop.
[Memo] SecurityToken ERC List
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// @title IERC1400 Security Token Standard | |
/// @dev See https://github.com/SecurityTokenStandard/EIP-Spec | |
interface IERC1400 is IERC20 { | |
// Document Management | |
function getDocument(bytes32 _name) external view returns (string, bytes32); | |
function setDocument(bytes32 _name, string _uri, bytes32 _documentHash) external; | |
// Token Information | |
function balanceOfByPartition(bytes32 _partition, address _tokenHolder) external view returns (uint256); | |
function partitionsOf(address _tokenHolder) external view returns (bytes32[]); | |
// Transfers | |
function transferWithData(address _to, uint256 _value, bytes _data) external; | |
function transferFromWithData(address _from, address _to, uint256 _value, bytes _data) external; | |
// Partition Token Transfers | |
function transferByPartition(bytes32 _partition, address _to, uint256 _value, bytes _data) external returns (bytes32); | |
function operatorTransferByPartition(bytes32 _partition, address _from, address _to, uint256 _value, bytes _data, bytes _operatorData) external returns (bytes32); | |
// Controller Operation | |
function isControllable() external view returns (bool); | |
function controllerTransfer(address _from, address _to, uint256 _value, bytes _data, bytes _operatorData) external; | |
function controllerRedeem(address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData) external; | |
// Operator Management | |
function authorizeOperator(address _operator) external; | |
function revokeOperator(address _operator) external; | |
function authorizeOperatorByPartition(bytes32 _partition, address _operator) external; | |
function revokeOperatorByPartition(bytes32 _partition, address _operator) external; | |
// Operator Information | |
function isOperator(address _operator, address _tokenHolder) external view returns (bool); | |
function isOperatorForPartition(bytes32 _partition, address _operator, address _tokenHolder) external view returns (bool); | |
// Token Issuance | |
function isIssuable() external view returns (bool); | |
function issue(address _tokenHolder, uint256 _value, bytes _data) external; | |
function issueByPartition(bytes32 _partition, address _tokenHolder, uint256 _value, bytes _data) external; | |
// Token Redemption | |
function redeem(uint256 _value, bytes _data) external; | |
function redeemFrom(address _tokenHolder, uint256 _value, bytes _data) external; | |
function redeemByPartition(bytes32 _partition, uint256 _value, bytes _data) external; | |
function operatorRedeemByPartition(bytes32 _partition, address _tokenHolder, uint256 _value, bytes _operatorData) external; | |
// Transfer Validity | |
function canTransfer(address _to, uint256 _value, bytes _data) external view returns (byte, bytes32); | |
function canTransferFrom(address _from, address _to, uint256 _value, bytes _data) external view returns (byte, bytes32); | |
function canTransferByPartition(address _from, address _to, bytes32 _partition, uint256 _value, bytes _data) external view returns (byte, bytes32, bytes32); | |
// Controller Events | |
event ControllerTransfer( | |
address _controller, | |
address indexed _from, | |
address indexed _to, | |
uint256 _value, | |
bytes _data, | |
bytes _operatorData | |
); | |
event ControllerRedemption( | |
address _controller, | |
address indexed _tokenHolder, | |
uint256 _value, | |
bytes _data, | |
bytes _operatorData | |
); | |
// Document Events | |
event Document(bytes32 indexed _name, string _uri, bytes32 _documentHash); | |
// Transfer Events | |
event TransferByPartition( | |
bytes32 indexed _fromPartition, | |
address _operator, | |
address indexed _from, | |
address indexed _to, | |
uint256 _value, | |
bytes _data, | |
bytes _operatorData | |
); | |
event ChangedPartition( | |
bytes32 indexed _fromPartition, | |
bytes32 indexed _toPartition, | |
uint256 _value | |
); | |
// Operator Events | |
event AuthorizedOperator(address indexed _operator, address indexed _tokenHolder); | |
event RevokedOperator(address indexed _operator, address indexed _tokenHolder); | |
event AuthorizedOperatorByPartition(bytes32 indexed _partition, address indexed _operator, address indexed _tokenHolder); | |
event RevokedOperatorByPartition(bytes32 indexed _partition, address indexed _operator, address indexed _tokenHolder); | |
// Issuance / Redemption Events | |
event Issued(address indexed _operator, address indexed _to, uint256 _value, bytes _data); | |
event Redeemed(address indexed _operator, address indexed _from, uint256 _value, bytes _data); | |
event IssuedByPartition(bytes32 indexed _partition, address indexed _operator, address indexed _to, uint256 _value, bytes _data, bytes _operatorData); | |
event RedeemedByPartition(bytes32 indexed _partition, address indexed _operator, address indexed _from, uint256 _value, bytes _operatorData); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.4.20; | |
/// @title ERC-721 Non-Fungible Token Standard | |
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md | |
/// Note: the ERC-165 identifier for this interface is 0x80ac58cd. | |
interface ERC721 /* is ERC165 */ { | |
/// @dev This emits when ownership of any NFT changes by any mechanism. | |
/// This event emits when NFTs are created (`from` == 0) and destroyed | |
/// (`to` == 0). Exception: during contract creation, any number of NFTs | |
/// may be created and assigned without emitting Transfer. At the time of | |
/// any transfer, the approved address for that NFT (if any) is reset to none. | |
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); | |
/// @dev This emits when the approved address for an NFT is changed or | |
/// reaffirmed. The zero address indicates there is no approved address. | |
/// When a Transfer event emits, this also indicates that the approved | |
/// address for that NFT (if any) is reset to none. | |
event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); | |
/// @dev This emits when an operator is enabled or disabled for an owner. | |
/// The operator can manage all NFTs of the owner. | |
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); | |
/// @notice Count all NFTs assigned to an owner | |
/// @dev NFTs assigned to the zero address are considered invalid, and this | |
/// function throws for queries about the zero address. | |
/// @param _owner An address for whom to query the balance | |
/// @return The number of NFTs owned by `_owner`, possibly zero | |
function balanceOf(address _owner) external view returns (uint256); | |
/// @notice Find the owner of an NFT | |
/// @dev NFTs assigned to zero address are considered invalid, and queries | |
/// about them do throw. | |
/// @param _tokenId The identifier for an NFT | |
/// @return The address of the owner of the NFT | |
function ownerOf(uint256 _tokenId) external view returns (address); | |
/// @notice Transfers the ownership of an NFT from one address to another address | |
/// @dev Throws unless `msg.sender` is the current owner, an authorized | |
/// operator, or the approved address for this NFT. Throws if `_from` is | |
/// not the current owner. Throws if `_to` is the zero address. Throws if | |
/// `_tokenId` is not a valid NFT. When transfer is complete, this function | |
/// checks if `_to` is a smart contract (code size > 0). If so, it calls | |
/// `onERC721Received` on `_to` and throws if the return value is not | |
/// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. | |
/// @param _from The current owner of the NFT | |
/// @param _to The new owner | |
/// @param _tokenId The NFT to transfer | |
/// @param data Additional data with no specified format, sent in call to `_to` | |
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable; | |
/// @notice Transfers the ownership of an NFT from one address to another address | |
/// @dev This works identically to the other function with an extra data parameter, | |
/// except this function just sets data to "". | |
/// @param _from The current owner of the NFT | |
/// @param _to The new owner | |
/// @param _tokenId The NFT to transfer | |
function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; | |
/// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE | |
/// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE | |
/// THEY MAY BE PERMANENTLY LOST | |
/// @dev Throws unless `msg.sender` is the current owner, an authorized | |
/// operator, or the approved address for this NFT. Throws if `_from` is | |
/// not the current owner. Throws if `_to` is the zero address. Throws if | |
/// `_tokenId` is not a valid NFT. | |
/// @param _from The current owner of the NFT | |
/// @param _to The new owner | |
/// @param _tokenId The NFT to transfer | |
function transferFrom(address _from, address _to, uint256 _tokenId) external payable; | |
/// @notice Change or reaffirm the approved address for an NFT | |
/// @dev The zero address indicates there is no approved address. | |
/// Throws unless `msg.sender` is the current NFT owner, or an authorized | |
/// operator of the current owner. | |
/// @param _approved The new approved NFT controller | |
/// @param _tokenId The NFT to approve | |
function approve(address _approved, uint256 _tokenId) external payable; | |
/// @notice Enable or disable approval for a third party ("operator") to manage | |
/// all of `msg.sender`'s assets | |
/// @dev Emits the ApprovalForAll event. The contract MUST allow | |
/// multiple operators per owner. | |
/// @param _operator Address to add to the set of authorized operators | |
/// @param _approved True if the operator is approved, false to revoke approval | |
function setApprovalForAll(address _operator, bool _approved) external; | |
/// @notice Get the approved address for a single NFT | |
/// @dev Throws if `_tokenId` is not a valid NFT. | |
/// @param _tokenId The NFT to find the approved address for | |
/// @return The approved address for this NFT, or the zero address if there is none | |
function getApproved(uint256 _tokenId) external view returns (address); | |
/// @notice Query if an address is an authorized operator for another address | |
/// @param _owner The address that owns the NFTs | |
/// @param _operator The address that acts on behalf of the owner | |
/// @return True if `_operator` is an approved operator for `_owner`, false otherwise | |
function isApprovedForAll(address _owner, address _operator) external view returns (bool); | |
} | |
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. This function | |
/// uses less than 30,000 gas. | |
/// @return `true` if the contract implements `interfaceID` and | |
/// `interfaceID` is not 0xffffffff, `false` otherwise | |
function supportsInterface(bytes4 interfaceID) external view returns (bool); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment