The basic idea of mass migration is pretty simple. While deposit
transactions on the layer-1 contract create a MassDeposit
object, "Migration" type outputs of transactions can create a MassMigration
that constructs a MassDeposit
for its destination network.
{% hint style="info" %} A transaction can have UTXO, Migration, or Withdrawal type of outputs. To check more details, see "Transaction" page. {% endhint %}
In Zkopru, for the migration, there are source network and destination network. Once a mass migration on the source network is finalized(code here), the migrateTo
function on the source network can be executed. The function moves the assets, including Ether, ERC20, and ERC721, while creating a MassDeposit object for the destination network.
Therefore, the destination network should implement acceptMigration
function. Also, it is recommended to allow migrations only from trusted networks.
{% hint style="info" %} The migration standard between rollups is going to be standardized through EIP. {% endhint %}