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.
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.