There are 2 different types of security provided on Matic Network for decentralized app developers:

The Proof-of-Stake (PoS) approach is the easiest way to get started, because you get to retain the same tooling as Ethereum, and for most applications, the only thing they need to change is the Web3 provider RPC URL. The PoS layer security is provided by the validators that stake on the Matic Network using MATIC tokens. This will go live with our mainnet with ~100 validators to start with.

However, if you opt to choose Plasma security - that ensures the security of your assets even if the sidechain goes down in the worst case scenario - then you need to modify/adapt your contracts to the specific constructions and/or data schema that the Plasma contracts on the Ethereum root chain mandate.

We need maintain the contract structure assumptions on the Matic chain to ensure Plasma security, otherwise the model gets broken. So if you need Plasma security, you need to write your contracts safely with restrictions as mandated.

The first step in moving an asset from Ethereum to Matic is mapping the respective token contract addresses that need to be mirrored.

The contract living on Matic chain is a restricted contract - see https://github.com/maticnetwork/contracts/blob/master/contracts/child/ChildERC20.sol and https://github.com/maticnetwork/contracts/blob/master/contracts/child/BaseERC20.sol for reference.

Notice some of the data structures that we use to keep track of asset transfers on Matic.

event Deposit(
    address indexed token,
    address indexed from,
    uint256 amount,
    uint256 input1,
    uint256 output1
  );

  event Withdraw(
    address indexed token,
    address indexed from,
    uint256 amount,
    uint256 input1,
    uint256 output1
  );

  event LogTransfer(
    address indexed token,
    address indexed from,
    address indexed to,
    uint256 amount,
    uint256 input1,
    uint256 input2,
    uint256 output1,
    uint256 output2
  );

These are absolutely essential to the Plasma contracts that read this data to ensure data verification of the sidechain via fraud proofs and Plasma predicates.