You definitely want to write unit tests (ideally 100% coverage).
I would start following the OpenZeppelin Learn guides on Writing Automated Smart Contract Tests is a great place to start.
Also use Test smart contracts like a rockstar
Feel free to ask questions about writing tests. Let me know if you get stuck.
I would mock them for unit tests.
I would also look at doing some additional testing using ganache --fork
of mainnet to test against the real thing.
With an ERC20 token you would need the user to approve an allowance (or use Dai's permit
).
My thought would be to work on the Escrow functionality before adding meta transactions.
Glad to hear that you have appropriate good stuff in your repository.
You may want to look at Solidity Docgen 0.5
Nothing like generating documentation from your code to see how good your natspec is.
I assume there would be some smallish difference in deployment costs. (Feel free to try it out and compare).
My main thought is having anything specific for testing in your mainnet contract.