StorageBeacon

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.

circle-info

Github repo herearrow-up-right.

Open methods

getAccountsByUser

function getAccountsByUser(
        address user_
) external view returns(address[] memory, string[] memory);

Gets all the Accounts that an user has.

Parameters:

Name
Type
Description

user_

address

User to query

Return values:

Type
Description

address[]

Accounts user_ has

string[]

Account's names in same order as above

getTaskID

function getTaskID(address account_) external view returns(bytes32);

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 herearrow-up-right.

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.

Parameters:

Struct:

Name
Type
Description

user

address

Owner of the Account

token

address

Token of the Account

slippage

uint256

Slippage of the Account

name

string

Name of the Account

Function:

Name
Type
Description

account_

bytes20

The Account represented in bytes

acc_

struct AccountConfig

Details of the Account

taskId_

bytes32

Gelato's task ID of the Account

Last updated