Originally, `fail` is added to simplify error handling, avoiding large changes on the Txn() interface API. But it turns out that `fail` becomes the root of many bugs. So this commit remove the `fail` and make an API refactory.
Originally, `fail` is added to simplify error handling, avoiding large changes on the Txn() interface API. But it turns out that `fail` becomes the root of many bugs. So this commit remove the `fail` and make an API refactory.