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