Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
5226c257
Commit
5226c257
authored
Dec 30, 2020
by
jiangpeng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add dapp vote
parent
2983a997
Show whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
2790 additions
and
0 deletions
+2790
-0
go.sum
go.sum
+37
-0
init.go
plugin/dapp/init/init.go
+1
-0
Makefile
plugin/dapp/vote/cmd/Makefile
+2
-0
build.sh
plugin/dapp/vote/cmd/build.sh
+11
-0
commands.go
plugin/dapp/vote/commands/commands.go
+75
-0
createtx.go
plugin/dapp/vote/commands/createtx.go
+197
-0
query.go
plugin/dapp/vote/commands/query.go
+154
-0
action.go
plugin/dapp/vote/executor/action.go
+156
-0
checktx.go
plugin/dapp/vote/executor/checktx.go
+161
-0
errors.go
plugin/dapp/vote/executor/errors.go
+24
-0
exec.go
plugin/dapp/vote/executor/exec.go
+31
-0
exec_del_local.go
plugin/dapp/vote/executor/exec_del_local.go
+20
-0
exec_local.go
plugin/dapp/vote/executor/exec_local.go
+211
-0
key.go
plugin/dapp/vote/executor/key.go
+19
-0
query.go
plugin/dapp/vote/executor/query.go
+152
-0
table.go
plugin/dapp/vote/executor/table.go
+132
-0
util.go
plugin/dapp/vote/executor/util.go
+78
-0
vote.go
plugin/dapp/vote/executor/vote.go
+52
-0
plugin.go
plugin/dapp/vote/plugin.go
+23
-0
Makefile
plugin/dapp/vote/proto/Makefile
+2
-0
create_protobuf.sh
plugin/dapp/vote/proto/create_protobuf.sh
+4
-0
vote.proto
plugin/dapp/vote/proto/vote.proto
+117
-0
rpc.go
plugin/dapp/vote/rpc/rpc.go
+7
-0
types.go
plugin/dapp/vote/rpc/types.go
+31
-0
vote.go
plugin/dapp/vote/types/vote.go
+106
-0
vote.pb.go
plugin/dapp/vote/types/vote.pb.go
+987
-0
No files found.
go.sum
View file @
5226c257
...
...
@@ -30,15 +30,19 @@ github.com/NebulousLabs/merkletree v0.0.0-20181203152040-08d5d54b07f5/go.mod h1:
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q=
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/VictoriaMetrics/fastcache v1.5.3 h1:2odJnXLbFZcoV9KYtQ+7TH1UOq3dn3AssMgieaezkR4=
github.com/VictoriaMetrics/fastcache v1.5.3/go.mod h1:+jv9Ckb+za/P1ZRg/sulP5Ni1v49daAVERr0H3CuscE=
github.com/XiaoMi/pegasus-go-client v0.0.0-20181029071519-9400942c5d1c h1:3fAhdHMhoSG57DjJ/dqLFfgD+FoooPbQH6szINbrr3k=
github.com/XiaoMi/pegasus-go-client v0.0.0-20181029071519-9400942c5d1c/go.mod h1:KcL6D/4RZ8RAYzQ5gKI0odcdWUmCVlbQTOlWrhP71CY=
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM=
github.com/apache/thrift v0.0.0-20171203172758-327ebb6c2b6d h1:b/FqDLjWXDQI6XBYvWDVgEKv3xOTs68qRkuqyU37lBc=
github.com/apache/thrift v0.0.0-20171203172758-327ebb6c2b6d/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847 h1:rtI0fD4oG/8eVokGVPYJEW1F88p1ZNgXiEIs9thEE4A=
github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/benbjohnson/clock v1.0.2 h1:Z0CN0Yb4ig9sGPXkvAQcGJfnrrMQ5QYLCMPRi9iD7YE=
...
...
@@ -56,13 +60,17 @@ github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcug
github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI=
github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw=
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo=
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d h1:yJzD/yFppdVCf6ApMkVy8cUxV0XrxdP9rVf6D87/Mng=
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw=
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY=
github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc=
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8=
...
...
@@ -71,6 +79,7 @@ github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.0.1-0.20190104013014-3767db7a7e18/go.mod h1:HD5P3vAIAh+Y2GAxg0PrPN1P8WkepXGpjbUPDHJqqKM=
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U=
...
...
@@ -90,9 +99,11 @@ github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwc
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0=
github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4=
github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea h1:j4317fAZh7X6GqbFowYdYdI0L9bwxL07jyPZIdepyZ0=
github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ=
github.com/decred/base58 v1.0.2 h1:yupIH6bg+q7KYfBk7oUv3xFjKGb5Ypm4+v/61X4keGY=
github.com/decred/base58 v1.0.2/go.mod h1:pXP9cXCfM2sFLb2viz2FNIdeMWmZDBKG3ZBYbiSM78E=
...
...
@@ -115,7 +126,9 @@ github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa h1:XKAhUk/dtp+CV0VO6mhG2V7jA9vbcGcnYF/Ay9NjZrY=
github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
...
...
@@ -128,6 +141,7 @@ github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv
github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI=
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww=
github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98=
github.com/go-interpreter/wagon v0.6.0 h1:BBxDxjiJiHgw9EdkYXAWs8NHhwnazZ5P2EWBW5hFNWw=
...
...
@@ -144,6 +158,7 @@ github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3 h1:zN2lZNZRflqFyxVaTIU61KNKQ9C0055u9CAfpmqUvo4=
github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3/go.mod h1:nPpo7qLxd6XL3hWJG/O60sR8ZKfMCiIoNap5GvD12KU=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
...
...
@@ -256,6 +271,7 @@ github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlT
github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0=
github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356 h1:I/yrLt2WilKxlQKCM52clh5rGzTKpVctGT1lH4Dc8Jw=
github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU=
github.com/kevinms/leakybucket-go v0.0.0-20200115003610-082473db97ca h1:qNtd6alRqd3qOdPrKXMZImV192ngQ0WSh1briEO33Tk=
github.com/kevinms/leakybucket-go v0.0.0-20200115003610-082473db97ca/go.mod h1:ph+C5vpnCcQvKBwJwKLTK3JLNGnBXYlG7m7JjoC/zYA=
...
...
@@ -263,7 +279,9 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
github.com/klauspost/compress v1.8.2 h1:Bx0qjetmNjdFXASH02NSAREKpiaDwkO1DRZ3dV2KCcs=
github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/cpuid v1.2.1 h1:vJi+O/nMdFt0vqm8NZBI6wzALWdA2X+egi0ogNyrC/w=
github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d h1:68u9r4wEvL3gYg2jvAOgROwZ3H+Y3hIDk4tbbmIjcYQ=
...
...
@@ -436,6 +454,7 @@ github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXT
github.com/mattn/go-isatty v0.0.5 h1:tHXDdz1cpzGaovsTB+TVB8q90WEokoVmfMqoVcrLUgw=
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
...
...
@@ -443,6 +462,7 @@ github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyex
github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.30 h1:Qww6FseFn8PRfw07jueqIXqodm0JKiiKuK0DeXSqfyo=
github.com/miekg/dns v1.1.30/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
github.com/miguelmota/go-solidity-sha3 v0.1.0 h1:RoRqUD/qKqZCZIoAGVJhX6gEHeD6333uQv+jhBGpRDk=
github.com/miguelmota/go-solidity-sha3 v0.1.0/go.mod h1:FuaBKCJUkJcmPqCuKvPFYfzK1auYGr5+8i2evSBIm/Q=
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g=
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ=
...
...
@@ -516,6 +536,7 @@ github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c h1:1RHs3tNxjXGHeul8z2t6H2N2TlAqpKe5yryJztRx4Jk=
github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
...
...
@@ -530,6 +551,7 @@ github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFSt
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34=
github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/perlin-network/life v0.0.0-20191203030451-05c0e0f7eaea h1:okKoivlkNRRLqXraEtatHfEhW+D71QTwkaj+4n4M2Xc=
...
...
@@ -541,6 +563,7 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.2 h1:awm861/B8OKDd2I/6o1dy3ra4BamzKhYOiGItCeZ740=
...
...
@@ -556,9 +579,11 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R
github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE=
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150 h1:ZeU+auZj1iNzN8iVhff6M38Mfu73FQiJve/GEXYJBjE=
github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563 h1:dY6ETXrvDG7Sa4vE8ZQG4yqWg6UnOcbqTAahkV813vQ=
github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE=
github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho=
github.com/robertkrimen/otto v0.0.0-20170205013659-6a77b7cbc37d/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY=
github.com/robertkrimen/otto v0.0.0-20180617131154-15f95af6e78d h1:1VUlQbCfkoSGv7qP7Y+ro3ap1P1pPZxgdGVqiTVy5C4=
...
...
@@ -571,6 +596,7 @@ github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubr
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY=
github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0=
...
...
@@ -588,15 +614,20 @@ github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc=
github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg=
github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q=
github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 h1:gIlAHnH1vJb5vwEjIp5kBj/eu99p/bl0Ay2goiPe5xE=
github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw=
github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 h1:njlZPzLwU639dk2kqnCPPv+wNjq7Xb6EfUxe/oX0/NM=
github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d h1:gZZadD8H+fF+n9CmNhYL1Y0dJB+kLOmKd7FbPJLeGHs=
...
...
@@ -605,11 +636,14 @@ github.com/tjfoc/gmsm v1.3.1/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn
github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM=
github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
github.com/twitchyliquid64/golang-asm v0.0.0-20190126203739-365674df15fc/go.mod h1:NoCfSFWosfqMqmmD7hApkirIK9ozpHjxRnRxs1l413A=
github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef h1:wHSqTBrZW24CsNJDfeh9Ex6Pm0Rcpc7qrgKBiL44vF4=
github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasthttp v1.5.0 h1:dhq+O9pmNZFF6qAXpasMO1xSm7dL4qEz2ylfZN8BG9w=
github.com/valyala/fasthttp v1.5.0/go.mod h1:eriCz9OhZjKCGfJ185a/IDgNl0bg9IbzfpcslMZXU1c=
github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
...
...
@@ -625,6 +659,7 @@ github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:
github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI=
github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee h1:lYbXeSvJi5zk5GLKVuid9TVjS9a0OmLIDKTfoZBL6Ow=
github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg=
github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 h1:1cngl9mPEoITZG8s8cVcUy5CeIBYhEESkOB7m6Gmkrk=
github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees=
github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
...
...
@@ -771,6 +806,7 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
...
...
@@ -793,6 +829,7 @@ gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHO
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
...
...
plugin/dapp/init/init.go
View file @
5226c257
...
...
@@ -30,6 +30,7 @@ import (
_
"github.com/33cn/plugin/plugin/dapp/trade"
//auto gen
_
"github.com/33cn/plugin/plugin/dapp/unfreeze"
//auto gen
_
"github.com/33cn/plugin/plugin/dapp/valnode"
//auto gen
_
"github.com/33cn/plugin/plugin/dapp/vote"
//auto gen
_
"github.com/33cn/plugin/plugin/dapp/wasm"
//auto gen
_
"github.com/33cn/plugin/plugin/dapp/x2ethereum"
//auto gen
)
plugin/dapp/vote/cmd/Makefile
0 → 100644
View file @
5226c257
all
:
bash build.sh
$(OUT)
$(FLAG)
plugin/dapp/vote/cmd/build.sh
0 → 100644
View file @
5226c257
#!/bin/bash
# 官方ci集成脚本
strpwd
=
$(
pwd
)
strcmd
=
${
strpwd
##*dapp/
}
strapp
=
${
strcmd
%/cmd*
}
OUT_DIR
=
"
${
1
}
/
$strapp
"
#FLAG=$2
mkdir
-p
"
${
OUT_DIR
}
"
cp
./build/
*
"
${
OUT_DIR
}
"
plugin/dapp/vote/commands/commands.go
0 → 100644
View file @
5226c257
/*Package commands implement dapp client commands*/
package
commands
import
(
jsonrpc
"github.com/33cn/chain33/rpc/jsonclient"
rpctypes
"github.com/33cn/chain33/rpc/types"
"github.com/33cn/chain33/types"
vty
"github.com/33cn/plugin/plugin/dapp/vote/types"
"github.com/spf13/cobra"
)
/*
* 实现合约对应客户端
*/
// Cmd vote client command
func
Cmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"vote"
,
Short
:
"vote command"
,
Args
:
cobra
.
MinimumNArgs
(
1
),
}
cmd
.
AddCommand
(
//create tx
createGroupCMD
(),
updateMemberCMD
(),
createVoteCMD
(),
commitVoteCMD
(),
//query rpc
groupInfoCMD
(),
voteInfoCMD
(),
memberInfoCMD
(),
listGroupCMD
(),
listVoteCMD
(),
listMemberCMD
(),
)
return
cmd
}
func
markRequired
(
cmd
*
cobra
.
Command
,
params
...
string
)
{
for
_
,
param
:=
range
params
{
_
=
cmd
.
MarkFlagRequired
(
param
)
}
}
func
sendCreateTxRPC
(
cmd
*
cobra
.
Command
,
actionName
string
,
req
types
.
Message
)
{
title
,
_
:=
cmd
.
Flags
()
.
GetString
(
"title"
)
cfg
:=
types
.
GetCliSysParam
(
title
)
rpcAddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
payLoad
:=
types
.
MustPBToJSON
(
req
)
pm
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
cfg
.
ExecName
(
vty
.
VoteX
),
ActionName
:
actionName
,
Payload
:
payLoad
,
}
var
res
string
ctx
:=
jsonrpc
.
NewRPCCtx
(
rpcAddr
,
"Chain33.CreateTransaction"
,
pm
,
&
res
)
ctx
.
RunWithoutMarshal
()
}
func
sendQueryRPC
(
cmd
*
cobra
.
Command
,
funcName
string
,
req
,
reply
types
.
Message
)
{
title
,
_
:=
cmd
.
Flags
()
.
GetString
(
"title"
)
cfg
:=
types
.
GetCliSysParam
(
title
)
rpcAddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
payLoad
:=
types
.
MustPBToJSON
(
req
)
query
:=
&
rpctypes
.
Query4Jrpc
{
Execer
:
cfg
.
ExecName
(
vty
.
VoteX
),
FuncName
:
funcName
,
Payload
:
payLoad
,
}
ctx
:=
jsonrpc
.
NewRPCCtx
(
rpcAddr
,
"Chain33.Query"
,
query
,
reply
)
ctx
.
Run
()
}
plugin/dapp/vote/commands/createtx.go
0 → 100644
View file @
5226c257
package
commands
import
(
"fmt"
"os"
"github.com/33cn/chain33/types"
vty
"github.com/33cn/plugin/plugin/dapp/vote/types"
"github.com/spf13/cobra"
)
func
createGroupCMD
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"createGroup"
,
Short
:
"create tx(create vote group)"
,
Run
:
createGroup
,
Example
:
"createGroup -n=group1 -a=admin1 -m=member1 -m=member2"
,
}
createGroupFlags
(
cmd
)
return
cmd
}
func
createGroupFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"name"
,
"n"
,
""
,
"group name"
)
cmd
.
Flags
()
.
StringArrayP
(
"admins"
,
"a"
,
nil
,
"group admin address array"
)
cmd
.
Flags
()
.
StringArrayP
(
"members"
,
"m"
,
nil
,
"group member address array"
)
cmd
.
Flags
()
.
UintSliceP
(
"weights"
,
"w"
,
nil
,
"member vote weight array"
)
markRequired
(
cmd
,
"name"
)
}
func
createGroup
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
name
,
_
:=
cmd
.
Flags
()
.
GetString
(
"name"
)
admins
,
_
:=
cmd
.
Flags
()
.
GetStringArray
(
"admins"
)
memberAddrs
,
_
:=
cmd
.
Flags
()
.
GetStringArray
(
"members"
)
weights
,
_
:=
cmd
.
Flags
()
.
GetUintSlice
(
"weights"
)
if
name
==
""
{
fmt
.
Fprintf
(
os
.
Stderr
,
"ErrNilGroupName"
)
}
if
len
(
weights
)
==
0
{
weights
=
make
([]
uint
,
len
(
memberAddrs
))
}
if
len
(
weights
)
!=
len
(
memberAddrs
)
{
fmt
.
Fprintf
(
os
.
Stderr
,
"member address array length should equal with vote weight array length"
)
}
members
:=
make
([]
*
vty
.
GroupMember
,
0
)
for
i
,
addr
:=
range
memberAddrs
{
members
=
append
(
members
,
&
vty
.
GroupMember
{
Addr
:
addr
,
VoteWeight
:
uint32
(
weights
[
i
])})
}
params
:=
&
vty
.
CreateGroup
{
Name
:
name
,
Admins
:
admins
,
Members
:
members
,
}
sendCreateTxRPC
(
cmd
,
vty
.
NameCreateGroupAction
,
params
)
}
func
updateMemberCMD
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"updateMember"
,
Short
:
"create tx(update group members)"
,
Run
:
updateMember
,
Example
:
"updateMember -g=id -a=addMember1 -a=addMember2 -r=removeMember1 ..."
,
}
updateMemberFlags
(
cmd
)
return
cmd
}
func
updateMemberFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"groupID"
,
"g"
,
""
,
"group id"
)
cmd
.
Flags
()
.
StringArrayP
(
"addMembers"
,
"a"
,
nil
,
"group member address array for adding"
)
cmd
.
Flags
()
.
UintSliceP
(
"weights"
,
"w"
,
nil
,
"member vote weight array for adding"
)
cmd
.
Flags
()
.
StringArrayP
(
"removeMembers"
,
"r"
,
nil
,
"group member address array for removing"
)
markRequired
(
cmd
,
"groupID"
)
}
func
updateMember
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
groupID
,
_
:=
cmd
.
Flags
()
.
GetString
(
"groupID"
)
addAddrs
,
_
:=
cmd
.
Flags
()
.
GetStringArray
(
"addMembers"
)
weights
,
_
:=
cmd
.
Flags
()
.
GetUintSlice
(
"weights"
)
removeAddrs
,
_
:=
cmd
.
Flags
()
.
GetStringArray
(
"removeMembers"
)
if
groupID
==
""
{
fmt
.
Fprintf
(
os
.
Stderr
,
"ErrNilGroupID"
)
}
if
len
(
weights
)
==
0
{
weights
=
make
([]
uint
,
len
(
addAddrs
))
}
if
len
(
weights
)
!=
len
(
addAddrs
)
{
fmt
.
Fprintf
(
os
.
Stderr
,
"member address array length should equal with vote weight array length"
)
}
addMembers
:=
make
([]
*
vty
.
GroupMember
,
0
)
for
i
,
addr
:=
range
addAddrs
{
addMembers
=
append
(
addMembers
,
&
vty
.
GroupMember
{
Addr
:
addr
,
VoteWeight
:
uint32
(
weights
[
i
])})
}
params
:=
&
vty
.
UpdateMember
{
GroupID
:
groupID
,
RemoveMemberAddrs
:
removeAddrs
,
AddMembers
:
addMembers
,
}
sendCreateTxRPC
(
cmd
,
vty
.
NameUpdateMemberAction
,
params
)
}
func
createVoteCMD
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"createVote"
,
Short
:
"create tx(create vote)"
,
Run
:
createVote
,
}
createVoteFlags
(
cmd
)
return
cmd
}
func
createVoteFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"name"
,
"n"
,
""
,
"vote name"
)
cmd
.
Flags
()
.
StringArrayP
(
"groupIDs"
,
"g"
,
nil
,
"related group id array"
)
cmd
.
Flags
()
.
StringArrayP
(
"options"
,
"o"
,
nil
,
"vote option array"
)
cmd
.
Flags
()
.
Int64P
(
"beginTime"
,
"b"
,
0
,
"vote begin unix timestamp, default set now time"
)
cmd
.
Flags
()
.
Int64P
(
"endTime"
,
"e"
,
0
,
"vote end unix timestamp, default set beginTime + 300 seconds"
)
markRequired
(
cmd
,
"name"
,
"groupIDs"
,
"options"
)
}
func
createVote
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
name
,
_
:=
cmd
.
Flags
()
.
GetString
(
"name"
)
groupIDs
,
_
:=
cmd
.
Flags
()
.
GetStringArray
(
"groupIDs"
)
options
,
_
:=
cmd
.
Flags
()
.
GetStringArray
(
"options"
)
beginTime
,
_
:=
cmd
.
Flags
()
.
GetInt64
(
"beginTime"
)
endTime
,
_
:=
cmd
.
Flags
()
.
GetInt64
(
"endTime"
)
if
name
==
""
{
fmt
.
Fprintf
(
os
.
Stderr
,
"ErrNilVoteName"
)
}
if
len
(
groupIDs
)
==
0
{
fmt
.
Fprintf
(
os
.
Stderr
,
"ErrNilGroupIDs"
)
}
if
len
(
options
)
==
0
{
fmt
.
Fprintf
(
os
.
Stderr
,
"ErrNilOptions"
)
}
if
beginTime
==
0
{
beginTime
=
types
.
Now
()
.
Unix
()
}
if
endTime
==
0
{
endTime
=
beginTime
+
300
}
params
:=
&
vty
.
CreateVote
{
Name
:
name
,
VoteGroups
:
groupIDs
,
VoteOptions
:
options
,
BeginTimestamp
:
beginTime
,
EndTimestamp
:
endTime
,
}
sendCreateTxRPC
(
cmd
,
vty
.
NameCreateVoteAction
,
params
)
}
func
commitVoteCMD
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"commitVote"
,
Short
:
"create tx(commit vote)"
,
Run
:
commitVote
,
}
commitVoteFlags
(
cmd
)
return
cmd
}
func
commitVoteFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"voteID"
,
"v"
,
""
,
"vote id"
)
cmd
.
Flags
()
.
StringP
(
"groupID"
,
"g"
,
""
,
"belonging group id"
)
cmd
.
Flags
()
.
Uint32P
(
"optionIndex"
,
"o"
,
0
,
"voting option index in option array"
)
markRequired
(
cmd
,
"voteID"
,
"groupID"
,
"optionIndex"
)
}
func
commitVote
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
voteID
,
_
:=
cmd
.
Flags
()
.
GetString
(
"voteID"
)
groupID
,
_
:=
cmd
.
Flags
()
.
GetString
(
"groupID"
)
optionIndex
,
_
:=
cmd
.
Flags
()
.
GetUint32
(
"optionIndex"
)
if
voteID
==
""
{
fmt
.
Fprintf
(
os
.
Stderr
,
"ErrNilVoteID"
)
}
if
len
(
groupID
)
==
0
{
fmt
.
Fprintf
(
os
.
Stderr
,
"ErrNilGroupID"
)
}
params
:=
&
vty
.
CommitVote
{
VoteID
:
voteID
,
GroupID
:
groupID
,
OptionIndex
:
optionIndex
,
}
sendCreateTxRPC
(
cmd
,
vty
.
NameCommitVoteAction
,
params
)
}
plugin/dapp/vote/commands/query.go
0 → 100644
View file @
5226c257
package
commands
import
(
"fmt"
"os"
"github.com/33cn/chain33/types"
vty
"github.com/33cn/plugin/plugin/dapp/vote/types"
"github.com/spf13/cobra"
)
func
groupInfoCMD
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"groupInfo"
,
Short
:
"show group info"
,
Run
:
groupInfo
,
}
groupInfoFlags
(
cmd
)
return
cmd
}
func
groupInfoFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"groupID"
,
"g"
,
""
,
"group id"
)
markRequired
(
cmd
,
"groupID"
)
}
func
groupInfo
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
groupID
,
_
:=
cmd
.
Flags
()
.
GetString
(
"groupID"
)
if
len
(
groupID
)
==
0
{
fmt
.
Fprintf
(
os
.
Stderr
,
"ErrNilGroupID"
)
}
params
:=
&
types
.
ReqString
{
Data
:
groupID
,
}
info
:=
&
vty
.
GroupVoteInfo
{}
sendQueryRPC
(
cmd
,
"GetGroup"
,
params
,
info
)
}
func
voteInfoCMD
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"voteInfo"
,
Short
:
"show vote info"
,
Run
:
voteInfo
,
}
voteInfoFlags
(
cmd
)
return
cmd
}
func
voteInfoFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"voteID"
,
"v"
,
""
,
"vote id"
)
markRequired
(
cmd
,
"voteID"
)
}
func
voteInfo
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
voteID
,
_
:=
cmd
.
Flags
()
.
GetString
(
"voteID"
)
if
len
(
voteID
)
==
0
{
fmt
.
Fprintf
(
os
.
Stderr
,
"ErrNilVoteID"
)
}
params
:=
&
types
.
ReqString
{
Data
:
voteID
,
}
info
:=
&
vty
.
VoteInfo
{}
sendQueryRPC
(
cmd
,
"GetVote"
,
params
,
info
)
}
func
memberInfoCMD
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"memberInfo"
,
Short
:
"show member info"
,
Run
:
memberInfo
,
}
memberInfoFlags
(
cmd
)
return
cmd
}
func
memberInfoFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"addr"
,
"a"
,
""
,
"member address"
)
markRequired
(
cmd
,
"addr"
)
}
func
memberInfo
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
addr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"addr"
)
if
len
(
addr
)
==
0
{
fmt
.
Fprintf
(
os
.
Stderr
,
"ErrNilAddress"
)
}
params
:=
&
types
.
ReqString
{
Data
:
addr
,
}
info
:=
&
vty
.
MemberInfo
{}
sendQueryRPC
(
cmd
,
"GetMember"
,
params
,
info
)
}
func
listGroupCMD
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"listGroup"
,
Short
:
"show group list"
,
Run
:
listGroup
,
}
listCmdFlags
(
cmd
)
return
cmd
}
func
listGroup
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
runListCMD
(
cmd
,
args
,
"ListGroup"
,
&
vty
.
GroupVoteInfos
{})
}
func
listVoteCMD
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"listVote"
,
Short
:
"show vote list"
,
Run
:
listVote
,
}
listCmdFlags
(
cmd
)
return
cmd
}
func
listVote
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
runListCMD
(
cmd
,
args
,
"ListVote"
,
&
vty
.
VoteInfos
{})
}
func
listMemberCMD
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"listMember"
,
Short
:
"show member list"
,
Run
:
listMember
,
}
listCmdFlags
(
cmd
)
return
cmd
}
func
listMember
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
runListCMD
(
cmd
,
args
,
"ListMember"
,
&
vty
.
MemberInfos
{})
}
func
listCmdFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"startItem"
,
"s"
,
""
,
"list start item id, default nil value"
)
cmd
.
Flags
()
.
Uint32P
(
"count"
,
"c"
,
10
,
"list count, default 10"
)
cmd
.
Flags
()
.
Uint32P
(
"direction"
,
"d"
,
0
,
"list direction, default 1 (Ascending order)"
)
}
func
runListCMD
(
cmd
*
cobra
.
Command
,
args
[]
string
,
funcName
string
,
reply
types
.
Message
)
{
startID
,
_
:=
cmd
.
Flags
()
.
GetString
(
"startItem"
)
count
,
_
:=
cmd
.
Flags
()
.
GetUint32
(
"count"
)
direction
,
_
:=
cmd
.
Flags
()
.
GetUint32
(
"direction"
)
params
:=
&
vty
.
ReqListItem
{
StartItemID
:
startID
,
Count
:
int32
(
count
),
Direction
:
int32
(
direction
),
}
sendQueryRPC
(
cmd
,
funcName
,
params
,
reply
)
}
plugin/dapp/vote/executor/action.go
0 → 100644
View file @
5226c257
package
executor
import
(
"encoding/hex"
dbm
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/types"
vty
"github.com/33cn/plugin/plugin/dapp/vote/types"
)
type
action
struct
{
db
dbm
.
KV
txHash
[]
byte
fromAddr
string
blockTime
int64
height
int64
index
int
}
func
newAction
(
v
*
vote
,
tx
*
types
.
Transaction
,
index
int
)
*
action
{
return
&
action
{
db
:
v
.
GetStateDB
(),
txHash
:
tx
.
Hash
(),
fromAddr
:
tx
.
From
(),
blockTime
:
v
.
GetBlockTime
(),
height
:
v
.
GetHeight
(),
index
:
index
}
}
func
(
a
*
action
)
getGroupInfo
(
groupID
string
)
(
*
vty
.
GroupInfo
,
error
)
{
info
:=
&
vty
.
GroupInfo
{}
err
:=
readStateDB
(
a
.
db
,
formatStateIDKey
(
groupID
),
info
)
if
err
==
types
.
ErrNotFound
{
err
=
errGroupNotExist
}
return
info
,
err
}
func
(
a
*
action
)
getVoteInfo
(
voteID
string
)
(
*
vty
.
VoteInfo
,
error
)
{
info
:=
&
vty
.
VoteInfo
{}
err
:=
readStateDB
(
a
.
db
,
formatStateIDKey
(
voteID
),
info
)
if
err
==
types
.
ErrNotFound
{
err
=
errVoteNotExist
}
return
info
,
err
}
func
(
a
*
action
)
createGroup
(
create
*
vty
.
CreateGroup
)
(
*
types
.
Receipt
,
error
)
{
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
xhash
:=
hex
.
EncodeToString
(
a
.
txHash
)
group
:=
&
vty
.
GroupInfo
{}
group
.
Name
=
create
.
Name
group
.
ID
=
formatGroupID
(
xhash
)
//添加创建者作为默认管理员
group
.
Admins
=
append
(
group
.
Admins
,
create
.
Admins
...
)
if
!
checkSliceItemExist
(
a
.
fromAddr
,
create
.
Admins
)
{
group
.
Admins
=
append
(
group
.
Admins
,
a
.
fromAddr
)
}
group
.
Members
=
create
.
Members
// set default vote weight
for
_
,
member
:=
range
group
.
Members
{
if
member
.
VoteWeight
<
1
{
member
.
VoteWeight
=
1
}
}
group
.
MemberNum
=
uint32
(
len
(
group
.
Members
))
group
.
Creator
=
a
.
fromAddr
groupValue
:=
types
.
Encode
(
group
)
receipt
.
KV
=
append
(
receipt
.
KV
,
&
types
.
KeyValue
{
Key
:
formatStateIDKey
(
group
.
ID
),
Value
:
groupValue
})
receipt
.
Logs
=
append
(
receipt
.
Logs
,
&
types
.
ReceiptLog
{
Ty
:
vty
.
TyCreateGroupLog
,
Log
:
groupValue
})
return
receipt
,
nil
}
func
(
a
*
action
)
updateMember
(
update
*
vty
.
UpdateMember
)
(
*
types
.
Receipt
,
error
)
{
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
group
,
err
:=
a
.
getGroupInfo
(
update
.
GroupID
)
if
err
!=
nil
{
elog
.
Error
(
"vote exec updateMember"
,
"txHash"
,
a
.
txHash
,
"err"
,
err
)
return
nil
,
errStateDBGet
}
addrMap
:=
make
(
map
[
string
]
int
)
for
index
,
member
:=
range
group
.
Members
{
addrMap
[
member
.
Addr
]
=
index
}
// remove members
for
_
,
addr
:=
range
update
.
GetRemoveMemberAddrs
()
{
if
index
,
ok
:=
addrMap
[
addr
];
ok
{
group
.
Members
=
append
(
group
.
Members
[
:
index
],
group
.
Members
[
index
+
1
:
]
...
)
}
}
// add members
for
_
,
member
:=
range
update
.
GetAddMembers
()
{
group
.
Members
=
append
(
group
.
Members
,
member
)
}
groupValue
:=
types
.
Encode
(
group
)
receipt
.
KV
=
append
(
receipt
.
KV
,
&
types
.
KeyValue
{
Key
:
formatStateIDKey
(
group
.
ID
),
Value
:
groupValue
})
receipt
.
Logs
=
append
(
receipt
.
Logs
,
&
types
.
ReceiptLog
{
Ty
:
vty
.
TyUpdateMemberLog
,
Log
:
groupValue
})
return
receipt
,
nil
}
func
(
a
*
action
)
createVote
(
create
*
vty
.
CreateVote
)
(
*
types
.
Receipt
,
error
)
{
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
vote
:=
&
vty
.
VoteInfo
{}
vote
.
ID
=
formatVoteID
(
hex
.
EncodeToString
(
a
.
txHash
))
vote
.
BeginTimestamp
=
create
.
BeginTimestamp
vote
.
EndTimestamp
=
create
.
EndTimestamp
vote
.
Name
=
create
.
Name
vote
.
VoteGroups
=
create
.
VoteGroups
vote
.
VoteOptions
=
make
([]
*
vty
.
VoteOption
,
0
)
for
_
,
option
:=
range
create
.
VoteOptions
{
vote
.
VoteOptions
=
append
(
vote
.
VoteOptions
,
&
vty
.
VoteOption
{
Option
:
option
})
}
vote
.
Creator
=
a
.
fromAddr
voteValue
:=
types
.
Encode
(
vote
)
receipt
.
KV
=
append
(
receipt
.
KV
,
&
types
.
KeyValue
{
Key
:
formatStateIDKey
(
vote
.
ID
),
Value
:
voteValue
})
receipt
.
Logs
=
append
(
receipt
.
Logs
,
&
types
.
ReceiptLog
{
Ty
:
vty
.
TyCreateVoteLog
,
Log
:
voteValue
})
return
receipt
,
nil
}
func
(
a
*
action
)
commitVote
(
commit
*
vty
.
CommitVote
)
(
*
types
.
Receipt
,
error
)
{
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
vote
,
err
:=
a
.
getVoteInfo
(
commit
.
VoteID
)
group
,
err1
:=
a
.
getGroupInfo
(
commit
.
GroupID
)
if
err
!=
nil
||
err1
!=
nil
{
elog
.
Error
(
"vote exec commitVote"
,
"txHash"
,
a
.
txHash
,
"err"
,
err
,
"err1"
,
err1
)
return
nil
,
errStateDBGet
}
for
_
,
member
:=
range
group
.
Members
{
if
member
.
Addr
==
a
.
fromAddr
{
vote
.
VoteOptions
[
commit
.
OptionIndex
]
.
Score
+=
member
.
VoteWeight
}
}
vote
.
VotedMembers
=
append
(
vote
.
VotedMembers
,
a
.
fromAddr
)
voteValue
:=
types
.
Encode
(
vote
)
receipt
.
KV
=
append
(
receipt
.
KV
,
&
types
.
KeyValue
{
Key
:
formatStateIDKey
(
vote
.
ID
),
Value
:
voteValue
})
receipt
.
Logs
=
append
(
receipt
.
Logs
,
&
types
.
ReceiptLog
{
Ty
:
vty
.
TyCommitVoteLog
,
Log
:
voteValue
})
return
receipt
,
nil
}
plugin/dapp/vote/executor/checktx.go
0 → 100644
View file @
5226c257
package
executor
import
(
"encoding/hex"
"github.com/33cn/chain33/types"
vty
"github.com/33cn/plugin/plugin/dapp/vote/types"
)
// CheckTx 实现自定义检验交易接口,供框架调用
func
(
v
*
vote
)
CheckTx
(
tx
*
types
.
Transaction
,
index
int
)
error
{
// implement code
txHash
:=
hex
.
EncodeToString
(
tx
.
Hash
())
var
action
vty
.
VoteAction
err
:=
types
.
Decode
(
tx
.
Payload
,
&
action
)
if
err
!=
nil
{
elog
.
Error
(
"vote CheckTx"
,
"txHash"
,
txHash
,
"Decode payload error"
,
err
)
return
types
.
ErrActionNotSupport
}
if
action
.
Ty
==
vty
.
TyCreateGroupAction
{
err
=
v
.
checkCreateGroup
(
action
.
GetCreateGroup
())
}
else
if
action
.
Ty
==
vty
.
TyUpdateMemberAction
{
err
=
v
.
checkUpdateMember
(
action
.
GetUpdateMember
())
}
else
if
action
.
Ty
==
vty
.
TyCreateVoteAction
{
err
=
v
.
checkCreateVote
(
action
.
GetCreateVote
())
}
else
if
action
.
Ty
==
vty
.
TyCommitVoteAction
{
err
=
v
.
checkCommitVote
(
action
.
GetCommitVote
(),
tx
,
index
)
}
else
{
err
=
types
.
ErrActionNotSupport
}
if
err
!=
nil
{
elog
.
Error
(
"vote CheckTx"
,
"txHash"
,
txHash
,
"actionName"
,
tx
.
ActionName
(),
"err"
,
err
,
"actionData"
,
action
)
}
return
err
}
func
checkMemberValidity
(
members
[]
*
vty
.
GroupMember
)
error
{
filter
:=
make
(
map
[
string
]
struct
{},
len
(
members
))
for
_
,
member
:=
range
members
{
if
member
.
GetAddr
()
==
""
{
return
errNilMember
}
if
_
,
ok
:=
filter
[
member
.
Addr
];
ok
{
return
errDuplicateMember
}
filter
[
member
.
Addr
]
=
struct
{}{}
}
return
nil
}
func
(
v
*
vote
)
checkCreateGroup
(
create
*
vty
.
CreateGroup
)
error
{
if
create
.
GetName
()
==
""
{
return
errEmptyName
}
//检测组成员是否有重复
if
err
:=
checkMemberValidity
(
create
.
GetMembers
());
err
!=
nil
{
return
err
}
//检测管理员是否有重复
if
checkSliceItemDuplicate
(
create
.
GetAdmins
())
{
return
errDuplicateAdmin
}
return
nil
}
func
(
v
*
vote
)
checkUpdateMember
(
update
*
vty
.
UpdateMember
)
error
{
if
len
(
update
.
GetGroupID
())
!=
IDLen
{
return
errInvalidGroupID
}
for
_
,
member
:=
range
update
.
AddMembers
{
if
len
(
member
.
Addr
)
!=
addrLen
{
return
types
.
ErrInvalidAddress
}
}
for
_
,
addr
:=
range
update
.
RemoveMemberAddrs
{
if
len
(
addr
)
!=
addrLen
{
return
types
.
ErrInvalidAddress
}
}
return
nil
}
func
(
v
*
vote
)
checkCreateVote
(
create
*
vty
.
CreateVote
)
error
{
if
create
.
GetName
()
==
""
{
return
errEmptyName
}
if
create
.
GetEndTimestamp
()
<=
v
.
GetBlockTime
()
||
create
.
EndTimestamp
<=
create
.
BeginTimestamp
{
return
errInvalidVoteTime
}
if
len
(
create
.
VoteOptions
)
<
2
{
return
errInvalidVoteOption
}
if
len
(
create
.
VoteGroups
)
==
0
{
return
errEmptyVoteGroup
}
if
checkSliceItemDuplicate
(
create
.
VoteGroups
)
{
return
errDuplicateGroup
}
return
nil
}
func
(
v
*
vote
)
checkCommitVote
(
commit
*
vty
.
CommitVote
,
tx
*
types
.
Transaction
,
index
int
)
error
{
voteID
:=
commit
.
GetVoteID
()
groupID
:=
commit
.
GetGroupID
()
if
len
(
voteID
)
!=
IDLen
{
return
errInvalidVoteID
}
if
len
(
groupID
)
!=
IDLen
{
return
errInvalidGroupID
}
action
:=
newAction
(
v
,
tx
,
index
)
voteInfo
,
err
:=
action
.
getVoteInfo
(
voteID
)
if
err
!=
nil
{
return
err
}
if
voteInfo
.
EndTimestamp
<=
action
.
blockTime
{
return
errVoteAlreadyFinished
}
if
commit
.
OptionIndex
>=
uint32
(
len
(
voteInfo
.
VoteOptions
))
{
return
errInvalidOptionIndex
}
//check group validity
if
!
checkSliceItemExist
(
commit
.
GroupID
,
voteInfo
.
VoteGroups
)
{
return
errInvalidGroupID
}
// check if already vote
if
checkSliceItemExist
(
action
.
fromAddr
,
voteInfo
.
VotedMembers
)
{
return
errAlreadyVoted
}
groupInfo
,
err
:=
action
.
getGroupInfo
(
commit
.
GroupID
)
if
err
!=
nil
{
return
err
}
// check if exist in group members
if
!
checkMemberExist
(
action
.
fromAddr
,
groupInfo
.
Members
)
{
return
errInvalidGroupMember
}
return
nil
}
plugin/dapp/vote/executor/errors.go
0 → 100644
View file @
5226c257
package
executor
import
"errors"
var
(
errEmptyName
=
errors
.
New
(
"ErrEmptyName"
)
errInvalidMemberWeights
=
errors
.
New
(
"errInvalidMemberWeights"
)
errNilMember
=
errors
.
New
(
"errNilMember"
)
errDuplicateMember
=
errors
.
New
(
"errDuplicateMember"
)
errDuplicateGroup
=
errors
.
New
(
"errDuplicateGroup"
)
errDuplicateAdmin
=
errors
.
New
(
"errDuplicateAdmin"
)
errInvalidVoteTime
=
errors
.
New
(
"errInvalidVoteTime"
)
errInvalidVoteOption
=
errors
.
New
(
"errInvalidVoteOption"
)
errEmptyVoteGroup
=
errors
.
New
(
"errEmptyVoteGroup"
)
errVoteNotExist
=
errors
.
New
(
"errVoteNotExist"
)
errGroupNotExist
=
errors
.
New
(
"errGroupNotExist"
)
errStateDBGet
=
errors
.
New
(
"errStateDBGet"
)
errInvalidVoteID
=
errors
.
New
(
"errInvalidVoteID"
)
errInvalidGroupID
=
errors
.
New
(
"errInvalidGroupID"
)
errInvalidOptionIndex
=
errors
.
New
(
"errInvalidOptionIndex"
)
errAlreadyVoted
=
errors
.
New
(
"errAlreadyVoted"
)
errInvalidGroupMember
=
errors
.
New
(
"errInvalidGroupMember"
)
errVoteAlreadyFinished
=
errors
.
New
(
"errVoteAlreadyFinished"
)
)
plugin/dapp/vote/executor/exec.go
0 → 100644
View file @
5226c257
package
executor
import
(
"github.com/33cn/chain33/types"
votetypes
"github.com/33cn/plugin/plugin/dapp/vote/types"
)
/*
* 实现交易的链上执行接口
* 关键数据上链(statedb)并生成交易回执(log)
*/
func
(
v
*
vote
)
Exec_CreateGroup
(
payload
*
votetypes
.
CreateGroup
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
action
:=
newAction
(
v
,
tx
,
index
)
return
action
.
createGroup
(
payload
)
}
func
(
v
*
vote
)
Exec_UpdateMember
(
payload
*
votetypes
.
UpdateMember
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
action
:=
newAction
(
v
,
tx
,
index
)
return
action
.
updateMember
(
payload
)
}
func
(
v
*
vote
)
Exec_CreateVote
(
payload
*
votetypes
.
CreateVote
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
action
:=
newAction
(
v
,
tx
,
index
)
return
action
.
createVote
(
payload
)
}
func
(
v
*
vote
)
Exec_CommitVote
(
payload
*
votetypes
.
CommitVote
,
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
action
:=
newAction
(
v
,
tx
,
index
)
return
action
.
commitVote
(
payload
)
}
plugin/dapp/vote/executor/exec_del_local.go
0 → 100644
View file @
5226c257
package
executor
import
(
"github.com/33cn/chain33/types"
)
/*
* 实现区块回退时本地执行的数据清除
*/
// ExecDelLocal localdb kv数据自动回滚接口
func
(
v
*
vote
)
ExecDelLocal
(
tx
*
types
.
Transaction
,
receipt
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
kvs
,
err
:=
v
.
DelRollbackKV
(
tx
,
tx
.
Execer
)
if
err
!=
nil
{
return
nil
,
err
}
dbSet
:=
&
types
.
LocalDBSet
{}
dbSet
.
KV
=
append
(
dbSet
.
KV
,
kvs
...
)
return
dbSet
,
nil
}
plugin/dapp/vote/executor/exec_local.go
0 → 100644
View file @
5226c257
package
executor
import
(
"encoding/hex"
"github.com/33cn/chain33/types"
vty
"github.com/33cn/plugin/plugin/dapp/vote/types"
)
/*
* 实现交易相关数据本地执行,数据不上链
* 非关键数据,本地存储(localDB), 用于辅助查询,效率高
*/
func
(
v
*
vote
)
ExecLocal_CreateGroup
(
payload
*
vty
.
CreateGroup
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
dbSet
:=
&
types
.
LocalDBSet
{}
groupInfo
:=
decodeGroupInfo
(
receiptData
.
Logs
[
0
]
.
Log
)
table
:=
newGroupTable
(
v
.
GetLocalDB
())
err
:=
table
.
Add
(
&
vty
.
GroupVoteInfo
{
GroupInfo
:
groupInfo
})
if
err
!=
nil
{
elog
.
Error
(
"execLocal createGroup"
,
"txHash"
,
hex
.
EncodeToString
(
tx
.
Hash
()),
"table add"
,
err
)
return
nil
,
err
}
kvs
,
err
:=
table
.
Save
()
if
err
!=
nil
{
elog
.
Error
(
"execLocal createGroup"
,
"txHash"
,
hex
.
EncodeToString
(
tx
.
Hash
()),
"table save"
,
err
)
return
nil
,
err
}
dbSet
.
KV
=
kvs
kvs
,
err
=
v
.
addGroupMember
(
groupInfo
.
GetID
(),
groupInfo
.
Members
)
if
err
!=
nil
{
elog
.
Error
(
"execLocal createGroup"
,
"txHash"
,
hex
.
EncodeToString
(
tx
.
Hash
()),
"addMemberErr"
,
err
)
return
nil
,
err
}
dbSet
.
KV
=
append
(
dbSet
.
KV
,
kvs
...
)
//auto gen for localdb auto rollback
return
v
.
addAutoRollBack
(
tx
,
dbSet
.
KV
),
nil
}
func
(
v
*
vote
)
ExecLocal_UpdateMember
(
update
*
vty
.
UpdateMember
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
dbSet
:=
&
types
.
LocalDBSet
{}
groupInfo
:=
decodeGroupInfo
(
receiptData
.
Logs
[
0
]
.
Log
)
table
:=
newGroupTable
(
v
.
GetLocalDB
())
err
:=
table
.
Replace
(
&
vty
.
GroupVoteInfo
{
GroupInfo
:
groupInfo
})
if
err
!=
nil
{
elog
.
Error
(
"execLocal updateMember"
,
"txHash"
,
hex
.
EncodeToString
(
tx
.
Hash
()),
"groupID"
,
groupInfo
.
ID
,
"table replace"
,
err
)
return
nil
,
err
}
kvs
,
err
:=
table
.
Save
()
if
err
!=
nil
{
elog
.
Error
(
"execLocal updateMember"
,
"txHash"
,
hex
.
EncodeToString
(
tx
.
Hash
()),
"groupID"
,
groupInfo
.
ID
,
"table save"
,
err
)
return
nil
,
err
}
dbSet
.
KV
=
kvs
kvs
,
err
=
v
.
addGroupMember
(
groupInfo
.
GetID
(),
update
.
AddMembers
)
if
err
!=
nil
{
elog
.
Error
(
"execLocal updateMember"
,
"txHash"
,
hex
.
EncodeToString
(
tx
.
Hash
()),
"addMemberErr"
,
err
)
return
nil
,
err
}
dbSet
.
KV
=
append
(
dbSet
.
KV
,
kvs
...
)
kvs
,
err
=
v
.
removeGroupMember
(
groupInfo
.
GetID
(),
update
.
RemoveMemberAddrs
)
if
err
!=
nil
{
elog
.
Error
(
"execLocal updateMember"
,
"txHash"
,
hex
.
EncodeToString
(
tx
.
Hash
()),
"removeMemberErr"
,
err
)
return
nil
,
err
}
dbSet
.
KV
=
append
(
dbSet
.
KV
,
kvs
...
)
//auto gen for localdb auto rollback
return
v
.
addAutoRollBack
(
tx
,
dbSet
.
KV
),
nil
}
func
(
v
*
vote
)
ExecLocal_CreateVote
(
payload
*
vty
.
CreateVote
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
dbSet
:=
&
types
.
LocalDBSet
{}
voteInfo
:=
decodeVoteInfo
(
receiptData
.
Logs
[
0
]
.
Log
)
table
:=
newVoteTable
(
v
.
GetLocalDB
())
err
:=
table
.
Add
(
voteInfo
)
if
err
!=
nil
{
elog
.
Error
(
"execLocal createVote"
,
"txHash"
,
hex
.
EncodeToString
(
tx
.
Hash
()),
"voteTable add"
,
err
)
return
nil
,
err
}
kvs
,
err
:=
table
.
Save
()
if
err
!=
nil
{
elog
.
Error
(
"execLocal createVote"
,
"txHash"
,
hex
.
EncodeToString
(
tx
.
Hash
()),
"voteTable save"
,
err
)
return
nil
,
err
}
dbSet
.
KV
=
kvs
// 在关联的投票组表中记录voteID信息
table
=
newGroupTable
(
v
.
GetLocalDB
())
for
_
,
groupID
:=
range
voteInfo
.
VoteGroups
{
row
,
err
:=
table
.
GetData
([]
byte
(
groupID
))
if
err
!=
nil
{
continue
}
if
info
,
ok
:=
row
.
Data
.
(
*
vty
.
GroupVoteInfo
);
ok
{
info
.
VoteIDs
=
append
(
info
.
VoteIDs
,
voteInfo
.
ID
)
err
=
table
.
Replace
(
info
)
if
err
!=
nil
{
elog
.
Error
(
"execLocal createVote"
,
"txHash"
,
hex
.
EncodeToString
(
tx
.
Hash
()),
"groupID"
,
groupID
,
"groupTable replace"
,
err
)
return
nil
,
err
}
}
}
kvs
,
err
=
table
.
Save
()
if
err
!=
nil
{
elog
.
Error
(
"execLocal createVote"
,
"txHash"
,
hex
.
EncodeToString
(
tx
.
Hash
()),
"groupTable save"
,
err
)
return
nil
,
err
}
dbSet
.
KV
=
append
(
dbSet
.
KV
,
kvs
...
)
//auto gen for localdb auto rollback
return
v
.
addAutoRollBack
(
tx
,
dbSet
.
KV
),
nil
}
func
(
v
*
vote
)
ExecLocal_CommitVote
(
payload
*
vty
.
CommitVote
,
tx
*
types
.
Transaction
,
receiptData
*
types
.
ReceiptData
,
index
int
)
(
*
types
.
LocalDBSet
,
error
)
{
dbSet
:=
&
types
.
LocalDBSet
{}
//implement code, add customize kv to dbSet...
voteInfo
:=
decodeVoteInfo
(
receiptData
.
Logs
[
0
]
.
Log
)
table
:=
newVoteTable
(
v
.
GetLocalDB
())
err
:=
table
.
Replace
(
voteInfo
)
if
err
!=
nil
{
elog
.
Error
(
"execLocal commitVote"
,
"txHash"
,
hex
.
EncodeToString
(
tx
.
Hash
()),
"voteTable add"
,
err
)
return
nil
,
err
}
kvs
,
err
:=
table
.
Save
()
if
err
!=
nil
{
elog
.
Error
(
"execLocal commitVote"
,
"txHash"
,
hex
.
EncodeToString
(
tx
.
Hash
()),
"voteTable save"
,
err
)
return
nil
,
err
}
dbSet
.
KV
=
kvs
//auto gen for localdb auto rollback
return
v
.
addAutoRollBack
(
tx
,
dbSet
.
KV
),
nil
}
//当区块回滚时,框架支持自动回滚localdb kv,需要对exec-local返回的kv进行封装
func
(
v
*
vote
)
addAutoRollBack
(
tx
*
types
.
Transaction
,
kv
[]
*
types
.
KeyValue
)
*
types
.
LocalDBSet
{
dbSet
:=
&
types
.
LocalDBSet
{}
dbSet
.
KV
=
v
.
AddRollbackKV
(
tx
,
tx
.
Execer
,
kv
)
return
dbSet
}
func
(
v
*
vote
)
addGroupMember
(
groupID
string
,
members
[]
*
vty
.
GroupMember
)
([]
*
types
.
KeyValue
,
error
)
{
table
:=
newMemberTable
(
v
.
GetLocalDB
())
for
_
,
member
:=
range
members
{
addrKey
:=
[]
byte
(
member
.
Addr
)
row
,
err
:=
table
.
GetData
(
addrKey
)
if
err
==
nil
{
info
,
ok
:=
row
.
Data
.
(
*
vty
.
MemberInfo
)
if
ok
&&
!
checkSliceItemExist
(
groupID
,
info
.
GroupIDs
)
{
info
.
GroupIDs
=
append
(
info
.
GroupIDs
,
groupID
)
err
=
table
.
Replace
(
info
)
}
}
else
if
err
==
types
.
ErrNotFound
{
err
=
table
.
Add
(
&
vty
.
MemberInfo
{
Addr
:
member
.
Addr
,
GroupIDs
:
[]
string
{
groupID
}})
}
// 这个错可能由GetData,Replace,Add返回
if
err
!=
nil
{
elog
.
Error
(
"execLocal addMember"
,
"member table Add/Replace"
,
err
)
return
nil
,
err
}
}
kvs
,
err
:=
table
.
Save
()
if
err
!=
nil
{
elog
.
Error
(
"execLocal addMember"
,
"member table save"
,
err
)
return
nil
,
err
}
return
kvs
,
nil
}
func
(
v
*
vote
)
removeGroupMember
(
groupID
string
,
addrs
[]
string
)
([]
*
types
.
KeyValue
,
error
)
{
table
:=
newMemberTable
(
v
.
GetLocalDB
())
for
_
,
addr
:=
range
addrs
{
addrKey
:=
[]
byte
(
addr
)
row
,
err
:=
table
.
GetData
(
addrKey
)
if
err
==
types
.
ErrNotFound
{
return
nil
,
nil
}
else
if
err
!=
nil
{
elog
.
Error
(
"execLocal removeMember"
,
"member table getData"
,
err
)
return
nil
,
err
}
info
,
ok
:=
row
.
Data
.
(
*
vty
.
MemberInfo
)
if
!
ok
{
return
nil
,
types
.
ErrTypeAsset
}
for
index
,
id
:=
range
info
.
GroupIDs
{
if
id
==
groupID
{
info
.
GroupIDs
=
append
(
info
.
GroupIDs
[
:
index
],
info
.
GroupIDs
[
index
+
1
:
]
...
)
err
=
table
.
Replace
(
info
)
if
err
!=
nil
{
elog
.
Error
(
"execLocal removeMember"
,
"member table replace"
,
err
)
return
nil
,
err
}
break
}
}
}
kvs
,
err
:=
table
.
Save
()
if
err
!=
nil
{
elog
.
Error
(
"execLocal addMember"
,
"member table save"
,
err
)
return
nil
,
err
}
return
kvs
,
nil
}
plugin/dapp/vote/executor/key.go
0 → 100644
View file @
5226c257
package
executor
/*
* 用户合约存取kv数据时,key值前缀需要满足一定规范
* 即key = keyPrefix + userKey
* 需要字段前缀查询时,使用’-‘作为分割符号
*/
var
(
//keyPrefixStateDB state db key必须前缀
keyPrefixStateDB
=
"mavl-vote-"
//keyPrefixLocalDB local db的key必须前缀
keyPrefixLocalDB
=
"LODB-vote-"
)
// groupID or voteID
func
formatStateIDKey
(
id
string
)
[]
byte
{
return
[]
byte
(
keyPrefixStateDB
+
id
)
}
plugin/dapp/vote/executor/query.go
0 → 100644
View file @
5226c257
package
executor
import
(
"github.com/33cn/chain33/types"
vty
"github.com/33cn/plugin/plugin/dapp/vote/types"
)
// Query_GroupInfo query group info
func
(
v
*
vote
)
Query_GetGroup
(
in
*
types
.
ReqString
)
(
types
.
Message
,
error
)
{
if
len
(
in
.
GetData
())
!=
IDLen
{
return
nil
,
errInvalidGroupID
}
groupID
:=
in
.
Data
table
:=
newGroupTable
(
v
.
GetLocalDB
())
row
,
err
:=
table
.
GetData
([]
byte
(
groupID
))
if
err
!=
nil
{
elog
.
Error
(
"query getGroup"
,
"id"
,
groupID
,
"err"
,
err
)
return
nil
,
err
}
info
,
ok
:=
row
.
Data
.
(
*
vty
.
GroupVoteInfo
)
if
!
ok
{
return
nil
,
types
.
ErrTypeAsset
}
return
info
,
nil
}
func
(
v
*
vote
)
Query_GetVote
(
in
*
types
.
ReqString
)
(
types
.
Message
,
error
)
{
if
len
(
in
.
GetData
())
!=
IDLen
{
return
nil
,
errInvalidVoteID
}
voteID
:=
in
.
Data
table
:=
newVoteTable
(
v
.
GetLocalDB
())
row
,
err
:=
table
.
GetData
([]
byte
(
voteID
))
if
err
!=
nil
{
elog
.
Error
(
"query getVote"
,
"id"
,
voteID
,
"err"
,
err
)
return
nil
,
err
}
info
,
ok
:=
row
.
Data
.
(
*
vty
.
VoteInfo
)
if
!
ok
{
return
nil
,
types
.
ErrTypeAsset
}
return
info
,
nil
}
func
(
v
*
vote
)
Query_GetMember
(
in
*
types
.
ReqString
)
(
types
.
Message
,
error
)
{
if
len
(
in
.
GetData
())
!=
addrLen
{
return
nil
,
types
.
ErrInvalidAddress
}
addr
:=
in
.
Data
table
:=
newMemberTable
(
v
.
GetLocalDB
())
row
,
err
:=
table
.
GetData
([]
byte
(
addr
))
if
err
!=
nil
{
elog
.
Error
(
"query getMember"
,
"addr"
,
addr
,
"err"
,
err
)
return
nil
,
err
}
info
,
ok
:=
row
.
Data
.
(
*
vty
.
MemberInfo
)
if
!
ok
{
return
nil
,
types
.
ErrTypeAsset
}
return
info
,
nil
}
func
(
v
*
vote
)
Query_ListGroup
(
in
*
vty
.
ReqListItem
)
(
types
.
Message
,
error
)
{
if
in
==
nil
{
return
nil
,
types
.
ErrInvalidParam
}
table
:=
newGroupTable
(
v
.
GetLocalDB
())
var
primaryKey
[]
byte
primaryKey
=
append
(
primaryKey
,
[]
byte
(
in
.
StartItemID
)
...
)
rows
,
err
:=
table
.
ListIndex
(
groupTablePrimary
,
nil
,
primaryKey
,
in
.
Count
,
in
.
Direction
)
if
err
!=
nil
{
elog
.
Error
(
"query listGroup"
,
"err"
,
err
,
"param"
,
in
)
return
nil
,
err
}
list
:=
&
vty
.
GroupVoteInfos
{
GroupList
:
make
([]
*
vty
.
GroupVoteInfo
,
0
)}
for
_
,
row
:=
range
rows
{
info
,
ok
:=
row
.
Data
.
(
*
vty
.
GroupVoteInfo
)
if
!
ok
{
return
nil
,
types
.
ErrTypeAsset
}
list
.
GroupList
=
append
(
list
.
GroupList
,
info
)
}
return
list
,
nil
}
func
(
v
*
vote
)
Query_ListVote
(
in
*
vty
.
ReqListItem
)
(
types
.
Message
,
error
)
{
if
in
==
nil
{
return
nil
,
types
.
ErrInvalidParam
}
table
:=
newVoteTable
(
v
.
GetLocalDB
())
var
primaryKey
[]
byte
primaryKey
=
append
(
primaryKey
,
[]
byte
(
in
.
StartItemID
)
...
)
rows
,
err
:=
table
.
ListIndex
(
voteTablePrimary
,
nil
,
primaryKey
,
in
.
Count
,
in
.
Direction
)
if
err
!=
nil
{
elog
.
Error
(
"query listVote"
,
"err"
,
err
,
"param"
,
in
)
return
nil
,
err
}
list
:=
&
vty
.
VoteInfos
{
VoteList
:
make
([]
*
vty
.
VoteInfo
,
0
)}
for
_
,
row
:=
range
rows
{
info
,
ok
:=
row
.
Data
.
(
*
vty
.
VoteInfo
)
if
!
ok
{
return
nil
,
types
.
ErrTypeAsset
}
list
.
VoteList
=
append
(
list
.
VoteList
,
info
)
}
return
list
,
nil
}
func
(
v
*
vote
)
Query_ListMember
(
in
*
vty
.
ReqListItem
)
(
types
.
Message
,
error
)
{
if
in
==
nil
{
return
nil
,
types
.
ErrInvalidParam
}
table
:=
newMemberTable
(
v
.
GetLocalDB
())
var
primaryKey
[]
byte
primaryKey
=
append
(
primaryKey
,
[]
byte
(
in
.
StartItemID
)
...
)
rows
,
err
:=
table
.
ListIndex
(
memberTablePrimary
,
nil
,
primaryKey
,
in
.
Count
,
in
.
Direction
)
if
err
!=
nil
{
elog
.
Error
(
"query listMember"
,
"err"
,
err
,
"param"
,
in
)
return
nil
,
err
}
list
:=
&
vty
.
MemberInfos
{
MemberList
:
make
([]
*
vty
.
MemberInfo
,
0
)}
for
_
,
row
:=
range
rows
{
info
,
ok
:=
row
.
Data
.
(
*
vty
.
MemberInfo
)
if
!
ok
{
return
nil
,
types
.
ErrTypeAsset
}
list
.
MemberList
=
append
(
list
.
MemberList
,
info
)
}
return
list
,
nil
}
plugin/dapp/vote/executor/table.go
0 → 100644
View file @
5226c257
package
executor
import
(
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/common/db/table"
"github.com/33cn/chain33/types"
vty
"github.com/33cn/plugin/plugin/dapp/vote/types"
)
var
(
groupTablePrimary
=
"groupid"
voteTablePrimary
=
"voteid"
memberTablePrimary
=
"addr"
)
var
groupTableOpt
=
&
table
.
Option
{
Prefix
:
keyPrefixLocalDB
,
Name
:
"group"
,
Primary
:
groupTablePrimary
,
}
var
voteTableOpt
=
&
table
.
Option
{
Prefix
:
keyPrefixLocalDB
,
Name
:
"vote"
,
Primary
:
voteTablePrimary
,
}
var
memberTableOpt
=
&
table
.
Option
{
Prefix
:
keyPrefixLocalDB
,
Name
:
"member"
,
Primary
:
memberTablePrimary
,
}
//新建表
func
newTable
(
kvDB
db
.
KV
,
rowMeta
table
.
RowMeta
,
opt
*
table
.
Option
)
*
table
.
Table
{
table
,
err
:=
table
.
NewTable
(
rowMeta
,
kvDB
,
opt
)
if
err
!=
nil
{
panic
(
err
)
}
return
table
}
func
newGroupTable
(
kvDB
db
.
KV
)
*
table
.
Table
{
return
newTable
(
kvDB
,
&
groupTableRow
{},
groupTableOpt
)
}
func
newVoteTable
(
kvDB
db
.
KV
)
*
table
.
Table
{
return
newTable
(
kvDB
,
&
voteTableRow
{},
voteTableOpt
)
}
func
newMemberTable
(
kvDB
db
.
KV
)
*
table
.
Table
{
return
newTable
(
kvDB
,
&
memberTableRow
{},
memberTableOpt
)
}
//groupTableRow table meta 结构
type
groupTableRow
struct
{
*
vty
.
GroupVoteInfo
}
//CreateRow 新建数据行
func
(
r
*
groupTableRow
)
CreateRow
()
*
table
.
Row
{
return
&
table
.
Row
{
Data
:
&
vty
.
GroupVoteInfo
{}}
}
//SetPayload 设置数据
func
(
r
*
groupTableRow
)
SetPayload
(
data
types
.
Message
)
error
{
if
d
,
ok
:=
data
.
(
*
vty
.
GroupVoteInfo
);
ok
{
r
.
GroupVoteInfo
=
d
return
nil
}
return
types
.
ErrTypeAsset
}
//Get 按照indexName 查询 indexValue
func
(
r
*
groupTableRow
)
Get
(
key
string
)
([]
byte
,
error
)
{
if
key
==
groupTablePrimary
{
return
[]
byte
(
r
.
GroupVoteInfo
.
GetGroupInfo
()
.
GetID
()),
nil
}
return
nil
,
types
.
ErrNotFound
}
//voteTableRow table meta 结构
type
voteTableRow
struct
{
*
vty
.
VoteInfo
}
//CreateRow 新建数据行
func
(
r
*
voteTableRow
)
CreateRow
()
*
table
.
Row
{
return
&
table
.
Row
{
Data
:
&
vty
.
VoteInfo
{}}
}
//SetPayload 设置数据
func
(
r
*
voteTableRow
)
SetPayload
(
data
types
.
Message
)
error
{
if
d
,
ok
:=
data
.
(
*
vty
.
VoteInfo
);
ok
{
r
.
VoteInfo
=
d
return
nil
}
return
types
.
ErrTypeAsset
}
//Get 按照indexName 查询 indexValue
func
(
r
*
voteTableRow
)
Get
(
key
string
)
([]
byte
,
error
)
{
if
key
==
voteTablePrimary
{
return
[]
byte
(
r
.
VoteInfo
.
GetID
()),
nil
}
return
nil
,
types
.
ErrNotFound
}
type
memberTableRow
struct
{
*
vty
.
MemberInfo
}
//CreateRow 新建数据行
func
(
r
*
memberTableRow
)
CreateRow
()
*
table
.
Row
{
return
&
table
.
Row
{
Data
:
&
vty
.
MemberInfo
{}}
}
//SetPayload 设置数据
func
(
r
*
memberTableRow
)
SetPayload
(
data
types
.
Message
)
error
{
if
d
,
ok
:=
data
.
(
*
vty
.
MemberInfo
);
ok
{
r
.
MemberInfo
=
d
return
nil
}
return
types
.
ErrTypeAsset
}
//Get 按照indexName 查询 indexValue
func
(
r
*
memberTableRow
)
Get
(
key
string
)
([]
byte
,
error
)
{
if
key
==
memberTablePrimary
{
return
[]
byte
(
r
.
MemberInfo
.
GetAddr
()),
nil
}
return
nil
,
types
.
ErrNotFound
}
plugin/dapp/vote/executor/util.go
0 → 100644
View file @
5226c257
package
executor
import
(
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/types"
vty
"github.com/33cn/plugin/plugin/dapp/vote/types"
)
const
(
// IDLen length of groupID or voteID
IDLen
=
65
addrLen
=
34
)
func
formatGroupID
(
txHash
string
)
string
{
return
"g"
+
txHash
}
func
formatVoteID
(
txHash
string
)
string
{
return
"v"
+
txHash
}
func
checkMemberExist
(
addr
string
,
members
[]
*
vty
.
GroupMember
)
bool
{
for
_
,
item
:=
range
members
{
if
addr
==
item
.
Addr
{
return
true
}
}
return
false
}
func
checkSliceItemExist
(
target
string
,
items
[]
string
)
bool
{
for
_
,
item
:=
range
items
{
if
target
==
item
{
return
true
}
}
return
false
}
func
checkSliceItemDuplicate
(
items
[]
string
)
bool
{
filter
:=
make
(
map
[
string
]
struct
{},
len
(
items
))
for
_
,
item
:=
range
items
{
if
_
,
ok
:=
filter
[
item
];
ok
{
return
true
}
filter
[
item
]
=
struct
{}{}
}
return
false
}
func
readStateDB
(
stateDB
db
.
KV
,
key
[]
byte
,
result
types
.
Message
)
error
{
val
,
err
:=
stateDB
.
Get
(
key
)
if
err
!=
nil
{
return
err
}
return
types
.
Decode
(
val
,
result
)
}
func
mustDecodeProto
(
data
[]
byte
,
msg
types
.
Message
)
{
if
err
:=
types
.
Decode
(
data
,
msg
);
err
!=
nil
{
panic
(
err
.
Error
())
}
}
func
decodeGroupInfo
(
data
[]
byte
)
*
vty
.
GroupInfo
{
info
:=
&
vty
.
GroupInfo
{}
mustDecodeProto
(
data
,
info
)
return
info
}
func
decodeVoteInfo
(
data
[]
byte
)
*
vty
.
VoteInfo
{
info
:=
&
vty
.
VoteInfo
{}
mustDecodeProto
(
data
,
info
)
return
info
}
plugin/dapp/vote/executor/vote.go
0 → 100644
View file @
5226c257
package
executor
import
(
log
"github.com/33cn/chain33/common/log/log15"
drivers
"github.com/33cn/chain33/system/dapp"
"github.com/33cn/chain33/types"
votetypes
"github.com/33cn/plugin/plugin/dapp/vote/types"
)
/*
* 执行器相关定义
* 重载基类相关接口
*/
var
(
//日志
elog
=
log
.
New
(
"module"
,
"vote.executor"
)
)
var
driverName
=
votetypes
.
VoteX
// Init register dapp
func
Init
(
name
string
,
cfg
*
types
.
Chain33Config
,
sub
[]
byte
)
{
drivers
.
Register
(
cfg
,
GetName
(),
newVote
,
cfg
.
GetDappFork
(
driverName
,
"Enable"
))
InitExecType
()
}
// InitExecType Init Exec Type
func
InitExecType
()
{
ety
:=
types
.
LoadExecutorType
(
driverName
)
ety
.
InitFuncList
(
types
.
ListMethod
(
&
vote
{}))
}
type
vote
struct
{
drivers
.
DriverBase
}
func
newVote
()
drivers
.
Driver
{
t
:=
&
vote
{}
t
.
SetChild
(
t
)
t
.
SetExecutorType
(
types
.
LoadExecutorType
(
driverName
))
return
t
}
// GetName get driver name
func
GetName
()
string
{
return
newVote
()
.
GetName
()
}
func
(
v
*
vote
)
GetDriverName
()
string
{
return
driverName
}
plugin/dapp/vote/plugin.go
0 → 100644
View file @
5226c257
package
types
import
(
"github.com/33cn/chain33/pluginmgr"
"github.com/33cn/plugin/plugin/dapp/vote/commands"
"github.com/33cn/plugin/plugin/dapp/vote/executor"
"github.com/33cn/plugin/plugin/dapp/vote/rpc"
votetypes
"github.com/33cn/plugin/plugin/dapp/vote/types"
)
/*
* 初始化dapp相关的组件
*/
func
init
()
{
pluginmgr
.
Register
(
&
pluginmgr
.
PluginBase
{
Name
:
votetypes
.
VoteX
,
ExecName
:
executor
.
GetName
(),
Exec
:
executor
.
Init
,
Cmd
:
commands
.
Cmd
,
RPC
:
rpc
.
Init
,
})
}
plugin/dapp/vote/proto/Makefile
0 → 100644
View file @
5226c257
all
:
bash ./create_protobuf.sh
plugin/dapp/vote/proto/create_protobuf.sh
0 → 100644
View file @
5226c257
#!/bin/bash
# proto生成命令,将pb.go文件生成到types/目录下, chain33_path支持引用chain33框架的proto文件
chain33_path
=
$(
go list
-f
'{{.Dir}}'
"github.com/33cn/chain33"
)
protoc
--go_out
=
plugins
=
grpc:../types ./
*
.proto
--proto_path
=
.
--proto_path
=
"
${
chain33_path
}
/types/proto/"
plugin/dapp/vote/proto/vote.proto
0 → 100644
View file @
5226c257
syntax
=
"proto3"
;
package
types
;
// vote 合约交易行为总类型
message
VoteAction
{
int32
ty
=
1
;
oneof
value
{
CreateGroup
createGroup
=
2
;
UpdateMember
updateMember
=
3
;
CreateVote
createVote
=
4
;
CommitVote
commitVote
=
5
;
}
}
message
GroupMember
{
string
addr
=
1
;
uint32
voteWeight
=
2
;
}
//创建投票组
message
CreateGroup
{
string
name
=
1
;
repeated
string
admins
=
2
;
repeated
GroupMember
members
=
3
;
}
//更新投票组
message
UpdateMember
{
string
groupID
=
1
;
repeated
GroupMember
addMembers
=
2
;
repeated
string
removeMemberAddrs
=
3
;
}
//
message
GroupInfo
{
string
ID
=
1
;
string
name
=
2
;
uint32
memberNum
=
3
;
string
creator
=
4
;
repeated
string
admins
=
5
;
repeated
GroupMember
members
=
6
;
}
message
VoteOption
{
string
option
=
1
;
uint32
score
=
2
;
}
//
message
CreateVote
{
string
name
=
1
;
repeated
string
voteGroups
=
2
;
repeated
string
voteOptions
=
3
;
int64
beginTimestamp
=
4
;
int64
endTimestamp
=
5
;
}
//
message
CommitVote
{
string
voteID
=
1
;
string
groupID
=
2
;
uint32
optionIndex
=
3
;
}
//
message
VoteInfo
{
string
ID
=
1
;
string
name
=
2
;
string
creator
=
3
;
repeated
string
voteGroups
=
4
;
repeated
VoteOption
voteOptions
=
5
;
int64
beginTimestamp
=
6
;
int64
endTimestamp
=
7
;
repeated
string
votedMembers
=
8
;
}
message
VoteInfos
{
repeated
VoteInfo
voteList
=
1
;
}
message
GroupVoteInfo
{
GroupInfo
groupInfo
=
1
;
repeated
string
voteIDs
=
2
;
}
message
GroupVoteInfos
{
repeated
GroupVoteInfo
groupList
=
1
;
}
message
MemberInfo
{
string
addr
=
1
;
repeated
string
groupIDs
=
2
;
}
message
MemberInfos
{
repeated
MemberInfo
memberList
=
1
;
}
message
ReqListItem
{
string
startItemID
=
1
;
int32
count
=
2
;
int32
direction
=
3
;
}
plugin/dapp/vote/rpc/rpc.go
0 → 100644
View file @
5226c257
package
rpc
/*
* 实现json rpc和grpc service接口
* json rpc用Jrpc结构作为接收实例
* grpc使用channelClient结构作为接收实例
*/
plugin/dapp/vote/rpc/types.go
0 → 100644
View file @
5226c257
package
rpc
import
(
rpctypes
"github.com/33cn/chain33/rpc/types"
)
/*
* rpc相关结构定义和初始化
*/
// 实现grpc的service接口
type
channelClient
struct
{
rpctypes
.
ChannelClient
}
// Jrpc 实现json rpc调用实例
type
Jrpc
struct
{
cli
*
channelClient
}
// Grpc grpc
type
Grpc
struct
{
*
channelClient
}
// Init init rpc
func
Init
(
name
string
,
s
rpctypes
.
RPCServer
)
{
cli
:=
&
channelClient
{}
grpc
:=
&
Grpc
{
channelClient
:
cli
}
cli
.
Init
(
name
,
s
,
&
Jrpc
{
cli
:
cli
},
grpc
)
}
plugin/dapp/vote/types/vote.go
0 → 100644
View file @
5226c257
package
types
import
(
"reflect"
log
"github.com/33cn/chain33/common/log/log15"
"github.com/33cn/chain33/types"
)
/*
* 交易相关类型定义
* 交易action通常有对应的log结构,用于交易回执日志记录
* 每一种action和log需要用id数值和name名称加以区分
*/
// action类型id和name,这些常量可以自定义修改
const
(
TyUnknowAction
=
iota
+
100
TyCreateGroupAction
TyUpdateMemberAction
TyCreateVoteAction
TyCommitVoteAction
NameCreateGroupAction
=
"CreateGroup"
NameUpdateMemberAction
=
"UpdateMember"
NameCreateVoteAction
=
"CreateVote"
NameCommitVoteAction
=
"CommitVote"
)
// log类型id值
const
(
TyUnknownLog
=
iota
+
100
TyCreateGroupLog
TyUpdateMemberLog
TyCreateVoteLog
TyCommitVoteLog
NameCreateGroupLog
=
"CreateGroupLog"
NameUpdateMemberLog
=
"UpdateMemberLog"
NameCreateVoteLog
=
"CreateVoteLog"
NameCommitVoteLog
=
"CommitVoteLog"
)
var
(
//VoteX 执行器名称定义
VoteX
=
"vote"
//定义actionMap
actionMap
=
map
[
string
]
int32
{
NameCreateGroupAction
:
TyCreateGroupAction
,
NameUpdateMemberAction
:
TyUpdateMemberAction
,
NameCreateVoteAction
:
TyCreateVoteAction
,
NameCommitVoteAction
:
TyCommitVoteAction
,
}
//定义log的id和具体log类型及名称,填入具体自定义log类型
logMap
=
map
[
int64
]
*
types
.
LogInfo
{
TyCreateGroupLog
:
{
Ty
:
reflect
.
TypeOf
(
GroupInfo
{}),
Name
:
NameCreateGroupLog
},
TyUpdateMemberLog
:
{
Ty
:
reflect
.
TypeOf
(
GroupInfo
{}),
Name
:
NameUpdateMemberLog
},
TyCreateVoteLog
:
{
Ty
:
reflect
.
TypeOf
(
VoteInfo
{}),
Name
:
NameCreateVoteLog
},
TyCommitVoteLog
:
{
Ty
:
reflect
.
TypeOf
(
VoteInfo
{}),
Name
:
NameCommitVoteLog
},
}
tlog
=
log
.
New
(
"module"
,
"vote.types"
)
)
// init defines a register function
func
init
()
{
types
.
AllowUserExec
=
append
(
types
.
AllowUserExec
,
[]
byte
(
VoteX
))
//注册合约启用高度
types
.
RegFork
(
VoteX
,
InitFork
)
types
.
RegExec
(
VoteX
,
InitExecutor
)
}
// InitFork defines register fork
func
InitFork
(
cfg
*
types
.
Chain33Config
)
{
cfg
.
RegisterDappFork
(
VoteX
,
"Enable"
,
0
)
}
// InitExecutor defines register executor
func
InitExecutor
(
cfg
*
types
.
Chain33Config
)
{
types
.
RegistorExecutor
(
VoteX
,
NewType
(
cfg
))
}
type
voteType
struct
{
types
.
ExecTypeBase
}
func
NewType
(
cfg
*
types
.
Chain33Config
)
*
voteType
{
c
:=
&
voteType
{}
c
.
SetChild
(
c
)
c
.
SetConfig
(
cfg
)
return
c
}
// GetPayload 获取合约action结构
func
(
v
*
voteType
)
GetPayload
()
types
.
Message
{
return
&
VoteAction
{}
}
// GeTypeMap 获取合约action的id和name信息
func
(
v
*
voteType
)
GetTypeMap
()
map
[
string
]
int32
{
return
actionMap
}
// GetLogMap 获取合约log相关信息
func
(
v
*
voteType
)
GetLogMap
()
map
[
int64
]
*
types
.
LogInfo
{
return
logMap
}
plugin/dapp/vote/types/vote.pb.go
0 → 100644
View file @
5226c257
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: vote.proto
package
types
import
(
fmt
"fmt"
math
"math"
proto
"github.com/golang/protobuf/proto"
)
// Reference imports to suppress errors if they are not otherwise used.
var
_
=
proto
.
Marshal
var
_
=
fmt
.
Errorf
var
_
=
math
.
Inf
// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const
_
=
proto
.
ProtoPackageIsVersion3
// please upgrade the proto package
// vote 合约交易行为总类型
type
VoteAction
struct
{
Ty
int32
`protobuf:"varint,1,opt,name=ty,proto3" json:"ty,omitempty"`
// Types that are valid to be assigned to Value:
// *VoteAction_CreateGroup
// *VoteAction_UpdateMember
// *VoteAction_CreateVote
// *VoteAction_CommitVote
Value
isVoteAction_Value
`protobuf_oneof:"value"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
VoteAction
)
Reset
()
{
*
m
=
VoteAction
{}
}
func
(
m
*
VoteAction
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
VoteAction
)
ProtoMessage
()
{}
func
(
*
VoteAction
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
0
}
}
func
(
m
*
VoteAction
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_VoteAction
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
VoteAction
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_VoteAction
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
VoteAction
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_VoteAction
.
Merge
(
m
,
src
)
}
func
(
m
*
VoteAction
)
XXX_Size
()
int
{
return
xxx_messageInfo_VoteAction
.
Size
(
m
)
}
func
(
m
*
VoteAction
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_VoteAction
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_VoteAction
proto
.
InternalMessageInfo
func
(
m
*
VoteAction
)
GetTy
()
int32
{
if
m
!=
nil
{
return
m
.
Ty
}
return
0
}
type
isVoteAction_Value
interface
{
isVoteAction_Value
()
}
type
VoteAction_CreateGroup
struct
{
CreateGroup
*
CreateGroup
`protobuf:"bytes,2,opt,name=createGroup,proto3,oneof"`
}
type
VoteAction_UpdateMember
struct
{
UpdateMember
*
UpdateMember
`protobuf:"bytes,3,opt,name=updateMember,proto3,oneof"`
}
type
VoteAction_CreateVote
struct
{
CreateVote
*
CreateVote
`protobuf:"bytes,4,opt,name=createVote,proto3,oneof"`
}
type
VoteAction_CommitVote
struct
{
CommitVote
*
CommitVote
`protobuf:"bytes,5,opt,name=commitVote,proto3,oneof"`
}
func
(
*
VoteAction_CreateGroup
)
isVoteAction_Value
()
{}
func
(
*
VoteAction_UpdateMember
)
isVoteAction_Value
()
{}
func
(
*
VoteAction_CreateVote
)
isVoteAction_Value
()
{}
func
(
*
VoteAction_CommitVote
)
isVoteAction_Value
()
{}
func
(
m
*
VoteAction
)
GetValue
()
isVoteAction_Value
{
if
m
!=
nil
{
return
m
.
Value
}
return
nil
}
func
(
m
*
VoteAction
)
GetCreateGroup
()
*
CreateGroup
{
if
x
,
ok
:=
m
.
GetValue
()
.
(
*
VoteAction_CreateGroup
);
ok
{
return
x
.
CreateGroup
}
return
nil
}
func
(
m
*
VoteAction
)
GetUpdateMember
()
*
UpdateMember
{
if
x
,
ok
:=
m
.
GetValue
()
.
(
*
VoteAction_UpdateMember
);
ok
{
return
x
.
UpdateMember
}
return
nil
}
func
(
m
*
VoteAction
)
GetCreateVote
()
*
CreateVote
{
if
x
,
ok
:=
m
.
GetValue
()
.
(
*
VoteAction_CreateVote
);
ok
{
return
x
.
CreateVote
}
return
nil
}
func
(
m
*
VoteAction
)
GetCommitVote
()
*
CommitVote
{
if
x
,
ok
:=
m
.
GetValue
()
.
(
*
VoteAction_CommitVote
);
ok
{
return
x
.
CommitVote
}
return
nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func
(
*
VoteAction
)
XXX_OneofWrappers
()
[]
interface
{}
{
return
[]
interface
{}{
(
*
VoteAction_CreateGroup
)(
nil
),
(
*
VoteAction_UpdateMember
)(
nil
),
(
*
VoteAction_CreateVote
)(
nil
),
(
*
VoteAction_CommitVote
)(
nil
),
}
}
type
GroupMember
struct
{
Addr
string
`protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
VoteWeight
uint32
`protobuf:"varint,2,opt,name=voteWeight,proto3" json:"voteWeight,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
GroupMember
)
Reset
()
{
*
m
=
GroupMember
{}
}
func
(
m
*
GroupMember
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GroupMember
)
ProtoMessage
()
{}
func
(
*
GroupMember
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
1
}
}
func
(
m
*
GroupMember
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_GroupMember
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
GroupMember
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_GroupMember
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
GroupMember
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_GroupMember
.
Merge
(
m
,
src
)
}
func
(
m
*
GroupMember
)
XXX_Size
()
int
{
return
xxx_messageInfo_GroupMember
.
Size
(
m
)
}
func
(
m
*
GroupMember
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_GroupMember
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_GroupMember
proto
.
InternalMessageInfo
func
(
m
*
GroupMember
)
GetAddr
()
string
{
if
m
!=
nil
{
return
m
.
Addr
}
return
""
}
func
(
m
*
GroupMember
)
GetVoteWeight
()
uint32
{
if
m
!=
nil
{
return
m
.
VoteWeight
}
return
0
}
//创建投票组
type
CreateGroup
struct
{
Name
string
`protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Admins
[]
string
`protobuf:"bytes,2,rep,name=admins,proto3" json:"admins,omitempty"`
Members
[]
*
GroupMember
`protobuf:"bytes,3,rep,name=members,proto3" json:"members,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
CreateGroup
)
Reset
()
{
*
m
=
CreateGroup
{}
}
func
(
m
*
CreateGroup
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
CreateGroup
)
ProtoMessage
()
{}
func
(
*
CreateGroup
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
2
}
}
func
(
m
*
CreateGroup
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_CreateGroup
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
CreateGroup
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_CreateGroup
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
CreateGroup
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_CreateGroup
.
Merge
(
m
,
src
)
}
func
(
m
*
CreateGroup
)
XXX_Size
()
int
{
return
xxx_messageInfo_CreateGroup
.
Size
(
m
)
}
func
(
m
*
CreateGroup
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_CreateGroup
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_CreateGroup
proto
.
InternalMessageInfo
func
(
m
*
CreateGroup
)
GetName
()
string
{
if
m
!=
nil
{
return
m
.
Name
}
return
""
}
func
(
m
*
CreateGroup
)
GetAdmins
()
[]
string
{
if
m
!=
nil
{
return
m
.
Admins
}
return
nil
}
func
(
m
*
CreateGroup
)
GetMembers
()
[]
*
GroupMember
{
if
m
!=
nil
{
return
m
.
Members
}
return
nil
}
//更新投票组
type
UpdateMember
struct
{
GroupID
string
`protobuf:"bytes,1,opt,name=groupID,proto3" json:"groupID,omitempty"`
AddMembers
[]
*
GroupMember
`protobuf:"bytes,2,rep,name=addMembers,proto3" json:"addMembers,omitempty"`
RemoveMemberAddrs
[]
string
`protobuf:"bytes,3,rep,name=removeMemberAddrs,proto3" json:"removeMemberAddrs,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
UpdateMember
)
Reset
()
{
*
m
=
UpdateMember
{}
}
func
(
m
*
UpdateMember
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
UpdateMember
)
ProtoMessage
()
{}
func
(
*
UpdateMember
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
3
}
}
func
(
m
*
UpdateMember
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_UpdateMember
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
UpdateMember
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_UpdateMember
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
UpdateMember
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_UpdateMember
.
Merge
(
m
,
src
)
}
func
(
m
*
UpdateMember
)
XXX_Size
()
int
{
return
xxx_messageInfo_UpdateMember
.
Size
(
m
)
}
func
(
m
*
UpdateMember
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_UpdateMember
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_UpdateMember
proto
.
InternalMessageInfo
func
(
m
*
UpdateMember
)
GetGroupID
()
string
{
if
m
!=
nil
{
return
m
.
GroupID
}
return
""
}
func
(
m
*
UpdateMember
)
GetAddMembers
()
[]
*
GroupMember
{
if
m
!=
nil
{
return
m
.
AddMembers
}
return
nil
}
func
(
m
*
UpdateMember
)
GetRemoveMemberAddrs
()
[]
string
{
if
m
!=
nil
{
return
m
.
RemoveMemberAddrs
}
return
nil
}
//
type
GroupInfo
struct
{
ID
string
`protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
Name
string
`protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
MemberNum
uint32
`protobuf:"varint,3,opt,name=memberNum,proto3" json:"memberNum,omitempty"`
Creator
string
`protobuf:"bytes,4,opt,name=creator,proto3" json:"creator,omitempty"`
Admins
[]
string
`protobuf:"bytes,5,rep,name=admins,proto3" json:"admins,omitempty"`
Members
[]
*
GroupMember
`protobuf:"bytes,6,rep,name=members,proto3" json:"members,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
GroupInfo
)
Reset
()
{
*
m
=
GroupInfo
{}
}
func
(
m
*
GroupInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GroupInfo
)
ProtoMessage
()
{}
func
(
*
GroupInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
4
}
}
func
(
m
*
GroupInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_GroupInfo
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
GroupInfo
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_GroupInfo
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
GroupInfo
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_GroupInfo
.
Merge
(
m
,
src
)
}
func
(
m
*
GroupInfo
)
XXX_Size
()
int
{
return
xxx_messageInfo_GroupInfo
.
Size
(
m
)
}
func
(
m
*
GroupInfo
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_GroupInfo
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_GroupInfo
proto
.
InternalMessageInfo
func
(
m
*
GroupInfo
)
GetID
()
string
{
if
m
!=
nil
{
return
m
.
ID
}
return
""
}
func
(
m
*
GroupInfo
)
GetName
()
string
{
if
m
!=
nil
{
return
m
.
Name
}
return
""
}
func
(
m
*
GroupInfo
)
GetMemberNum
()
uint32
{
if
m
!=
nil
{
return
m
.
MemberNum
}
return
0
}
func
(
m
*
GroupInfo
)
GetCreator
()
string
{
if
m
!=
nil
{
return
m
.
Creator
}
return
""
}
func
(
m
*
GroupInfo
)
GetAdmins
()
[]
string
{
if
m
!=
nil
{
return
m
.
Admins
}
return
nil
}
func
(
m
*
GroupInfo
)
GetMembers
()
[]
*
GroupMember
{
if
m
!=
nil
{
return
m
.
Members
}
return
nil
}
type
VoteOption
struct
{
Option
string
`protobuf:"bytes,1,opt,name=option,proto3" json:"option,omitempty"`
Score
uint32
`protobuf:"varint,2,opt,name=score,proto3" json:"score,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
VoteOption
)
Reset
()
{
*
m
=
VoteOption
{}
}
func
(
m
*
VoteOption
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
VoteOption
)
ProtoMessage
()
{}
func
(
*
VoteOption
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
5
}
}
func
(
m
*
VoteOption
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_VoteOption
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
VoteOption
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_VoteOption
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
VoteOption
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_VoteOption
.
Merge
(
m
,
src
)
}
func
(
m
*
VoteOption
)
XXX_Size
()
int
{
return
xxx_messageInfo_VoteOption
.
Size
(
m
)
}
func
(
m
*
VoteOption
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_VoteOption
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_VoteOption
proto
.
InternalMessageInfo
func
(
m
*
VoteOption
)
GetOption
()
string
{
if
m
!=
nil
{
return
m
.
Option
}
return
""
}
func
(
m
*
VoteOption
)
GetScore
()
uint32
{
if
m
!=
nil
{
return
m
.
Score
}
return
0
}
//
type
CreateVote
struct
{
Name
string
`protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
VoteGroups
[]
string
`protobuf:"bytes,2,rep,name=voteGroups,proto3" json:"voteGroups,omitempty"`
VoteOptions
[]
string
`protobuf:"bytes,3,rep,name=voteOptions,proto3" json:"voteOptions,omitempty"`
BeginTimestamp
int64
`protobuf:"varint,4,opt,name=beginTimestamp,proto3" json:"beginTimestamp,omitempty"`
EndTimestamp
int64
`protobuf:"varint,5,opt,name=endTimestamp,proto3" json:"endTimestamp,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
CreateVote
)
Reset
()
{
*
m
=
CreateVote
{}
}
func
(
m
*
CreateVote
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
CreateVote
)
ProtoMessage
()
{}
func
(
*
CreateVote
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
6
}
}
func
(
m
*
CreateVote
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_CreateVote
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
CreateVote
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_CreateVote
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
CreateVote
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_CreateVote
.
Merge
(
m
,
src
)
}
func
(
m
*
CreateVote
)
XXX_Size
()
int
{
return
xxx_messageInfo_CreateVote
.
Size
(
m
)
}
func
(
m
*
CreateVote
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_CreateVote
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_CreateVote
proto
.
InternalMessageInfo
func
(
m
*
CreateVote
)
GetName
()
string
{
if
m
!=
nil
{
return
m
.
Name
}
return
""
}
func
(
m
*
CreateVote
)
GetVoteGroups
()
[]
string
{
if
m
!=
nil
{
return
m
.
VoteGroups
}
return
nil
}
func
(
m
*
CreateVote
)
GetVoteOptions
()
[]
string
{
if
m
!=
nil
{
return
m
.
VoteOptions
}
return
nil
}
func
(
m
*
CreateVote
)
GetBeginTimestamp
()
int64
{
if
m
!=
nil
{
return
m
.
BeginTimestamp
}
return
0
}
func
(
m
*
CreateVote
)
GetEndTimestamp
()
int64
{
if
m
!=
nil
{
return
m
.
EndTimestamp
}
return
0
}
//
type
CommitVote
struct
{
VoteID
string
`protobuf:"bytes,1,opt,name=voteID,proto3" json:"voteID,omitempty"`
GroupID
string
`protobuf:"bytes,2,opt,name=groupID,proto3" json:"groupID,omitempty"`
OptionIndex
uint32
`protobuf:"varint,3,opt,name=optionIndex,proto3" json:"optionIndex,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
CommitVote
)
Reset
()
{
*
m
=
CommitVote
{}
}
func
(
m
*
CommitVote
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
CommitVote
)
ProtoMessage
()
{}
func
(
*
CommitVote
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
7
}
}
func
(
m
*
CommitVote
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_CommitVote
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
CommitVote
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_CommitVote
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
CommitVote
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_CommitVote
.
Merge
(
m
,
src
)
}
func
(
m
*
CommitVote
)
XXX_Size
()
int
{
return
xxx_messageInfo_CommitVote
.
Size
(
m
)
}
func
(
m
*
CommitVote
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_CommitVote
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_CommitVote
proto
.
InternalMessageInfo
func
(
m
*
CommitVote
)
GetVoteID
()
string
{
if
m
!=
nil
{
return
m
.
VoteID
}
return
""
}
func
(
m
*
CommitVote
)
GetGroupID
()
string
{
if
m
!=
nil
{
return
m
.
GroupID
}
return
""
}
func
(
m
*
CommitVote
)
GetOptionIndex
()
uint32
{
if
m
!=
nil
{
return
m
.
OptionIndex
}
return
0
}
//
type
VoteInfo
struct
{
ID
string
`protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
Name
string
`protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
Creator
string
`protobuf:"bytes,3,opt,name=creator,proto3" json:"creator,omitempty"`
VoteGroups
[]
string
`protobuf:"bytes,4,rep,name=voteGroups,proto3" json:"voteGroups,omitempty"`
VoteOptions
[]
*
VoteOption
`protobuf:"bytes,5,rep,name=voteOptions,proto3" json:"voteOptions,omitempty"`
BeginTimestamp
int64
`protobuf:"varint,6,opt,name=beginTimestamp,proto3" json:"beginTimestamp,omitempty"`
EndTimestamp
int64
`protobuf:"varint,7,opt,name=endTimestamp,proto3" json:"endTimestamp,omitempty"`
VotedMembers
[]
string
`protobuf:"bytes,8,rep,name=votedMembers,proto3" json:"votedMembers,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
VoteInfo
)
Reset
()
{
*
m
=
VoteInfo
{}
}
func
(
m
*
VoteInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
VoteInfo
)
ProtoMessage
()
{}
func
(
*
VoteInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
8
}
}
func
(
m
*
VoteInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_VoteInfo
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
VoteInfo
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_VoteInfo
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
VoteInfo
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_VoteInfo
.
Merge
(
m
,
src
)
}
func
(
m
*
VoteInfo
)
XXX_Size
()
int
{
return
xxx_messageInfo_VoteInfo
.
Size
(
m
)
}
func
(
m
*
VoteInfo
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_VoteInfo
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_VoteInfo
proto
.
InternalMessageInfo
func
(
m
*
VoteInfo
)
GetID
()
string
{
if
m
!=
nil
{
return
m
.
ID
}
return
""
}
func
(
m
*
VoteInfo
)
GetName
()
string
{
if
m
!=
nil
{
return
m
.
Name
}
return
""
}
func
(
m
*
VoteInfo
)
GetCreator
()
string
{
if
m
!=
nil
{
return
m
.
Creator
}
return
""
}
func
(
m
*
VoteInfo
)
GetVoteGroups
()
[]
string
{
if
m
!=
nil
{
return
m
.
VoteGroups
}
return
nil
}
func
(
m
*
VoteInfo
)
GetVoteOptions
()
[]
*
VoteOption
{
if
m
!=
nil
{
return
m
.
VoteOptions
}
return
nil
}
func
(
m
*
VoteInfo
)
GetBeginTimestamp
()
int64
{
if
m
!=
nil
{
return
m
.
BeginTimestamp
}
return
0
}
func
(
m
*
VoteInfo
)
GetEndTimestamp
()
int64
{
if
m
!=
nil
{
return
m
.
EndTimestamp
}
return
0
}
func
(
m
*
VoteInfo
)
GetVotedMembers
()
[]
string
{
if
m
!=
nil
{
return
m
.
VotedMembers
}
return
nil
}
type
VoteInfos
struct
{
VoteList
[]
*
VoteInfo
`protobuf:"bytes,1,rep,name=voteList,proto3" json:"voteList,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
VoteInfos
)
Reset
()
{
*
m
=
VoteInfos
{}
}
func
(
m
*
VoteInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
VoteInfos
)
ProtoMessage
()
{}
func
(
*
VoteInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
9
}
}
func
(
m
*
VoteInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_VoteInfos
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
VoteInfos
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_VoteInfos
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
VoteInfos
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_VoteInfos
.
Merge
(
m
,
src
)
}
func
(
m
*
VoteInfos
)
XXX_Size
()
int
{
return
xxx_messageInfo_VoteInfos
.
Size
(
m
)
}
func
(
m
*
VoteInfos
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_VoteInfos
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_VoteInfos
proto
.
InternalMessageInfo
func
(
m
*
VoteInfos
)
GetVoteList
()
[]
*
VoteInfo
{
if
m
!=
nil
{
return
m
.
VoteList
}
return
nil
}
type
GroupVoteInfo
struct
{
GroupInfo
*
GroupInfo
`protobuf:"bytes,1,opt,name=groupInfo,proto3" json:"groupInfo,omitempty"`
VoteIDs
[]
string
`protobuf:"bytes,2,rep,name=voteIDs,proto3" json:"voteIDs,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
GroupVoteInfo
)
Reset
()
{
*
m
=
GroupVoteInfo
{}
}
func
(
m
*
GroupVoteInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GroupVoteInfo
)
ProtoMessage
()
{}
func
(
*
GroupVoteInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
10
}
}
func
(
m
*
GroupVoteInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_GroupVoteInfo
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
GroupVoteInfo
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_GroupVoteInfo
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
GroupVoteInfo
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_GroupVoteInfo
.
Merge
(
m
,
src
)
}
func
(
m
*
GroupVoteInfo
)
XXX_Size
()
int
{
return
xxx_messageInfo_GroupVoteInfo
.
Size
(
m
)
}
func
(
m
*
GroupVoteInfo
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_GroupVoteInfo
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_GroupVoteInfo
proto
.
InternalMessageInfo
func
(
m
*
GroupVoteInfo
)
GetGroupInfo
()
*
GroupInfo
{
if
m
!=
nil
{
return
m
.
GroupInfo
}
return
nil
}
func
(
m
*
GroupVoteInfo
)
GetVoteIDs
()
[]
string
{
if
m
!=
nil
{
return
m
.
VoteIDs
}
return
nil
}
type
GroupVoteInfos
struct
{
GroupList
[]
*
GroupVoteInfo
`protobuf:"bytes,1,rep,name=groupList,proto3" json:"groupList,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
GroupVoteInfos
)
Reset
()
{
*
m
=
GroupVoteInfos
{}
}
func
(
m
*
GroupVoteInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GroupVoteInfos
)
ProtoMessage
()
{}
func
(
*
GroupVoteInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
11
}
}
func
(
m
*
GroupVoteInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_GroupVoteInfos
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
GroupVoteInfos
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_GroupVoteInfos
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
GroupVoteInfos
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_GroupVoteInfos
.
Merge
(
m
,
src
)
}
func
(
m
*
GroupVoteInfos
)
XXX_Size
()
int
{
return
xxx_messageInfo_GroupVoteInfos
.
Size
(
m
)
}
func
(
m
*
GroupVoteInfos
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_GroupVoteInfos
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_GroupVoteInfos
proto
.
InternalMessageInfo
func
(
m
*
GroupVoteInfos
)
GetGroupList
()
[]
*
GroupVoteInfo
{
if
m
!=
nil
{
return
m
.
GroupList
}
return
nil
}
type
MemberInfo
struct
{
Addr
string
`protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
GroupIDs
[]
string
`protobuf:"bytes,2,rep,name=groupIDs,proto3" json:"groupIDs,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
MemberInfo
)
Reset
()
{
*
m
=
MemberInfo
{}
}
func
(
m
*
MemberInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
MemberInfo
)
ProtoMessage
()
{}
func
(
*
MemberInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
12
}
}
func
(
m
*
MemberInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_MemberInfo
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
MemberInfo
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_MemberInfo
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
MemberInfo
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_MemberInfo
.
Merge
(
m
,
src
)
}
func
(
m
*
MemberInfo
)
XXX_Size
()
int
{
return
xxx_messageInfo_MemberInfo
.
Size
(
m
)
}
func
(
m
*
MemberInfo
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_MemberInfo
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_MemberInfo
proto
.
InternalMessageInfo
func
(
m
*
MemberInfo
)
GetAddr
()
string
{
if
m
!=
nil
{
return
m
.
Addr
}
return
""
}
func
(
m
*
MemberInfo
)
GetGroupIDs
()
[]
string
{
if
m
!=
nil
{
return
m
.
GroupIDs
}
return
nil
}
type
MemberInfos
struct
{
MemberList
[]
*
MemberInfo
`protobuf:"bytes,1,rep,name=memberList,proto3" json:"memberList,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
MemberInfos
)
Reset
()
{
*
m
=
MemberInfos
{}
}
func
(
m
*
MemberInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
MemberInfos
)
ProtoMessage
()
{}
func
(
*
MemberInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
13
}
}
func
(
m
*
MemberInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_MemberInfos
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
MemberInfos
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_MemberInfos
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
MemberInfos
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_MemberInfos
.
Merge
(
m
,
src
)
}
func
(
m
*
MemberInfos
)
XXX_Size
()
int
{
return
xxx_messageInfo_MemberInfos
.
Size
(
m
)
}
func
(
m
*
MemberInfos
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_MemberInfos
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_MemberInfos
proto
.
InternalMessageInfo
func
(
m
*
MemberInfos
)
GetMemberList
()
[]
*
MemberInfo
{
if
m
!=
nil
{
return
m
.
MemberList
}
return
nil
}
type
ReqListItem
struct
{
StartItemID
string
`protobuf:"bytes,1,opt,name=startItemID,proto3" json:"startItemID,omitempty"`
Count
int32
`protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"`
Direction
int32
`protobuf:"varint,3,opt,name=direction,proto3" json:"direction,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
ReqListItem
)
Reset
()
{
*
m
=
ReqListItem
{}
}
func
(
m
*
ReqListItem
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReqListItem
)
ProtoMessage
()
{}
func
(
*
ReqListItem
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_21d31c94b62a6ac7
,
[]
int
{
14
}
}
func
(
m
*
ReqListItem
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_ReqListItem
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
ReqListItem
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_ReqListItem
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
ReqListItem
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_ReqListItem
.
Merge
(
m
,
src
)
}
func
(
m
*
ReqListItem
)
XXX_Size
()
int
{
return
xxx_messageInfo_ReqListItem
.
Size
(
m
)
}
func
(
m
*
ReqListItem
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_ReqListItem
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_ReqListItem
proto
.
InternalMessageInfo
func
(
m
*
ReqListItem
)
GetStartItemID
()
string
{
if
m
!=
nil
{
return
m
.
StartItemID
}
return
""
}
func
(
m
*
ReqListItem
)
GetCount
()
int32
{
if
m
!=
nil
{
return
m
.
Count
}
return
0
}
func
(
m
*
ReqListItem
)
GetDirection
()
int32
{
if
m
!=
nil
{
return
m
.
Direction
}
return
0
}
func
init
()
{
proto
.
RegisterType
((
*
VoteAction
)(
nil
),
"types.VoteAction"
)
proto
.
RegisterType
((
*
GroupMember
)(
nil
),
"types.GroupMember"
)
proto
.
RegisterType
((
*
CreateGroup
)(
nil
),
"types.CreateGroup"
)
proto
.
RegisterType
((
*
UpdateMember
)(
nil
),
"types.UpdateMember"
)
proto
.
RegisterType
((
*
GroupInfo
)(
nil
),
"types.GroupInfo"
)
proto
.
RegisterType
((
*
VoteOption
)(
nil
),
"types.VoteOption"
)
proto
.
RegisterType
((
*
CreateVote
)(
nil
),
"types.CreateVote"
)
proto
.
RegisterType
((
*
CommitVote
)(
nil
),
"types.CommitVote"
)
proto
.
RegisterType
((
*
VoteInfo
)(
nil
),
"types.VoteInfo"
)
proto
.
RegisterType
((
*
VoteInfos
)(
nil
),
"types.VoteInfos"
)
proto
.
RegisterType
((
*
GroupVoteInfo
)(
nil
),
"types.GroupVoteInfo"
)
proto
.
RegisterType
((
*
GroupVoteInfos
)(
nil
),
"types.GroupVoteInfos"
)
proto
.
RegisterType
((
*
MemberInfo
)(
nil
),
"types.MemberInfo"
)
proto
.
RegisterType
((
*
MemberInfos
)(
nil
),
"types.MemberInfos"
)
proto
.
RegisterType
((
*
ReqListItem
)(
nil
),
"types.ReqListItem"
)
}
func
init
()
{
proto
.
RegisterFile
(
"vote.proto"
,
fileDescriptor_21d31c94b62a6ac7
)
}
var
fileDescriptor_21d31c94b62a6ac7
=
[]
byte
{
// 703 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0x8c
,
0x55
,
0x5f
,
0x6b
,
0xd4
,
0x4e
,
0x14
,
0x6d
,
0xb2
,
0xcd
,
0xee
,
0xe6
,
0xa6
,
0xed
,
0xef
,
0xd7
,
0xb1
,
0x94
,
0x20
,
0x22
,
0x61
,
0x1e
,
0xa4
,
0x60
,
0x59
,
0x70
,
0x0b
,
0xa2
,
0xe2
,
0x83
,
0xd5
,
0x82
,
0x5d
,
0xb0
,
0x0a
,
0x83
,
0x7f
,
0xf0
,
0xcd
,
0x74
,
0x33
,
0xae
,
0x01
,
0x93
,
0x89
,
0xc9
,
0xec
,
0x62
,
0x5f
,
0x7d
,
0x14
,
0xfc
,
0x28
,
0xfa
,
0x19
,
0x65
,
0x6e
,
0x66
,
0x26
,
0x13
,
0xb7
,
0xa5
,
0x7d
,
0x9b
,
0x7b
,
0xe7
,
0xdc
,
0x3b
,
0x77
,
0xce
,
0x39
,
0x93
,
0x00
,
0xac
,
0x84
,
0xe4
,
0x93
,
0xaa
,
0x16
,
0x52
,
0x90
,
0x40
,
0x5e
,
0x54
,
0xbc
,
0xa1
,
0x3f
,
0x7c
,
0x80
,
0xf7
,
0x42
,
0xf2
,
0xe3
,
0xb9
,
0xcc
,
0x45
,
0x49
,
0x76
,
0xc0
,
0x97
,
0x17
,
0xb1
,
0x97
,
0x78
,
0x07
,
0x01
,
0xf3
,
0xe5
,
0x05
,
0x79
,
0x08
,
0xd1
,
0xbc
,
0xe6
,
0xa9
,
0xe4
,
0x2f
,
0x6b
,
0xb1
,
0xac
,
0x62
,
0x3f
,
0xf1
,
0x0e
,
0xa2
,
0x29
,
0x99
,
0x60
,
0xed
,
0xe4
,
0x45
,
0xb7
,
0x73
,
0xba
,
0xc1
,
0x5c
,
0x20
,
0x79
,
0x0c
,
0x5b
,
0xcb
,
0x2a
,
0x4b
,
0x25
,
0x3f
,
0xe3
,
0xc5
,
0x39
,
0xaf
,
0xe3
,
0x01
,
0x16
,
0xde
,
0xd2
,
0x85
,
0xef
,
0x9c
,
0xad
,
0xd3
,
0x0d
,
0xd6
,
0x83
,
0x92
,
0x23
,
0x80
,
0xb6
,
0x93
,
0x1a
,
0x2b
,
0xde
,
0xc4
,
0xc2
,
0xdd
,
0xde
,
0x89
,
0x6a
,
0xe3
,
0x74
,
0x83
,
0x39
,
0x30
,
0x2c
,
0x12
,
0x45
,
0x91
,
0x4b
,
0x2c
,
0x0a
,
0xfa
,
0x45
,
0x76
,
0x03
,
0x8b
,
0x6c
,
0xf4
,
0x7c
,
0x04
,
0xc1
,
0x2a
,
0xfd
,
0xba
,
0xe4
,
0xf4
,
0x18
,
0x22
,
0x1c
,
0x5b
,
0x4f
,
0x40
,
0x60
,
0x33
,
0xcd
,
0xb2
,
0x1a
,
0x69
,
0x08
,
0x19
,
0xae
,
0xc9
,
0xdd
,
0x96
,
0xbc
,
0x0f
,
0x3c
,
0x5f
,
0x7c
,
0x91
,
0xc8
,
0xc3
,
0x36
,
0x73
,
0x32
,
0x74
,
0x01
,
0x91
,
0x43
,
0x87
,
0x6a
,
0x51
,
0xa6
,
0x05
,
0x37
,
0x2d
,
0xd4
,
0x9a
,
0xec
,
0xc3
,
0x30
,
0xcd
,
0x8a
,
0xbc
,
0x6c
,
0x62
,
0x3f
,
0x19
,
0x1c
,
0x84
,
0x4c
,
0x47
,
0xe4
,
0x10
,
0x46
,
0x05
,
0x1e
,
0xdc
,
0xc4
,
0x83
,
0x64
,
0xe0
,
0xf0
,
0xeb
,
0xcc
,
0xc4
,
0x0c
,
0x84
,
0xfe
,
0xf4
,
0x60
,
0xcb
,
0xe5
,
0x8f
,
0xc4
,
0x30
,
0x5a
,
0x28
,
0xe0
,
0xec
,
0x44
,
0x9f
,
0x66
,
0x42
,
0x32
,
0x05
,
0x48
,
0xb3
,
0xec
,
0x4c
,
0xf7
,
0xf6
,
0xaf
,
0xec
,
0xed
,
0xa0
,
0xc8
,
0x21
,
0xec
,
0xd6
,
0xbc
,
0x10
,
0x2b
,
0xdd
,
0xfd
,
0x38
,
0xcb
,
0xf4
,
0x58
,
0x21
,
0x5b
,
0xdf
,
0xa0
,
0xbf
,
0x3d
,
0x08
,
0xb1
,
0xd3
,
0xac
,
0xfc
,
0x2c
,
0x94
,
0x79
,
0xec
,
0x10
,
0xfe
,
0xec
,
0xc4
,
0x92
,
0xe0
,
0x3b
,
0x24
,
0xdc
,
0x81
,
0xb0
,
0xbd
,
0xc9
,
0xeb
,
0x65
,
0x81
,
0xae
,
0xd8
,
0x66
,
0x5d
,
0x42
,
0xdd
,
0x05
,
0x45
,
0x15
,
0x35
,
0x0a
,
0x1f
,
0x32
,
0x13
,
0x3a
,
0xe4
,
0x05
,
0x57
,
0x91
,
0x37
,
0xbc
,
0x9e
,
0xbc
,
0x27
,
0xad
,
0xd9
,
0xdf
,
0x54
,
0x68
,
0xf6
,
0x7d
,
0x18
,
0x0a
,
0x5c
,
0xe9
,
0x99
,
0x75
,
0x44
,
0xf6
,
0x20
,
0x68
,
0xe6
,
0xa2
,
0xe6
,
0x5a
,
0xe6
,
0x36
,
0xa0
,
0x7f
,
0x3c
,
0x80
,
0xce
,
0x7f
,
0x97
,
0x2a
,
0xac
,
0x4d
,
0x82
,
0x47
,
0x1b
,
0x95
,
0x9d
,
0x0c
,
0x49
,
0x20
,
0x5a
,
0xd9
,
0xe3
,
0x0d
,
0xad
,
0x6e
,
0x8a
,
0xdc
,
0x83
,
0x9d
,
0x73
,
0xbe
,
0xc8
,
0xcb
,
0xb7
,
0x79
,
0xc1
,
0x1b
,
0x99
,
0x16
,
0x15
,
0xf2
,
0x30
,
0x60
,
0xff
,
0x64
,
0x09
,
0x85
,
0x2d
,
0x5e
,
0x66
,
0x1d
,
0x2a
,
0x40
,
0x54
,
0x2f
,
0x47
,
0x3f
,
0x01
,
0x74
,
0xd6
,
0x57
,
0x97
,
0x55
,
0x07
,
0x59
,
0x81
,
0x74
,
0xe4
,
0xda
,
0xc7
,
0xef
,
0xdb
,
0x27
,
0x81
,
0xa8
,
0x25
,
0x64
,
0x56
,
0x66
,
0xfc
,
0xbb
,
0x16
,
0xcb
,
0x4d
,
0xd1
,
0x5f
,
0x3e
,
0x8c
,
0x55
,
0xf3
,
0x1b
,
0xab
,
0xef
,
0xe8
,
0x3b
,
0xe8
,
0xeb
,
0xdb
,
0xa7
,
0x6e
,
0x73
,
0x8d
,
0xba
,
0xa3
,
0x3e
,
0x75
,
0x01
,
0x6a
,
0x6d
,
0x5e
,
0x78
,
0xa7
,
0xe9
,
0x75
,
0x6c
,
0x0e
,
0x6f
,
0xc4
,
0xe6
,
0x68
,
0x9d
,
0x4d
,
0x85
,
0x51
,
0xad
,
0xed
,
0x73
,
0x1a
,
0xe3
,
0x88
,
0xbd
,
0x1c
,
0x7d
,
0x04
,
0xa1
,
0xa1
,
0xa3
,
0x21
,
0xf7
,
0x61
,
0xac
,
0x36
,
0x5f
,
0xe5
,
0x8d
,
0x8c
,
0x3d
,
0x1c
,
0xf7
,
0x3f
,
0x67
,
0x5c
,
0x85
,
0x61
,
0x16
,
0x40
,
0x3f
,
0xc2
,
0x36
,
0x5e
,
0xd4
,
0xb2
,
0x39
,
0x81
,
0x70
,
0x61
,
0x1e
,
0x16
,
0x92
,
0x1a
,
0x4d
,
0xff
,
0x77
,
0x9d
,
0x8d
,
0xf5
,
0x1d
,
0x44
,
0x31
,
0xdb
,
0x0a
,
0x6a
,
0x7c
,
0x67
,
0x42
,
0x7a
,
0x02
,
0x3b
,
0xbd
,
0xd6
,
0x0d
,
0x99
,
0xea
,
0xde
,
0xce
,
0x68
,
0x7b
,
0x6e
,
0x6f
,
0x3b
,
0x5f
,
0x07
,
0xa3
,
0x4f
,
0x01
,
0xda
,
0x5b
,
0xe2
,
0x69
,
0x97
,
0x7d
,
0x21
,
0x6f
,
0xc3
,
0x58
,
0x3b
,
0xc7
,
0x8c
,
0x60
,
0x63
,
0xfa
,
0x0c
,
0xa2
,
0xae
,
0xba
,
0x21
,
0x0f
,
0x00
,
0xda
,
0x17
,
0xe9
,
0x4c
,
0x60
,
0xb4
,
0xec
,
0x70
,
0xcc
,
0x01
,
0xd1
,
0x39
,
0x44
,
0x8c
,
0x7f
,
0x53
,
0xcb
,
0x99
,
0xe4
,
0x85
,
0xf2
,
0x66
,
0x23
,
0xd3
,
0x1a
,
0x03
,
0xeb
,
0x3a
,
0x37
,
0xa5
,
0x1e
,
0xf1
,
0x5c
,
0x2c
,
0xcb
,
0xf6
,
0x5b
,
0x1d
,
0xb0
,
0x36
,
0x50
,
0x9f
,
0x9f
,
0x2c
,
0xaf
,
0x39
,
0xfe
,
0xec
,
0xd0
,
0x82
,
0x01
,
0xeb
,
0x12
,
0xe7
,
0x43
,
0xfc
,
0x35
,
0x1e
,
0xfd
,
0x0d
,
0x00
,
0x00
,
0xff
,
0xff
,
0xf6
,
0x6e
,
0x23
,
0x7c
,
0x28
,
0x07
,
0x00
,
0x00
,
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment