EOA Verification
A standalone contract name the EOA Registry that allows for user addresses to submit
a signed message verifying that there is a private key associated with the account and that it
is not an undeployed contract address.
Off-chain order books SHOULD be aware of collections they are servicing that have set a transfer security level requiring the token recipient to be a verified EOA and follow the steps below to verify the user address with the collection's transfer validator.
- Determine if the user's EOA has already been verified with the collection's transfer validator. This may be through the off-chain order book's indexed event logs or by calling the
isVerifiedEOA(address)function. If the EOA has been verified, no further action is required. - Request a wallet signature using the
personal_signmethod with the messageEOA. - Call either the
verifySignature(bytes)orverifySignatureVRS(uint8, bytes32, bytes32)function from the user's EOA with the signature data obtained in step 2. This transaction will be recorded on-chain and require the user to pay gas. TheverifySignatureVRSfunction is slightly more gas optimized and should be the default method utilized.
EOA Registry Functions
verifySignature
Function called by an EOA with their signature data, as a bytes array, to verify their address is an EOA. The EOA Registry checks the signature against a predefined value and if it is valid updates the verified EOA mapping to mark the account as a verified EOA.
function verifySignature(bytes calldata signature) external;
verifySignatureVRS
Function called by an EOA with their signature, split into v, r, and s values for gas efficiency, to verify their address is an EOA.
The EOA Registry checks the signature against a predefined value and if it is valid updates the verified EOA mapping to mark the account
as a verified EOA.
function verifySignatureVRS(uint8 v, bytes32 r, bytes32 s) external;
isVerifiedEOA
Function called to check if a specified account has previously verified with the EOA Registry.
function isVerifiedEOA(address account) public view override returns (bool);
