Convert update! to with-transaction impl
Add transaction test