rename `need` to `dependency`
add promise style
upgrade circuit to use promise style