Context 与 ChainEnv
在快速开始中,我们已经看到了如何自定义一个 Writing
,此处有两个参数, 一个是context
,一个是ChainEnv
,他们分别表示两个不同
的用途。
Context 表示与链外交互的上下文信息。 它包括 调用者地址
、传入的参数
、
event
、error
。
- 客户端调用者(即发起交易的人)传入的参数会以json的形式序列化,并按
string -> interface{}
这样map的方式存在context
中。
我们通过context
获取 客户端调用者的密码学地址
和 调用者传入的参数
。 从context
获取参数的时候可以以任意go基础类型 去获取参数。 如果参数类型为自定义的,则需要先通过context.Get(paramName)
获取到interface
再自行转化。可以直接获取参数的类型有:
common.Hash([32]byte)
common.Address([20]byte)
string
[]byte
bool
int, int8, int16, int32, int64
uint, uint8, uint16, uint32, uint64
float32, float64
- 同时如果需要向链外返回
event
的时候, 也需要通过context
来完成(ctx.EmitEvent([]byte)
)。
ChainEnv 包含了所有链相关的一切环境组件,其中有 blockchain
、
txdb
、 txpool
、 state
、Execute
、 P2pNetwork
。 可供开发者直接操作到框架底层的组件。