文章目录
1 技术栈
1.1 经典软件工程管理
Fabric应用开发者需要了解经典软件工程管理:
- 依赖管理(调用第三方库):govendor/dep, npm/yarn, gradle/maven, pip
- 异常处理:defer, saync/await
- 测试流水线:Smoke, Unit/Mock, SI tests
1.2 PKI密码体系
Fabric应用开发者需要精通PKI密码体系,包括:
- ECDSA
- X.509
- HSM和pkcs11
1.3 chaincode开发语言
chaincode开发支持的语言包括:
- Golang
- Node.js
- Java
1.4 devOps运维开发
devOps运维开发技术栈包括:
- 受认证的Fabric管理员(Certified Hyperledger Fabric Administrator):CLI in Unix/Linux
- SDK语言:Java/Golang/Node.js/Python
- Docker
- gRPC
2 chaincode API解析
2.1 chaincode代码示例
chaincode的package包名必须是main,因为容器里会去找main函数。
必须实现Init和Invoke两个函数,这样才会构成一个chaincode。在初始化和升级chaincode时,会调用到Init函数;query以及invoke的第一阶段,会调用到Invoke函数。
package main
type StressChaincode struct{
}
//called when initialize, upgrade
func (t *StressChaincode) Init(stub shim.ChaincodeStubInterface) peer.Response {
return shim.Success(nil)
}
//called when query, phase-1 of invoke
func (t *StressChaincode) Invoke(stub shim.ChaincodeStubInterface) peer.Response {
return shim.Success(nil)
}
func main() {
err:=shim.Start(new(StressChaincode))
}
2.2 chaincode接口(shim.ChaincodeStubInterface)
获取参数(Params)
从外部传入chaincode的参数列表可以通过下面的两个接口获取到。GetFunctionAndParameters可以将第一个元素转换成功能名称。
GetArgs() [][]byte
GetFunctionAndParameters() (string, []string) //returns 1st argument as function,"fcn", rest as params
访问世界状态(Access world states)
Fabric的数据存储采用的是KV形式,根据key值就可以从数据库中获取、更新、删除数据。
GetState(key string)
PutState(key string, value []