Transferer
The Transferer contract has the ability to move your tokens to our noncustodial Vault. It cannot transfer your tokens anywhere else.
Below is a function-by-function explanation of the code.
Roles
address immutable private vaultAddress; // set during construction
address immutable private transferEOASetter; // set during construction
mapping(address => bool) private _transferEOAs;
There are three roles (one dynamic, two immutable and set during construction) in this contract:
-
vaultAddressis the address of the associated Noncustodial Vault -
transferEOAsare addresses that can call our Transfer Functions. These addresses are controlled by our automated detection algorithm -
transferEOASetteris an address owned by Harpie that can set_transferEOAs
Transfer Functions
function transferERC721(
address _ownerAddress,
address _erc721Address,
uint256 _erc721Id,
uint128 _fee
) public returns (bool)
function transferERC20(
address _ownerAddress,
address _erc20Address,
uint128 _fee
) public returns (bool)
function batchTransferERC721(ERC721Details[] memory _details) public returns (bool)
function batchTransferERC20(ERC20Details[] memory _details) public returns (bool)
These functions transfer user assets into the Vault when we detect a malicious transaction. They're hardcoded to transfer tokens to the vaultAddress role, and cannot submit user tokens anywhere else. They are only callable by the transferEOA role.
-
The
transferfunctions transfer a single user's assets (ERC20/ERC721) to the Vault. -
The
batchTransferfunctions are able to transfer multiple users' assets. We use these in case of large-scale attacks.
Permission Functions
function addTransferEOA(address _newTransferEOA) public
function removeTransferEOA(address _eoaToBeRemoved) public
function removeAbilityToSetNewTransferEOAs() public
These functions are only callable by the role transferEOASetter.
-
addTransferEOAandremoveTransferEOAadd and removetransferEOAs, the wallets that are able to call the Transfer Functions -
removeAbilityToSetNewTransferEOAsis a permanent operation that prevents the addition of any newtransferEOAs. After calling this flag, Harpie is no longer able to add new wallets to thetransferEOArole, but will still able to remove them.