原则上不建议在属性中存储能够通过commit元数据确定的数据,如能通过提交时间确定的时间。
标准库中的trait:
trait likeable {
iterset like: option<bool>
}
其中,属性like的值:some(true)为点赞,some(false)为点踩,none为还原初始值。
使用query by operator。由于是iterset,得到的是唯一值,即一个option<bool>。再按照以上定义解释值即可。
添加额外validator,拒绝some(false)值。
添加reducer,reduced value类型uint,为点赞数;reducer每遇到一个some(true)值增加1,忽略其他所有值。
添加reducer,reduced value类型int,为点赞点踩总和数;reducer每遇到一个some(true)值增加1,每遇到一个some(false)值减少1,忽略none值。
添加reducer,reduced value类型uint,为点赞数;reducer每遇到一个some(true)值增加1,忽略其他所有值。
添加reducer,reduced value类型uint,为点踩数;reducer每遇到一个some(false)值增加1,忽略其他所有值。建议不要直接存储为有符号整数,而是存储为无符号整数,显示该值的时候再在前面加上负号。
标准库中的trait:
trait voteable {
iterlist vote: uint
defaultable mut vote-max: uint
}
其中,属性vote有一个reducer by operator,reduced value类型为uint,名为votes,reducer行为是将所有值加在一起;validator是检查当前提交操作者的votes加上当前值是否超过vote-max;
属性vote-max可添加额外validator改为const。
使用votes。
添加reducer,reduced value类型uint,为投币总数;reducer行为是将所有值加在一起。
【将以上这些「添加reducer/validator」全部写入标准库】