---
# System prepended metadata

title: REF AMAA review

---

# REF AMAA review

## suggestions

- `assert_owner` 和 `is_owner_or_operators` 可以加入one yocto校验        
目前所有的特权方法都会手动`assert_one_yocto`，不如直接加到上面两个方法中。避免忘记。

- `upgrade`方法是不是需要one yocto？

- 对外屏蔽 `ActionName`            
类似于 `wrap.near|wrap` 这样的action name在我看来更像是一个代码实现上的细节，没有必要对外暴露。暴露后增加了外部用户的理解和使用成本。建议在对外接口上不要直接暴露这个 action name。          
比如 `set_permission` 这个方法的参数可以改成 `(contract_id: String, method: String, limit: Limit)`，在代码里自行构建 `ActionName`。这样也可以对传进来的contractId和method进行校验，屏蔽掉不合法的配置。

- `list_permissions` 中分页参数limit的默认值             
现在的做法是用permissions的key length作为limit参数的默认值，但是一旦permissions很多，这样很可能会超gas，建议使用一个固定常量作为limit的默认值（比如20），同时调用时检查传入的limit不能超过这个值（防止长度无限制的单页）

## discussion

- permission的控制粒度问题            
按照目前的设计，对于同一个action_name，所有的caller都共享相同的权限，无法更加细致的对不同caller指定不同的调用权限，感觉有点不太灵活。比如希望让alice和bob都允许调用 `*|foo` 方法，但是alice只能attach 1 yocto NEAR，而bob可以attach 1000 NEAR，这样似乎就没法做到。原因是因为 `*|foo` 这个域下面没有更细粒度的结构了。         
目前的做法现有的需求也许是可以满足的，不过考虑到可扩展性的话还是可以考虑更细化一点。
