github.com/turingchain2020/turingchain@v1.1.21/cmd/tools/doc/gendapp.md (about) 1 2 # turingchain gendapp 3 根据定义的合约protobuf原型文件,自动生成turingchain dapp基本代码 4 5 ### 编译 6 ``` 7 //本地存在turingchain代码,该步骤可省略 8 $ go get github.com/turingchain2020/turingchain 9 //编译turingchain tools 10 $ go build -i -o $GOPATH/bin/turingchain-tool github.com/turingchain2020/turingchain/cmd/tools 11 ``` 12 13 ### 使用 14 ``` 15 //查看命令使用方法 16 $ turingchain-tool gendapp --help 17 Usage: 18 tools gendapp [flags] 19 20 Flags: 21 -h, --help help for gendapp 22 -n, --name string dapp name 23 -o, --output string go package for output (default github.com/turingchain2020/plugin/plugin/dapp/) 24 -p, --proto string dapp protobuf file path 25 ``` 26 * -n 指定合约名字,不能含有空格和特殊字符 27 * -p 指定合约的protobuf文件 28 * -o 生成代码的输出目录路径,此处是go包路径,及相对于$GOPATH/src的路径, 29 默认为官方项目路径($GOPATH/src/github.com/turingchain2020/plugin/plugin/dapp/) 30 31 举例: 32 ``` 33 // 默认路径生成名为demo的合约代码 34 $ turingchain-tool gendapp -n demo -p ./demo.proto 35 36 // 指定输出包路径 37 $ turingchain-tool gendapp -n demo -p ./demo.proto -o github.com/turingchain2020/turingchain/plugin/dapp/ 38 39 ``` 40 ### proto规范 41 * 定义合约交易行为结构,采用**oneof value**形式,且名称必须为**NameAction**格式, 42 如demo合约,定义echo和hello两种交易行为 43 ```proto 44 message DemoAction { 45 oneof value { 46 DemoHello hello = 1; 47 DemoEcho echo = 2; 48 } 49 int32 ty = 3; 50 } 51 ``` 52 * package name设为types,适配后续生成目录结构 53 ```proto 54 package types; 55 ``` 56 57 * 定义service,直接以合约名作为名称 58 ```proto 59 service demo { 60 } 61 ``` 62 63 64 65 66 ### 代码 67 ##### 目录结构,以demo合约为例 68 ``` 69 demo 70 ├── cmd //包含官方ci集成相关脚本 71 │ ├── build.sh 72 │ └── Makefile 73 ├── commands //合约客户端模块 74 │ └── commands.go 75 ├── executor //执行器模块 76 │ ├── demo.go 77 │ ├── exec_del_local.go 78 │ ├── exec.go 79 │ ├── exec_local.go 80 │ └── kv.go 81 ├── plugin.go 82 ├── proto //proto文件及生成pb.go命令 83 │ ├── create_protobuf.sh 84 │ ├── demo.proto 85 │ └── Makefile 86 ├── rpc //rpc模块 87 │ ├── rpc.go 88 │ └── types.go 89 └── types //类型模块 90 └── demo.go 91 92 ``` 93 ##### 生成pb.go文件 94 pb.go文件基于protobuf提供的proto-gen-go插件生成,这里protobuf的版本必须和turingchain引用的保持一致, 95 具体可以查看turingchain项目go.mod文件,github.com/golang/protobuf库的版本 96 ``` 97 //进入到上述proto目录执行相关脚本,将会在types目录下生成对应pb.go文件 98 $ cd proto && make 99 ``` 100 101 ##### 后续开发 102 在生成代码基础上,需要实现交易创建,执行,及所需rpc服务<br/> 103 初次开发可以参考官方简单计算器合约 104 [开发步骤](https://github.com/turingchain2020/turingchain/blob/master/cmd/tools/doc/gencalculator.md) 105