Main storage contract for the subsystem in L1 and first version of it. More StorageBeacons with more variables can be added by upgrading it using upgradeStorageBeacon() from ozUpgradeableBeacon (a diagram of this upgrade technique can be seen here).
This contract gets queried for storage from ProxyFactory, ozPayMe, each ozAccountProxy ever created, and Emitter; and goes hand-in-hand with ozUpgradeableBeacon as the pivot point for calls.
Gets the Gelato task ID that was created for an Account. This is the task that allows the autonomous call on each Account.
Parameters:
Name
Type
Description
account_
address
Account to get the task from
Return values
Type
Description
bytes32
Gelato's task ID
getTokenDatabase
Gets the group of stablecoins an user can choose as a final coin destination in L2.
Return values:
Type
Description
address[]
Tokens available to be chosen by user
isUser
Queries if an user has ever created an Account.
Parameters:
Name
Type
Description
user_
address
User to query
Return values:
Type
Description
boolean
If the user has created an Account before
queryTokenDatabase
Gets if a token exist in the group of tokens an user can choose as the final coin to have in L2.
Parameters:
Name
Type
Description
token_
address
Token to query in database
Return values:
Type
Description
boolean
If the token exist in the database or not
verify
Verifies if an Account was created in Özel.
Parameters:
Name
Type
Description
user_
address
Owner of the Account
acc_user_
bytes32
Full Account address (in bytes -20) plus the first 12 bytes of the owner's address
Return values:
Type
Description
boolean
If the Account was created in Özel or not
Owner methods
addAuthorizedSelector
Adds a selector to the group of authorized functions which calldata is untampered when calling them through the implementation of the beacon (ozPayMe in this case).
Parameters:
Name
Type
Description
selector_
bytes4
Selector of function to be authorized
addTokenToDatabase
Adds a token -in L1- to the group of stablecoins from where an user can choose as the final coin to receive in L2 when creating an Account.
Parameters:
Name
Type
Description
newToken_
address
New token to be added
changeEmergencyMode
The EmergencyMode configuration is the parameter used for the Uniswap emergency swap -in ozPayMe - that would be done in case it's not possible to submit a retryable ticket.
Parameters:
Struct:
Name
Type
Description
swapRouter
ISwapRouter
Instance of the Uniswap V3 router
priceFeed
AggregatorV3Interface
Instance of Chainlink's data feeds' methods
poolFee
uint24
Fee of the Uniswap pool
tokenIn
address
Token coming in for the swap
tokenOut
address
Token that the user will receive
Function:
Name
Type
Description
newEmode_
struct EmergencyMode
New EmergencyMode configuration
changeEmitterStatus
The status of the Emitter is what allows the Akash deployments to review transactions for manual redeems. If it's off, no transactions would be checked.
The idea of this function is to disable this action once the ETH transfer flow is fully migrated to L2, and the bridging mechanism is completely removed from the system.
Parameters:
Name
Type
Description
newStatus_
boolean
Is the Emitter forwarding txs or not
changeGasPriceBid
Changes the hard-coded value for the L2 gasPrice. This is what the retryable ticket uses as a reference when executing the transaction on L2.
It's hard-coded since it's not possible to get the gas price of Arbitrum on Ethereum onchain, and it's the biggest vulnerability of the system, and the reason why Akash is needed in the first place.
Undersubmitting the gasPrice would cause the retryable ticket to be created in L1, but not auto-redeemed in L2. Meaning that the transaction wouldn't get automatically executed, and a manual redeem (in L2) would be necessary for executing the second leg of the bridging. More info about it in Arbitrum's docs here.
Parameters:
Name
Type
Description
newGasPriceBid
uint256
New L2 gas price expressed in gwei
removeTokenFromDatabase
Removes a token -in L2- from the group of stablecoins in L2 that an user can choose when creating an Account.
Parameters:
Name
Type
Description
toRemove_
address
Token to be removed from group.
System methods
multiSave
Saves and associates the details of an Account with itself and its Gelato's task id.