github.com/iov-one/weave (go): Package weave defines all common interfaces to weave together the various subpackages, as well as implementations of some of the simpler components (when interfaces would be too much overhead).  We pass context through context.Context between app, middleware, and handlers. To do so, weave defines some common keys to store info, such as block height and chain id. Each extension, such as auth, may add its own keys to enrich the context with specific data.  There should exist two functions for every XYZ of type T that we want to support in Context:  WithXYZ may error/panic if the value was previously set to avoid lower-level modules overwriting the value (eg. height, header)
Keywords: abci|blockchain|framework|tendermint