contract pattern