contractapi写的链码的调试方式?
时间: 2023-05-28 16:02:16 浏览: 97
在使用Contract API编写链码时,可以使用以下几种方式进行调试:
1. MockStub:Contract API提供了一个MockStub对象,可以用于本地测试链码。在MockStub中,可以使用链码的各种方法进行测试,并可以模拟调用链码的各种参数和数据。
2. DevMode:链码在部署到Peer节点前,可以在开发模式下进行测试和调试。DevMode可以在Peer节点上启动一个测试链码容器,以便进行调试,在这个模式下,可以直接在容器中修改链码参数和逻辑并进行测试。
3. TestNetwork:Contract API中提供了一个TestNetwork工具,可以用来启动一个本地的Fabric网络,模拟实际的Fabric节点,并可以使用Contract API编写的链码进行测试。
4. Debugging:如果使用各种调试工具,如Visual Studio Code等,可以使用调试方式来调试链码。对于这种方式,需要首先对链码进行编译,并将其部署到Peer节点上才能进行调试。
相关问题
可以只用contractapi写链码?
是的,可以只使用contractapi来编写链码。contractapi是fabric-sdk-go中的一个模块,可以帮助开发者以更简洁和易读的方式编写链码。该模块提供了一些高级功能和便捷的API来执行一些常见的任务,例如访问状态数据库、部署和实例化链码等。但需要注意的是,contractapi是建立在fabric-sdk-go之上的,因此开发者需要先了解和熟悉fabric-sdk-go的基础知识。
如何用MockStub调试contractapi链码?
MockStub 是 Chaincode 开发中常用的工具之一,可以在没有实际网络的情况下进行单元测试和本地调试。
以下是使用 MockStub 调试 contractapi 链码的步骤:
1. 引入必要的包
```go
import (
"github.com/hyperledger/fabric-chaincode-go/pkg/contractapi"
"github.com/hyperledger/fabric-chaincode-go/pkg/mocks"
)
```
2. 编写测试代码
```go
func TestMyChaincode(t *testing.T) {
cc := new(MyChaincode)
mockStub := mocks.NewStub("mycc", cc)
// 模拟调用 Init 方法
res := mockStub.MockInit("tx1", [][]byte{[]byte("init"), []byte("100")})
if res.Status != shim.OK {
t.Errorf("Init failed: %s", res.Message)
}
// 模拟调用 Invoke 方法
res = mockStub.MockInvoke("tx2", [][]byte{[]byte("transfer"), []byte("tom"), []byte("50")})
if res.Status != shim.OK {
t.Errorf("Invoke failed: %s", res.Message)
}
// 模拟获取状态
res = mockStub.MockInvoke("tx3", [][]byte{[]byte("query"), []byte("tom")})
if res.Status != shim.OK {
t.Errorf("Query failed: %s", res.Message)
}
if string(res.Payload) != "50" {
t.Errorf("Query result incorrect. Expecting 50, but got %s", string(res.Payload))
}
}
```
3. 运行测试
在终端中运行以下命令,即可执行测试代码:
```shell
go test -v mycc_test.go
```
以上是使用 MockStub 调试 contractapi 链码的方法。注意,MockStub 可能不能完全模拟实际网络环境,因此在实际环境中仍需谨慎测试。
阅读全文