web3wagmi
← All standards

ERC-1450 RTA-Controlled Security Token

FinalERCcreated 2018-09-25requires ERC-20, ERC-165, ERC-6093

Security tokens where the Registered Transfer Agent has exclusive control over transfers for regulatory compliance

Authors: Howard Marks (@howardmarks), Devender Gollapally (@devender-startengine), Joe Mathews (@se-joe), Jordan Jahja (@jordan-jahja), John Shiple (@johnshiple), David Zhang (@david-colab)

ERC-165 interface ids

Computed here as the XOR of the selectors each interface defines.

IERC14500x695eecef

Functions this standard introduces (50)

0xdd62ed3eallowance(address,address)view
0x095ea7b3approve(address,uint256)
0xfb2e6e77batchBurnFrom(address[],uint256[],uint16[],uint256[])
0xfaf97505batchMint(address[],uint256[],uint16[],uint256[])
0xeb76d908batchTransferFrom(address[],address[],uint256[],uint16[],uint256[])
0x79cc6790burnFrom(address,uint256)
0x55758f04burnFromRegulated(address,uint256,uint16,uint256)
0xb860438eburnFromRegulation(address,uint256,uint16)
0x10de2676cancelRecovery(uint256)
0x7e893159changeIssuer(address)
0xf282527acontrollerTransfer(address,address,uint256,bytes,bytes)
0x313ce567decimals()view
0x56570571executeRecovery(uint256)
0x9fa5f50bgetAllDocuments()view
0xcad00accgetDetailedBatchInfo(address)view
0xb10d6b41getDocument(bytes32)view
0xca709a25getFeeToken()view
0x654c1918getHolderRegulations(address)view
0xc0ae5607getRecoveryDetails(uint256)view
0xc946a407getRegulationSupply(uint16)view
0xd8a4676fgetRequestStatus(uint256)view
0x40664496getTransferFee(address,address,uint256)view
0xcafe4e97hasPendingRecovery(address)view
0xfce80fb9initiateRecovery(address,address,bytes32,string,bytes32)
0xe816d97fisAccountFrozen(address)view
0x54b7636eisKYCVerified(address)view
0x86f86c15isRegisteredBroker(address)view
0xd1132dd6isSecurityToken()pure
0xfb99b86disTransferAgent(address)view
0x5547f83fmint(address,uint256,uint16,uint256)
0x469b3c95preCheckCompliance(address,address,uint256)view
0x903cec95preCheckComplianceCallback(bytes,bytes)pure
0x73a09dc7processTransferRequest(uint256,bool)
0x3ec6ef44rejectTransferRequest(uint256,uint16,bool)
0xc3501848removeDocument(bytes32)
0x42eba604requestTransferWithFee(address,address,uint256,uint256)
0xafcd35d4requestTransferWithPermit(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)
0xcbe5404fsetAccountFrozen(address,bool)
0x7e57c57dsetBrokerStatus(address,bool)
0x010648casetDocument(bytes32,string,bytes32)
0xa4cfc1bcsetFeeParameters(uint8,uint256)
0x15cce224setFeeToken(address)
0x8c6a244csetTransferAgent(address)
0x01ffc9a7supportsInterface(bytes4)view
0xa9059cbbtransfer(address,uint256)
0x23b872ddtransferFrom(address,address,uint256)
0xf76d3d22transferFromRegulated(address,address,uint256,uint16,uint256)
0x5923e87dupdateRequestStatus(uint256,uint8)
0x54fd4d50version()pure
0xdd2cc3f3withdrawFees(uint256,address)

Inherited (4)

0x70a08231balanceOf(address)ERC-20
0x06fdde03name()ERC-20
0x95d89b41symbol()ERC-20
0x18160dddtotalSupply()ERC-20

Optional extensions (6)

Interfaces the spec defines alongside the core one, which an implementation may or may not carry.

IERC200x36372b07

0x18160dddtotalSupply()
0x70a08231balanceOf(address)
0xa9059cbbtransfer(address,uint256)
0xdd62ed3eallowance(address,address)
0x23b872ddtransferFrom(address,address,uint256)
0x095ea7b3approve(address,uint256)

IERC1650x01ffc9a7

0x01ffc9a7supportsInterface(bytes4)

IRTAProxy0x279a11dd

0xf5bc44casubmitOperation(address,bytes,uint256)
0xfc4ce362confirmOperation(uint256)
0x20ea8d86revokeConfirmation(uint256)
0x0e70306dexecuteOperation(uint256)
0xeb12d61eaddSigner(address)
0x0e316ab7removeSigner(address)
0x0d60432eupdateRequiredSignatures(uint256)
0x94cf795egetSigners()
0x08aff933hasConfirmed(uint256,address)
0x202e3924getOperation(uint256)
0x54fd4d50version()

IBrokerProxy0x10774bf8

0xa01c0effsubmitTransferRequest(address,address,address,uint256,address,uint256)
0xdd1bb2a9rotateOperator(address)
0x6d70f7aeisOperator(address)

ISnapshotManager0xfd311e00

0xb3d3d37etakeSnapshot()
0x4ee2cd7ebalanceOfAt(address,uint256)

ITaxCompliance

0x63987e03collectW9(address)
0x9d5e332ecalculateWithholding(address,uint256)
0xa19165ffgenerate1099(address,uint256)
0xc0365d89generate1042S(address,uint256)
0x5762a39cupdateTaxDocumentHash(string,string)

Events (35)

Topic0 is the keccak256 hash of the signature, which is what a log filter matches on.

0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efTransfer(address,address,uint256)
0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925Approval(address,address,uint256)
0xaf014c0f1e2d7c810cfe4f4ec7c675b9dbd7ad5fd0b058fe94776a447d6f3337IssuerChanged(address,address)
0x35e89afcbe61fb77843ff4fb292fdc4b00f10009912cacbb48c537c93c84eccbTransferAgentUpdated(address,address)
0xd7a03727fcad9fd7ec89ae4d2f858630c6af554ff70236b834cc92430a2e43c1TokensMinted(address,uint256,uint16,uint256,uint256)
0x3e12e887d427175142a28b9b6c2740bc2da6904e3c9f86a2aea2a2cc53bb95b7TokensBurned(address,uint256,uint16,uint256)
0x28bde96161ded46dfa66a5bf95b17d037b74163cc008c943859fd94f37f37ffeRegulatedTransfer(address,address,uint256,uint16,uint256)
0x5c305e799a867c1f9a632629eba8ba08f423e4350397ef18fee1cbb4632df2c5TransferRequested(uint256,address,address,uint256,uint256,address)
0x624f756b8457d5d02670046b80faa01c08502d2cbb53c3e61c1ef90a6b66cf91RequestStatusChanged(uint256,uint8,uint8,uint256)
0xeb669e0a01fff40cbe45de851f42334fe70673136abfd91399651b7ae199a07bTransferExecuted(uint256,address,address,uint256)
0xf7061e20a57003952a3a98be55c537d9c3d732e2634c64a2ecac946e8e1c939fTransferRejected(uint256,uint16,bool)
0xec7f25aef06e3f0e65e88e262bb891d91ec94fec8cf5858339abf0907ed04f15TransferExpired(uint256,uint256)
0xe6d0097a9b1cc017bdb0149144ac0e50e3878286c6592ec91f9f38489d688e01FeeParametersUpdated(uint8,uint256)
0x91a03e1d689caf891fe531c01e290f7b718f9c6a3af6726d6d837d2b7bd82e67FeeTokenUpdated(address,address)
0x812bcf6853ebc81dc0a1d2323893eedad6cd086a4398311a699e0a7acdf187b3FeesWithdrawn(uint256,address)
0x6eeca9bd01d51a74626e1dba78769450e56fe3f29dee5b0f3aee086d5f5ceaafBrokerStatusUpdated(address,bool,address)
0xea5aca42a051813142500d062c59f19260290a6ce9fcc05f41010c939000e5b9AccountFrozen(address,bool,address)
0x6bf62b4b9c7b768275122bf70d429efc398a056d669b1efdf6c3976346246d7dControllerTransfer(address,address,address,uint256,bytes,bytes)
0x876b7cb47aa150b3a5516188b19ed308752ad4d0ae9a702543353b78163f7589ControllerRedemption(address,address,uint256,bytes,bytes)
0xb4c22d60cd550a815744f04e3ff5278bf19684565ee00e2b084041b6024bd6f6DocumentUpdated(bytes32,string,bytes32)
0x3d9bba27d3e360d8c80645beed7e991454a8271bf6f269a24f7782be0f0d0654DocumentRemoved(bytes32,string,bytes32)
0x633611737e849bf540a78184cb988e50bee6df6e503d7318b21905f927930ce5RecoveryInitiated(uint256,address,address,uint256)
0x33ddda278c137c6fa31b79fc821f65dc0a1fb04b37c61f93d93f3c688c2db609RecoveryCancelled(uint256,address)
0x47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24SignerAdded(address)
0x3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8bSignerRemoved(address)
0xe10a705edb4af55d916591ab3ae6d73d13195159890a14a90b10ae1117f9ea37RequiredSignaturesUpdated(uint256,uint256)
0xd33d2f11d187f3944f69d46c62046264a6e0e07aa0821108fddcb637c26b9560OperationSubmitted(uint256,address)
0x49b95ce38883cadd696f6aba877a58458fccb95b815ab048952aa16904118c5dOperationConfirmed(uint256,address)
0x0e71fde518036742a4c067068719d7f9e26519ea3aef1213ae9098439bbb38deOperationExecuted(uint256)
0x648f594408894fb5f78bb9ffc3fd6fe4562302666b063288188377f94613fc8fOperationRevoked(uint256,address)
0x0cb95562c0c1c9ac9c0095cb0f9064ba3b004ddf6642f85044d2c2ce062eef4eOperatorRotated(address,address)
0x6b8b5414e3da4d8a3345869ba629fe05d1d64b5a7b75269a010b6e260aa92a13RequestSubmitted(uint256,address,address,uint256)
0xd5086213e95fe6ba29783b6090dd64c4610e933d6933d73898463c792ca8e424TransferRequested(address,address,uint256,uint256)
0xb3b962ba1261f3080e7d4f5f2002b0f8338c5bb41cdab72866777fd7b9dc9b9eTransferApproved(address,address,uint256)
0xbfcb6cbd0ff664fa3128426edf9aca99e38c87c47608453d4e3b7328bb1911d6TransferRejected(address,address,uint256,uint16)

Custom errors (19)

0xe450d38cERC20InsufficientBalance(address,uint256,uint256)
0x96c6fd1eERC20InvalidSender(address)
0xec442f05ERC20InvalidReceiver(address)
0xe602df05ERC20InvalidApprover(address)
0x94280d62ERC20InvalidSpender(address)
0xfb8f41b2ERC20InsufficientAllowance(address,uint256,uint256)
0x118cdaa7OwnableUnauthorizedAccount(address)
0x1e4fbdf7OwnableInvalidOwner(address)
0xc27fd505ERC1450TransferDisabled()
0x960b5d0aERC1450OnlyRTA()
0xacf31384ERC1450TransferAgentLocked()
0x0f527beaERC1450ComplianceCheckFailed(address,address)
0xda0357f7NotASigner()
0xcc2fa558AlreadyASigner()
0x5f8a9c0bAlreadyConfirmed()
0xe471069aNotConfirmed()
0xe16db4b3InsufficientConfirmations()
0xb84231a4OperationAlreadyExecuted()
0x719feac7InvalidSignerCount()

Depends on (3)

Proposals this one names in its requires field.

What the specification covers

Compare with

Parsed from the canonical specification · discussion