Checks if a value is being changed use more gas#
Informational
In Create.sol the updateCanvas function receives Schema.Canvas struct named update. It then compares every value of this struct to current configuration of canvas to see if it is different. In case it is, it saves it to storage. However, this does not save any more gas compared to just overwriting storage variable without checking. Overwriting a storage variable consumes almost the same amount of gas as comparing it to the stored value. Furthermore, if a value is changed, you are both checking and storing which consumes around 1000 gas more than just storing. Also, you are saving only 40 gas if a variable is not changed.* So we can expect that overall checking for changes consumes more gas than necessary and also makes the code less readable.
Recommendation#
Consider removing checking for changes. Only leave the checks that are needed to validate that the change follows the rules.
For example:
change the above code to:*Notice: The gas amounts are derived from my testing.