Instead of constantly duplicating past contracts, you can also save contracts as templates from your list of contracts.
Just select 'Save as template' from the dropdown, enter a name for it that will help you identify it in the future, and voila...
Now, you can select it from the available templates the next time you create a new contract. This will automatically fill in all past fields (except the client information, which is inherited from the project you're using).
Note: You cannot rename the templates or delete them for the time being. You can always create new templates reflecting your changes, though.