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
c7422357
Commit
c7422357
authored
Nov 10, 2021
by
cxb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update exchange
parent
7fe229ce
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
995 additions
and
127 deletions
+995
-127
go.sum
go.sum
+0
-11
README.md
plugin/dapp/exchange/README.md
+1
-1
client.go
plugin/dapp/exchange/client/client.go
+11
-0
exchange.go
plugin/dapp/exchange/client/exchange.go
+143
-0
exchange_test.go
plugin/dapp/exchange/client/exchange_test.go
+143
-0
grpc_cli.go
plugin/dapp/exchange/client/grpc_cli.go
+145
-0
exchange_test.go
plugin/dapp/exchange/executor/exchange_test.go
+14
-14
exchangedb.go
plugin/dapp/exchange/executor/exchangedb.go
+0
-0
exchange.proto
plugin/dapp/exchange/proto/exchange.proto
+109
-97
chain33.toml
plugin/dapp/exchange/test/chain33.toml
+56
-0
main.go
plugin/dapp/exchange/test/cmd/main.go
+25
-0
exchange_test.go
plugin/dapp/exchange/test/exchange_test.go
+1
-0
exec_cli.go
plugin/dapp/exchange/test/exec_cli.go
+17
-2
grpc_cli.go
plugin/dapp/exchange/test/grpc_cli.go
+2
-2
prepare.sh
plugin/dapp/exchange/test/prepare.sh
+3
-0
errors.go
plugin/dapp/exchange/types/errors.go
+2
-0
exchange.go
plugin/dapp/exchange/types/exchange.go
+48
-0
exchange.pb.go
plugin/dapp/exchange/types/exchange.pb.go
+0
-0
exchangecfg.go
plugin/dapp/exchange/types/exchangecfg.go
+275
-0
No files found.
go.sum
View file @
c7422357
...
@@ -48,8 +48,6 @@ dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBr
...
@@ -48,8 +48,6 @@ dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBr
dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4=
dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4=
dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU=
dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU=
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
github.com/33cn/chain33 v1.65.6-0.20211020073541-bfe0910b872e h1:VR5RsFF/XXzBTJ+d2SspGyx5jOy47UzZnrNAag+PZh8=
github.com/33cn/chain33 v1.65.6-0.20211020073541-bfe0910b872e/go.mod h1:27Z1b54wJ6EhE1IGA3S5AxSQ/t8dktFVgPnkLNbMFoE=
github.com/33cn/chain33 v1.65.6-0.20211025083411-82c4406c6701 h1:XrlmULs3WrRHCJm/isW5WCiH3WlfeFgZHWDY0ZarVTI=
github.com/33cn/chain33 v1.65.6-0.20211025083411-82c4406c6701 h1:XrlmULs3WrRHCJm/isW5WCiH3WlfeFgZHWDY0ZarVTI=
github.com/33cn/chain33 v1.65.6-0.20211025083411-82c4406c6701/go.mod h1:27Z1b54wJ6EhE1IGA3S5AxSQ/t8dktFVgPnkLNbMFoE=
github.com/33cn/chain33 v1.65.6-0.20211025083411-82c4406c6701/go.mod h1:27Z1b54wJ6EhE1IGA3S5AxSQ/t8dktFVgPnkLNbMFoE=
github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
...
@@ -716,7 +714,6 @@ github.com/influxdata/flux v0.131.0/go.mod h1:CKvnYe6FHpTj/E0YGI7TcOZdGiYHoToOPS
...
@@ -716,7 +714,6 @@ github.com/influxdata/flux v0.131.0/go.mod h1:CKvnYe6FHpTj/E0YGI7TcOZdGiYHoToOPS
github.com/influxdata/httprouter v1.3.1-0.20191122104820-ee83e2772f69/go.mod h1:pwymjR6SrP3gD3pRj9RJwdl1j5s3doEEV8gS4X9qSzA=
github.com/influxdata/httprouter v1.3.1-0.20191122104820-ee83e2772f69/go.mod h1:pwymjR6SrP3gD3pRj9RJwdl1j5s3doEEV8gS4X9qSzA=
github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY=
github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY=
github.com/influxdata/influxdb v1.8.0/go.mod h1:SIzcnsjaHRFpmlxpJ4S3NT64qtEKYweNTUMb/vh0OMQ=
github.com/influxdata/influxdb v1.8.0/go.mod h1:SIzcnsjaHRFpmlxpJ4S3NT64qtEKYweNTUMb/vh0OMQ=
github.com/influxdata/influxdb v1.8.3 h1:WEypI1BQFTT4teLM+1qkEcvUi0dAvopAI/ir0vAiBg8=
github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI=
github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI=
github.com/influxdata/influxdb v1.9.5 h1:4O7AC5jOA9RoqtDuD2rysXbumcEwaqWlWXmwuyK+a2s=
github.com/influxdata/influxdb v1.9.5 h1:4O7AC5jOA9RoqtDuD2rysXbumcEwaqWlWXmwuyK+a2s=
github.com/influxdata/influxdb v1.9.5/go.mod h1:4uPVvcry9KWQVWLxyT9641qpkRXUBN+xa0MJFFNNLKo=
github.com/influxdata/influxdb v1.9.5/go.mod h1:4uPVvcry9KWQVWLxyT9641qpkRXUBN+xa0MJFFNNLKo=
...
@@ -863,7 +860,6 @@ github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPR
...
@@ -863,7 +860,6 @@ github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPR
github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk=
github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk=
github.com/koron/go-ssdp v0.0.2 h1:fL3wAoyT6hXHQlORyXUW4Q23kkQpJRgEAYcZB5BR71o=
github.com/koron/go-ssdp v0.0.2 h1:fL3wAoyT6hXHQlORyXUW4Q23kkQpJRgEAYcZB5BR71o=
...
@@ -876,7 +872,6 @@ github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn
...
@@ -876,7 +872,6 @@ github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
...
@@ -1154,7 +1149,6 @@ github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIG
...
@@ -1154,7 +1149,6 @@ github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIG
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
...
@@ -1251,7 +1245,6 @@ github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u
...
@@ -1251,7 +1245,6 @@ github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u
github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI=
github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI=
github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc=
github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc=
github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0=
github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0=
github.com/multiformats/go-multiaddr v0.4.0 h1:hL/K4ZJhJ5PTw3nwylq9lGU5yArzcAroZmex1ghSEkQ=
github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc=
github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc=
github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI=
github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI=
github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM=
github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM=
...
@@ -1516,7 +1509,6 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx
...
@@ -1516,7 +1509,6 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
...
@@ -1561,7 +1553,6 @@ github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3
...
@@ -1561,7 +1553,6 @@ github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
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/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
...
@@ -1995,7 +1986,6 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
...
@@ -1995,7 +1986,6 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
...
@@ -2263,7 +2253,6 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt
...
@@ -2263,7 +2253,6 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.17.5/go.mod h1:0zV5/ungglgy2Rlm3QK8fbxkXVs+BSJWpJP/+8gUVLY=
k8s.io/api v0.17.5/go.mod h1:0zV5/ungglgy2Rlm3QK8fbxkXVs+BSJWpJP/+8gUVLY=
k8s.io/apimachinery v0.0.0-20191123233150-4c4803ed55e3 h1:FErmbNIJruD5GT2oVEjtPn5Ar5+rcWJsC8/PPUkR0s4=
k8s.io/apimachinery v0.0.0-20191123233150-4c4803ed55e3/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg=
k8s.io/apimachinery v0.0.0-20191123233150-4c4803ed55e3/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg=
k8s.io/apimachinery v0.17.5 h1:QAjfgeTtSGksdkgyaPrIb4lhU16FWMIzxKejYD5S0gc=
k8s.io/apimachinery v0.17.5 h1:QAjfgeTtSGksdkgyaPrIb4lhU16FWMIzxKejYD5S0gc=
k8s.io/apimachinery v0.17.5/go.mod h1:ioIo1G/a+uONV7Tv+ZmCbMG1/a3kVw5YcDdncd8ugQ0=
k8s.io/apimachinery v0.17.5/go.mod h1:ioIo1G/a+uONV7Tv+ZmCbMG1/a3kVw5YcDdncd8ugQ0=
...
...
plugin/dapp/exchange/README.md
View file @
c7422357
...
@@ -22,7 +22,7 @@ QueryOrderList|根据用户地址和订单状态(ordered,completed,revoked),
...
@@ -22,7 +22,7 @@ QueryOrderList|根据用户地址和订单状态(ordered,completed,revoked),
序号|规则
序号|规则
---|----
---|----
1|
买家获利得原则
1|
以市场价成交
2|买单高于市场价,按价格由低往高撮合
2|买单高于市场价,按价格由低往高撮合
3|卖单低于市场价,按价格由高往低进行撮合
3|卖单低于市场价,按价格由高往低进行撮合
4|价格相同按先进先出的原则进行撮合
4|价格相同按先进先出的原则进行撮合
...
...
plugin/dapp/exchange/client/client.go
0 → 100755
View file @
c7422357
package
client
import
(
"github.com/33cn/chain33/types"
"github.com/golang/protobuf/proto"
)
type
Cli
interface
{
Query
(
fn
string
,
msg
proto
.
Message
)
([]
byte
,
error
)
Send
(
tx
*
types
.
Transaction
,
hexKey
string
)
([]
*
types
.
ReceiptLog
,
error
)
}
plugin/dapp/exchange/client/exchange.go
0 → 100755
View file @
c7422357
package
client
import
(
"github.com/33cn/chain33/types"
et
"github.com/33cn/plugin/plugin/dapp/exchange/types"
"github.com/golang/protobuf/proto"
)
var
cfg
=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
type
ExchangeClient
struct
{
client
Cli
txHeight
int64
}
func
NewExchangCient
(
cli
Cli
)
*
ExchangeClient
{
return
&
ExchangeClient
{
client
:
cli
,
txHeight
:
types
.
LowAllowPackHeight
,
}
}
func
(
c
*
ExchangeClient
)
QueryMarketDepth
(
msg
proto
.
Message
)
(
types
.
Message
,
error
)
{
data
,
err
:=
c
.
client
.
Query
(
et
.
FuncNameQueryMarketDepth
,
msg
)
if
err
!=
nil
{
return
nil
,
err
}
var
resp
et
.
MarketDepthList
err
=
types
.
Decode
(
data
,
&
resp
)
if
err
!=
nil
{
return
nil
,
err
}
return
&
resp
,
nil
}
func
(
c
*
ExchangeClient
)
QueryHistoryOrderList
(
msg
proto
.
Message
)
(
types
.
Message
,
error
)
{
data
,
err
:=
c
.
client
.
Query
(
et
.
FuncNameQueryHistoryOrderList
,
msg
)
if
err
!=
nil
{
return
nil
,
err
}
var
resp
et
.
OrderList
err
=
types
.
Decode
(
data
,
&
resp
)
if
err
!=
nil
{
return
nil
,
err
}
return
&
resp
,
nil
}
func
(
c
*
ExchangeClient
)
QueryOrder
(
msg
proto
.
Message
)
(
types
.
Message
,
error
)
{
data
,
err
:=
c
.
client
.
Query
(
et
.
FuncNameQueryOrder
,
msg
)
if
err
!=
nil
{
return
nil
,
err
}
var
resp
et
.
Order
err
=
types
.
Decode
(
data
,
&
resp
)
if
err
!=
nil
{
return
nil
,
err
}
return
&
resp
,
nil
}
func
(
c
*
ExchangeClient
)
QueryOrderList
(
msg
proto
.
Message
)
(
types
.
Message
,
error
)
{
data
,
err
:=
c
.
client
.
Query
(
et
.
FuncNameQueryOrderList
,
msg
)
if
err
!=
nil
{
return
nil
,
err
}
var
resp
et
.
OrderList
err
=
types
.
Decode
(
data
,
&
resp
)
if
err
!=
nil
{
return
nil
,
err
}
return
&
resp
,
nil
}
func
(
c
*
ExchangeClient
)
LimitOrder
(
msg
proto
.
Message
,
hexKey
string
)
(
*
et
.
ReceiptExchange
,
error
)
{
ety
:=
types
.
LoadExecutorType
(
et
.
ExchangeX
)
tx
,
err
:=
ety
.
Create
(
"LimitOrder"
,
msg
)
if
err
!=
nil
{
return
nil
,
err
}
logs
,
err
:=
c
.
client
.
Send
(
tx
,
hexKey
)
if
err
!=
nil
{
return
nil
,
err
}
var
resp
et
.
ReceiptExchange
for
_
,
l
:=
range
logs
{
if
l
.
Ty
==
et
.
TyLimitOrderLog
{
err
=
types
.
Decode
(
l
.
Log
,
&
resp
)
if
err
!=
nil
{
return
nil
,
err
}
break
}
}
return
&
resp
,
nil
}
//TODO marketOrder
func
(
c
*
ExchangeClient
)
MarketOrder
(
msg
proto
.
Message
,
hexKey
string
)
(
*
et
.
ReceiptExchange
,
error
)
{
ety
:=
types
.
LoadExecutorType
(
et
.
ExchangeX
)
tx
,
err
:=
ety
.
Create
(
"MarketOrder"
,
msg
)
if
err
!=
nil
{
return
nil
,
err
}
logs
,
err
:=
c
.
client
.
Send
(
tx
,
hexKey
)
if
err
!=
nil
{
return
nil
,
err
}
var
resp
et
.
ReceiptExchange
for
_
,
l
:=
range
logs
{
if
l
.
Ty
==
et
.
TyMarketOrderLog
{
err
=
types
.
Decode
(
l
.
Log
,
&
resp
)
if
err
!=
nil
{
return
nil
,
err
}
break
}
}
return
&
resp
,
nil
}
func
(
c
*
ExchangeClient
)
RevokeOrder
(
msg
proto
.
Message
,
hexKey
string
)
(
*
et
.
ReceiptExchange
,
error
)
{
ety
:=
types
.
LoadExecutorType
(
et
.
ExchangeX
)
tx
,
err
:=
ety
.
Create
(
"RevokeOrder"
,
msg
)
if
err
!=
nil
{
return
nil
,
err
}
logs
,
err
:=
c
.
client
.
Send
(
tx
,
hexKey
)
if
err
!=
nil
{
return
nil
,
err
}
var
resp
et
.
ReceiptExchange
for
_
,
l
:=
range
logs
{
if
l
.
Ty
==
et
.
TyRevokeOrderLog
{
err
=
types
.
Decode
(
l
.
Log
,
&
resp
)
if
err
!=
nil
{
return
nil
,
err
}
break
}
}
return
&
resp
,
nil
}
plugin/dapp/exchange/client/exchange_test.go
0 → 100644
View file @
c7422357
package
client_test
import
(
"testing"
"github.com/33cn/chain33/types"
excli
"github.com/33cn/plugin/plugin/dapp/exchange/client"
etypes
"github.com/33cn/plugin/plugin/dapp/exchange/types"
)
var
(
privKey
=
"0x13169cd9ecf0d3e4a78d1a97a9abb506cb12b2f45c127a8a33c84f389a38e674"
//1BsJugqWiF47x2c915YW2TkBKVLU9GmvEn
grpcAddr
=
"127.0.0.1:8802"
execer
=
"token"
)
func
TestQueryMarketDepth
(
t
*
testing
.
T
)
{
cli
:=
excli
.
NewGRPCCli
(
grpcAddr
)
client
:=
excli
.
NewExchangCient
(
cli
)
req
:=
&
etypes
.
QueryMarketDepth
{
LeftAsset
:
&
etypes
.
Asset
{
Symbol
:
"BTY"
,
Execer
:
execer
},
RightAsset
:
&
etypes
.
Asset
{
Symbol
:
"USDT"
,
Execer
:
execer
},
Op
:
2
,
PrimaryKey
:
""
,
Count
:
10
,
}
resp
,
err
:=
client
.
QueryMarketDepth
(
req
)
if
err
!=
nil
{
t
.
Log
(
err
)
return
}
t
.
Log
(
"QueryMarketDepth"
,
resp
.
(
*
etypes
.
MarketDepthList
)
.
List
)
}
func
TestQueryHistoryOrderList
(
t
*
testing
.
T
)
{
cli
:=
excli
.
NewGRPCCli
(
grpcAddr
)
client
:=
excli
.
NewExchangCient
(
cli
)
req
:=
&
etypes
.
QueryHistoryOrderList
{
LeftAsset
:
&
etypes
.
Asset
{
Symbol
:
"BTY"
,
Execer
:
execer
},
RightAsset
:
&
etypes
.
Asset
{
Symbol
:
"USDT"
,
Execer
:
execer
},
PrimaryKey
:
""
,
Count
:
10
,
Direction
:
0
,
}
resp
,
err
:=
client
.
QueryHistoryOrderList
(
req
)
if
err
!=
nil
{
t
.
Log
(
err
)
return
}
t
.
Log
(
"QueryHistory"
,
resp
.
(
*
etypes
.
OrderList
)
.
List
)
}
func
TestQueryOrder
(
t
*
testing
.
T
)
{
cli
:=
excli
.
NewGRPCCli
(
grpcAddr
)
client
:=
excli
.
NewExchangCient
(
cli
)
req
:=
&
etypes
.
QueryOrder
{
OrderID
:
46000000000
,
}
resp
,
err
:=
client
.
QueryOrder
(
req
)
if
err
!=
nil
{
t
.
Log
(
err
)
return
}
t
.
Log
(
"QueryOrder"
,
resp
.
(
*
etypes
.
Order
))
}
func
TestQueryOrderList
(
t
*
testing
.
T
)
{
cli
:=
excli
.
NewGRPCCli
(
grpcAddr
)
client
:=
excli
.
NewExchangCient
(
cli
)
req
:=
&
etypes
.
QueryOrderList
{
Status
:
1
,
Address
:
"1FpPrLgyuR6reqj8LQ3HNVHkjtA7hAcvHo"
,
PrimaryKey
:
""
,
Count
:
10
,
Direction
:
0
,
}
resp
,
err
:=
client
.
QueryOrderList
(
req
)
if
err
!=
nil
{
t
.
Log
(
err
)
return
}
t
.
Log
(
"QueryOrderList"
,
resp
.
(
*
etypes
.
OrderList
)
.
List
)
}
func
TestLimitOrder
(
t
*
testing
.
T
)
{
cli
:=
excli
.
NewGRPCCli
(
grpcAddr
)
client
:=
excli
.
NewExchangCient
(
cli
)
req
:=
&
etypes
.
LimitOrder
{
LeftAsset
:
&
etypes
.
Asset
{
Symbol
:
"BTY"
,
Execer
:
execer
},
RightAsset
:
&
etypes
.
Asset
{
Symbol
:
"USDT"
,
Execer
:
execer
},
Op
:
etypes
.
OpSell
,
Price
:
4
*
types
.
DefaultCoinPrecision
,
Amount
:
4
*
types
.
DefaultCoinPrecision
,
}
resp
,
err
:=
client
.
LimitOrder
(
req
,
privKey
)
if
err
!=
nil
{
t
.
Log
(
err
)
return
}
t
.
Log
(
"LimitOrder"
,
resp
)
}
//TODO marketOrder
//func TestMarketOrder(t *testing.T) {
// cli := excli.NewGRPCCli(grpcAddr)
// client := excli.NewExchangCient(cli)
//
// req := &etypes.MarketOrder{
// LeftAsset: &etypes.Asset{Symbol: "BTY", Execer: execer},
// RightAsset: &etypes.Asset{Symbol: "USDT", Execer: execer},
// Op: etypes.OpSell,
// Amount: 4 * types.DefaultCoinPrecision,
// }
//
// resp, err := client.MarketOrder(req, privKey)
// if err != nil {
// t.Log(err)
// return
// }
// t.Log("MarketOrder", resp)
//}
func
TestRevokeOrder
(
t
*
testing
.
T
)
{
cli
:=
excli
.
NewGRPCCli
(
grpcAddr
)
client
:=
excli
.
NewExchangCient
(
cli
)
req
:=
&
etypes
.
RevokeOrder
{
OrderID
:
88000000000
,
}
resp
,
err
:=
client
.
RevokeOrder
(
req
,
privKey
)
if
err
!=
nil
{
t
.
Log
(
err
)
return
}
t
.
Log
(
"RevokeOrder"
,
resp
)
}
plugin/dapp/exchange/client/grpc_cli.go
0 → 100755
View file @
c7422357
package
client
import
(
"context"
"errors"
"strings"
"sync"
"time"
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/common/crypto"
"github.com/33cn/chain33/types"
et
"github.com/33cn/plugin/plugin/dapp/exchange/types"
"github.com/golang/protobuf/proto"
"google.golang.org/grpc"
)
var
conns
sync
.
Map
type
GRPCCli
struct
{
client
types
.
Chain33Client
}
func
NewGRPCCli
(
grpcAddr
string
)
*
GRPCCli
{
client
,
err
:=
getClient
(
grpcAddr
)
if
err
!=
nil
{
return
nil
}
return
&
GRPCCli
{
client
:
client
}
}
func
getClient
(
target
string
)
(
types
.
Chain33Client
,
error
)
{
val
,
ok
:=
conns
.
Load
(
target
)
if
!
ok
{
conn
,
err
:=
grpc
.
Dial
(
target
,
grpc
.
WithInsecure
())
if
err
!=
nil
{
return
nil
,
err
}
client
:=
types
.
NewChain33Client
(
conn
)
conns
.
Store
(
target
,
client
)
return
client
,
nil
}
else
{
return
val
.
(
types
.
Chain33Client
),
nil
}
}
func
(
c
*
GRPCCli
)
Query
(
fn
string
,
msg
proto
.
Message
)
([]
byte
,
error
)
{
ss
:=
strings
.
Split
(
fn
,
"."
)
var
in
types
.
ChainExecutor
if
len
(
ss
)
==
2
{
in
.
Driver
=
ss
[
0
]
in
.
FuncName
=
ss
[
1
]
}
else
{
in
.
Driver
=
et
.
ExchangeX
in
.
FuncName
=
fn
}
in
.
Param
=
types
.
Encode
(
msg
)
r
,
err
:=
c
.
client
.
QueryChain
(
context
.
Background
(),
&
in
)
if
err
!=
nil
{
return
nil
,
err
}
if
!
r
.
IsOk
{
return
nil
,
errors
.
New
(
string
(
r
.
Msg
))
}
return
r
.
Msg
,
nil
}
func
(
c
*
GRPCCli
)
Send
(
tx
*
types
.
Transaction
,
hexKey
string
)
([]
*
types
.
ReceiptLog
,
error
)
{
logs
,
err
:=
c
.
sendAndWaitReceipt
(
tx
,
hexKey
)
if
err
!=
nil
{
return
nil
,
parseError
(
err
)
}
for
_
,
l
:=
range
logs
{
if
l
.
Ty
==
types
.
TyLogErr
{
return
nil
,
errors
.
New
(
string
(
l
.
Log
))
}
}
return
logs
,
nil
}
// 发送交易并等待执行结果
// 如果交易非法,返回错误信息
// 如果交易执行成功,返回 交易哈希、回报
func
(
c
*
GRPCCli
)
sendAndWaitReceipt
(
tx
*
types
.
Transaction
,
hexKey
string
)
(
logs
[]
*
types
.
ReceiptLog
,
err
error
)
{
r
,
err
:=
c
.
sendTx
(
tx
,
hexKey
)
if
err
!=
nil
{
// rpc error: code = Unknown desc = ErrNotBank
return
nil
,
err
}
if
!
r
.
IsOk
{
return
nil
,
errors
.
New
(
string
(
r
.
Msg
))
}
time
.
Sleep
(
time
.
Second
)
d
,
_
:=
c
.
client
.
QueryTransaction
(
context
.
Background
(),
&
types
.
ReqHash
{
Hash
:
r
.
Msg
})
return
d
.
Receipt
.
Logs
,
nil
}
//SendTx ...s
func
(
c
*
GRPCCli
)
sendTx
(
tx
*
types
.
Transaction
,
hexKey
string
)
(
reply
*
types
.
Reply
,
err
error
)
{
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
tx
,
err
=
types
.
FormatTx
(
cfg
,
et
.
ExchangeX
,
tx
)
if
err
!=
nil
{
return
nil
,
err
}
tx
,
err
=
signTx
(
tx
,
hexKey
)
if
err
!=
nil
{
return
nil
,
err
}
return
c
.
client
.
SendTransaction
(
context
.
Background
(),
tx
)
}
func
signTx
(
tx
*
types
.
Transaction
,
hexPrivKey
string
)
(
*
types
.
Transaction
,
error
)
{
signType
:=
types
.
SECP256K1
c
,
err
:=
crypto
.
Load
(
types
.
GetSignName
(
""
,
signType
),
-
1
)
if
err
!=
nil
{
return
tx
,
err
}
bytes
,
err
:=
common
.
FromHex
(
hexPrivKey
[
:
])
if
err
!=
nil
{
return
tx
,
err
}
privKey
,
err
:=
c
.
PrivKeyFromBytes
(
bytes
)
if
err
!=
nil
{
return
tx
,
err
}
tx
.
Sign
(
int32
(
signType
),
privKey
)
return
tx
,
nil
}
func
parseError
(
err
error
)
error
{
// rpc error: code = Unknown desc = ErrNotBank
str
:=
err
.
Error
()
sep
:=
"desc = "
i
:=
strings
.
Index
(
str
,
sep
)
if
i
!=
-
1
{
return
errors
.
New
(
str
[
i
+
len
(
sep
)
:
])
}
return
err
}
plugin/dapp/exchange/executor/exchange_test.go
View file @
c7422357
...
@@ -39,7 +39,7 @@ var (
...
@@ -39,7 +39,7 @@ var (
func
TestExchange
(
t
*
testing
.
T
)
{
func
TestExchange
(
t
*
testing
.
T
)
{
//环境准备
//环境准备
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
et
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
Init
(
et
.
ExchangeX
,
cfg
,
nil
)
Init
(
et
.
ExchangeX
,
cfg
,
nil
)
total
:=
100
*
types
.
DefaultCoinPrecision
total
:=
100
*
types
.
DefaultCoinPrecision
...
@@ -263,9 +263,9 @@ func TestExchange(t *testing.T) {
...
@@ -263,9 +263,9 @@ func TestExchange(t *testing.T) {
order
,
err
=
Exec_QueryOrder
(
orderID7
,
stateDB
,
kvdb
)
order
,
err
=
Exec_QueryOrder
(
orderID7
,
stateDB
,
kvdb
)
assert
.
Equal
(
t
,
nil
,
err
)
assert
.
Equal
(
t
,
nil
,
err
)
assert
.
Equal
(
t
,
int32
(
et
.
Ordered
),
order
.
Status
)
assert
.
Equal
(
t
,
int32
(
et
.
Ordered
),
order
.
Status
)
//查看账户余额,按
卖方
价格成交
//查看账户余额,按
被动方买单的
价格成交
acc
:=
accD1
.
LoadExecAccount
(
Nodes
[
3
],
execAddr
)
acc
:=
accD1
.
LoadExecAccount
(
Nodes
[
3
],
execAddr
)
assert
.
Equal
(
t
,
8
5
*
types
.
DefaultCoinPrecision
,
acc
.
Balance
)
assert
.
Equal
(
t
,
8
0
*
types
.
DefaultCoinPrecision
,
acc
.
Balance
)
Exec_LimitOrder
(
t
,
&
et
.
LimitOrder
{
LeftAsset
:
&
et
.
Asset
{
Symbol
:
"bty"
,
Execer
:
"coins"
},
Exec_LimitOrder
(
t
,
&
et
.
LimitOrder
{
LeftAsset
:
&
et
.
Asset
{
Symbol
:
"bty"
,
Execer
:
"coins"
},
RightAsset
:
&
et
.
Asset
{
Execer
:
"token"
,
Symbol
:
"CCNY"
},
Price
:
400000000
,
Amount
:
5
*
types
.
DefaultCoinPrecision
,
Op
:
et
.
OpSell
},
PrivKeyC
,
stateDB
,
kvdb
,
env
)
RightAsset
:
&
et
.
Asset
{
Execer
:
"token"
,
Symbol
:
"CCNY"
},
Price
:
400000000
,
Amount
:
5
*
types
.
DefaultCoinPrecision
,
Op
:
et
.
OpSell
},
PrivKeyC
,
stateDB
,
kvdb
,
env
)
...
@@ -298,8 +298,8 @@ func TestExchange(t *testing.T) {
...
@@ -298,8 +298,8 @@ func TestExchange(t *testing.T) {
assert
.
Equal
(
t
,
5
*
types
.
DefaultCoinPrecision
,
order
.
Balance
)
assert
.
Equal
(
t
,
5
*
types
.
DefaultCoinPrecision
,
order
.
Balance
)
//余额检查
//余额检查
acc
=
accD1
.
LoadExecAccount
(
Nodes
[
3
],
execAddr
)
acc
=
accD1
.
LoadExecAccount
(
Nodes
[
3
],
execAddr
)
//
100-3*10-5*4-4.5*5 = 27
.5
//
100-5*4-(10-5)*3-5*4-(15-5-5)*4.5 = 22
.5
assert
.
Equal
(
t
,
int64
(
2
7
50000000
),
acc
.
Balance
)
assert
.
Equal
(
t
,
int64
(
2
2
50000000
),
acc
.
Balance
)
acc
=
accC
.
LoadExecAccount
(
Nodes
[
2
],
execAddr
)
acc
=
accC
.
LoadExecAccount
(
Nodes
[
2
],
execAddr
)
assert
.
Equal
(
t
,
80
*
types
.
DefaultCoinPrecision
,
acc
.
Balance
)
assert
.
Equal
(
t
,
80
*
types
.
DefaultCoinPrecision
,
acc
.
Balance
)
...
@@ -316,8 +316,8 @@ func TestExchange(t *testing.T) {
...
@@ -316,8 +316,8 @@ func TestExchange(t *testing.T) {
assert
.
Equal
(
t
,
5
*
types
.
DefaultCoinPrecision
,
orderList
.
List
[
0
]
.
Balance
)
assert
.
Equal
(
t
,
5
*
types
.
DefaultCoinPrecision
,
orderList
.
List
[
0
]
.
Balance
)
//余额检查
//余额检查
acc
=
accD1
.
LoadExecAccount
(
Nodes
[
3
],
execAddr
)
acc
=
accD1
.
LoadExecAccount
(
Nodes
[
3
],
execAddr
)
//
100-3*10-5*4-1*5 = 45
//
Nodes[3]为成交 Nodes[2]冻结10
assert
.
Equal
(
t
,
45
*
types
.
DefaultCoinPrecision
,
acc
.
Balance
)
assert
.
Equal
(
t
,
int64
(
2250000000
)
,
acc
.
Balance
)
acc
=
accC
.
LoadExecAccount
(
Nodes
[
2
],
execAddr
)
acc
=
accC
.
LoadExecAccount
(
Nodes
[
2
],
execAddr
)
assert
.
Equal
(
t
,
70
*
types
.
DefaultCoinPrecision
,
acc
.
Balance
)
assert
.
Equal
(
t
,
70
*
types
.
DefaultCoinPrecision
,
acc
.
Balance
)
//orderID9和order10未成交
//orderID9和order10未成交
...
@@ -688,7 +688,7 @@ func CreateLimitOrder(limitOrder *et.LimitOrder, privKey string) (tx *types.Tran
...
@@ -688,7 +688,7 @@ func CreateLimitOrder(limitOrder *et.LimitOrder, privKey string) (tx *types.Tran
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
et
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
tx
,
err
=
types
.
FormatTx
(
cfg
,
et
.
ExchangeX
,
tx
)
tx
,
err
=
types
.
FormatTx
(
cfg
,
et
.
ExchangeX
,
tx
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -706,7 +706,7 @@ func CreateRevokeOrder(orderID int64, privKey string) (tx *types.Transaction, er
...
@@ -706,7 +706,7 @@ func CreateRevokeOrder(orderID int64, privKey string) (tx *types.Transaction, er
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
et
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
tx
,
err
=
types
.
FormatTx
(
cfg
,
et
.
ExchangeX
,
tx
)
tx
,
err
=
types
.
FormatTx
(
cfg
,
et
.
ExchangeX
,
tx
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -721,7 +721,7 @@ func CreateRevokeOrder(orderID int64, privKey string) (tx *types.Transaction, er
...
@@ -721,7 +721,7 @@ func CreateRevokeOrder(orderID int64, privKey string) (tx *types.Transaction, er
//模拟区块中交易得执行过程
//模拟区块中交易得执行过程
func
Exec_Block
(
t
*
testing
.
T
,
stateDB
db
.
DB
,
kvdb
db
.
KVDB
,
env
*
execEnv
,
txs
...*
types
.
Transaction
)
error
{
func
Exec_Block
(
t
*
testing
.
T
,
stateDB
db
.
DB
,
kvdb
db
.
KVDB
,
env
*
execEnv
,
txs
...*
types
.
Transaction
)
error
{
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
et
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
exec
:=
NewExchange
()
exec
:=
NewExchange
()
q
:=
queue
.
New
(
"channel"
)
q
:=
queue
.
New
(
"channel"
)
...
@@ -786,7 +786,7 @@ func Exec_RevokeOrder(t *testing.T, orderID int64, privKey string, stateDB db.DB
...
@@ -786,7 +786,7 @@ func Exec_RevokeOrder(t *testing.T, orderID int64, privKey string, stateDB db.DB
}
}
func
Exec_QueryOrderList
(
status
int32
,
addr
string
,
primaryKey
string
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
OrderList
,
error
)
{
func
Exec_QueryOrderList
(
status
int32
,
addr
string
,
primaryKey
string
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
OrderList
,
error
)
{
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
et
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
exec
:=
NewExchange
()
exec
:=
NewExchange
()
q
:=
queue
.
New
(
"channel"
)
q
:=
queue
.
New
(
"channel"
)
...
@@ -803,7 +803,7 @@ func Exec_QueryOrderList(status int32, addr string, primaryKey string, stateDB d
...
@@ -803,7 +803,7 @@ func Exec_QueryOrderList(status int32, addr string, primaryKey string, stateDB d
return
msg
.
(
*
et
.
OrderList
),
nil
return
msg
.
(
*
et
.
OrderList
),
nil
}
}
func
Exec_QueryOrder
(
orderID
int64
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
Order
,
error
)
{
func
Exec_QueryOrder
(
orderID
int64
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
Order
,
error
)
{
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
et
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
exec
:=
NewExchange
()
exec
:=
NewExchange
()
q
:=
queue
.
New
(
"channel"
)
q
:=
queue
.
New
(
"channel"
)
...
@@ -821,7 +821,7 @@ func Exec_QueryOrder(orderID int64, stateDB db.KV, kvdb db.KVDB) (*et.Order, err
...
@@ -821,7 +821,7 @@ func Exec_QueryOrder(orderID int64, stateDB db.KV, kvdb db.KVDB) (*et.Order, err
}
}
func
Exec_QueryMarketDepth
(
query
*
et
.
QueryMarketDepth
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
MarketDepthList
,
error
)
{
func
Exec_QueryMarketDepth
(
query
*
et
.
QueryMarketDepth
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
MarketDepthList
,
error
)
{
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
et
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
exec
:=
NewExchange
()
exec
:=
NewExchange
()
q
:=
queue
.
New
(
"channel"
)
q
:=
queue
.
New
(
"channel"
)
...
@@ -839,7 +839,7 @@ func Exec_QueryMarketDepth(query *et.QueryMarketDepth, stateDB db.KV, kvdb db.KV
...
@@ -839,7 +839,7 @@ func Exec_QueryMarketDepth(query *et.QueryMarketDepth, stateDB db.KV, kvdb db.KV
}
}
func
Exec_QueryHistoryOrder
(
query
*
et
.
QueryHistoryOrderList
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
OrderList
,
error
)
{
func
Exec_QueryHistoryOrder
(
query
*
et
.
QueryHistoryOrderList
,
stateDB
db
.
KV
,
kvdb
db
.
KVDB
)
(
*
et
.
OrderList
,
error
)
{
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
et
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
exec
:=
NewExchange
()
exec
:=
NewExchange
()
q
:=
queue
.
New
(
"channel"
)
q
:=
queue
.
New
(
"channel"
)
...
...
plugin/dapp/exchange/executor/exchangedb.go
View file @
c7422357
This diff is collapsed.
Click to expand it.
plugin/dapp/exchange/proto/exchange.proto
View file @
c7422357
...
@@ -5,148 +5,160 @@ option go_package = "../types";
...
@@ -5,148 +5,160 @@ option go_package = "../types";
message
Exchange
{}
message
Exchange
{}
message
ExchangeAction
{
message
ExchangeAction
{
oneof
value
{
oneof
value
{
LimitOrder
limitOrder
=
1
;
LimitOrder
limitOrder
=
1
;
MarketOrder
marketOrder
=
2
;
MarketOrder
marketOrder
=
2
;
RevokeOrder
revokeOrder
=
3
;
RevokeOrder
revokeOrder
=
3
;
}
}
int32
ty
=
6
;
int32
ty
=
6
;
}
}
//限价订单
//限价订单
message
LimitOrder
{
message
LimitOrder
{
//交易对
//交易对
asset
leftAsset
=
1
;
asset
leftAsset
=
1
;
//交易对
//交易对
asset
rightAsset
=
2
;
asset
rightAsset
=
2
;
//价格
//价格
int64
price
=
3
;
int64
price
=
3
;
//总量
//总量
int64
amount
=
4
;
int64
amount
=
4
;
//操作, 1为买,2为卖
//操作, 1为买,2为卖
int32
op
=
5
;
int32
op
=
5
;
}
}
//市价委托
//市价委托
message
MarketOrder
{
message
MarketOrder
{
//资产1
//资产1
asset
leftAsset
=
1
;
asset
leftAsset
=
1
;
//资产2
//资产2
asset
rightAsset
=
2
;
asset
rightAsset
=
2
;
//总量
//总量
int64
amount
=
3
;
int64
amount
=
3
;
//操作, 1为买,2为卖
//操作, 1为买,2为卖
int32
op
=
4
;
int32
op
=
4
;
}
}
//撤回订单
//撤回订单
message
RevokeOrder
{
message
RevokeOrder
{
//订单号
//订单号
int64
orderID
=
1
;
int64
orderID
=
1
;
}
}
//资产类型
//资产类型
message
asset
{
message
asset
{
string
execer
=
1
;
string
execer
=
1
;
string
symbol
=
2
;
string
symbol
=
2
;
}
}
//订单信息
//订单信息
message
Order
{
message
Order
{
int64
orderID
=
1
;
int64
orderID
=
1
;
oneof
value
{
oneof
value
{
LimitOrder
limitOrder
=
2
;
LimitOrder
limitOrder
=
2
;
MarketOrder
marketOrder
=
3
;
MarketOrder
marketOrder
=
3
;
}
}
//挂单类型
//挂单类型
int32
ty
=
4
;
int32
ty
=
4
;
//已经成交的数量
//已经成交的数量
int64
executed
=
5
;
int64
executed
=
5
;
//成交均价
//成交均价
int64
AVG_price
=
6
;
int64
AVG_price
=
6
;
//余额
//余额
int64
balance
=
7
;
int64
balance
=
7
;
//状态,0 挂单中ordered, 1 完成completed, 2撤回 revoked
//状态,0 挂单中ordered, 1 完成completed, 2撤回 revoked
int32
status
=
8
;
int32
status
=
8
;
//用户地址
//用户地址
string
addr
=
9
;
string
addr
=
9
;
//更新时间
//更新时间
int64
updateTime
=
10
;
int64
updateTime
=
10
;
//索引
//索引
int64
index
=
11
;
int64
index
=
11
;
//手续费率
int32
rate
=
12
;
//手续费
int64
digestedFee
=
13
;
//最小手续费
int64
minFee
=
14
;
//挂单hash
string
hash
=
15
;
//撤单hash
string
revokeHash
=
16
;
//创建时间
int64
createTime
=
17
;
}
}
//查询接口
//查询接口
message
QueryMarketDepth
{
message
QueryMarketDepth
{
//资产1
//资产1
asset
leftAsset
=
1
;
asset
leftAsset
=
1
;
//资产2
//资产2
asset
rightAsset
=
2
;
asset
rightAsset
=
2
;
//操作, 1为买,2为卖
//操作, 1为买,2为卖
int32
op
=
3
;
int32
op
=
3
;
// 这里用价格作为索引值
// 这里用价格作为索引值
string
primaryKey
=
4
;
string
primaryKey
=
4
;
//单页返回多少条记录,默认返回10条,为了系统安全最多单次只能返回20条
//单页返回多少条记录,默认返回10条,为了系统安全最多单次只能返回20条
int32
count
=
5
;
int32
count
=
5
;
}
}
//市场深度
//市场深度
message
MarketDepth
{
message
MarketDepth
{
//资产1
//资产1
asset
leftAsset
=
1
;
asset
leftAsset
=
1
;
//资产2
//资产2
asset
rightAsset
=
2
;
asset
rightAsset
=
2
;
//价格
//价格
int64
price
=
3
;
int64
price
=
3
;
//总量
//总量
int64
amount
=
4
;
int64
amount
=
4
;
//操作, 1为买,2为卖
//操作, 1为买,2为卖
int32
op
=
5
;
int32
op
=
5
;
}
}
//查询接口返回的市场深度列表
//查询接口返回的市场深度列表
message
MarketDepthList
{
message
MarketDepthList
{
repeated
MarketDepth
list
=
1
;
repeated
MarketDepth
list
=
1
;
string
primaryKey
=
2
;
string
primaryKey
=
2
;
}
}
//查询最新得成交信息,外部接口
//查询最新得成交信息,外部接口
message
QueryHistoryOrderList
{
message
QueryHistoryOrderList
{
//资产1
//资产1
asset
leftAsset
=
1
;
asset
leftAsset
=
1
;
//资产2
//资产2
asset
rightAsset
=
2
;
asset
rightAsset
=
2
;
// 索引值
// 索引值
string
primaryKey
=
3
;
string
primaryKey
=
3
;
//单页返回多少条记录,默认返回10条,为了系统安全最多单次只能返回20条
//单页返回多少条记录,默认返回10条,为了系统安全最多单次只能返回20条
int32
count
=
4
;
int32
count
=
4
;
// 0降序,1升序,默认降序
// 0降序,1升序,默认降序
int32
direction
=
5
;
int32
direction
=
5
;
}
}
//根据orderID去查询订单信息
//根据orderID去查询订单信息
message
QueryOrder
{
message
QueryOrder
{
int64
orderID
=
1
;
int64
orderID
=
1
;
}
}
//根据地址,状态查询用户自己的挂单信息
//根据地址,状态查询用户自己的挂单信息
message
QueryOrderList
{
message
QueryOrderList
{
//挂单状态必填(默认是0,只查询ordered挂单中的)
//挂单状态必填(默认是0,只查询ordered挂单中的)
int32
status
=
1
;
int32
status
=
1
;
//用户地址信息,必填
//用户地址信息,必填
string
address
=
2
;
string
address
=
2
;
// 主键索引
// 主键索引
string
primaryKey
=
3
;
string
primaryKey
=
3
;
//单页返回多少条记录,默认返回10条,为了系统安全最多单次只能返回20条
//单页返回多少条记录,默认返回10条,为了系统安全最多单次只能返回20条
int32
count
=
4
;
int32
count
=
4
;
// 0降序,1升序,默认降序
// 0降序,1升序,默认降序
int32
direction
=
5
;
int32
direction
=
5
;
}
}
//订单列表
//订单列表
message
OrderList
{
message
OrderList
{
repeated
Order
list
=
1
;
repeated
Order
list
=
1
;
string
primaryKey
=
2
;
string
primaryKey
=
2
;
}
}
// exchange执行票据日志
// exchange执行票据日志
message
ReceiptExchange
{
message
ReceiptExchange
{
Order
order
=
1
;
Order
order
=
1
;
repeated
Order
matchOrders
=
2
;
repeated
Order
matchOrders
=
2
;
int64
index
=
3
;
int64
index
=
3
;
}
}
service
exchange
{}
service
exchange
{}
plugin/dapp/exchange/test/chain33.toml
View file @
c7422357
...
@@ -76,6 +76,7 @@ enableTLS=false
...
@@ -76,6 +76,7 @@ enableTLS=false
certFile
=
"cert.pem"
certFile
=
"cert.pem"
# 私钥文件
# 私钥文件
keyFile
=
"key.pem"
keyFile
=
"key.pem"
[mempool]
[mempool]
# mempool队列名称,可配,timeline,score,price
# mempool队列名称,可配,timeline,score,price
name
=
"timeline"
name
=
"timeline"
...
@@ -86,6 +87,7 @@ minTxFee=100000
...
@@ -86,6 +87,7 @@ minTxFee=100000
# 每个账户在mempool中得最大交易数量,默认100
# 每个账户在mempool中得最大交易数量,默认100
maxTxNumPerAccount
=
10000
maxTxNumPerAccount
=
10000
# timeline 是默认的先来先进的按时间排序
# timeline 是默认的先来先进的按时间排序
[mempool.sub.timeline]
[mempool.sub.timeline]
# mempool缓存容量大小,默认10240
# mempool缓存容量大小,默认10240
poolCacheSize
=
10240
poolCacheSize
=
10240
...
@@ -94,6 +96,7 @@ minTxFee=100000
...
@@ -94,6 +96,7 @@ minTxFee=100000
# 每个账户在mempool中得最大交易数量,默认100
# 每个账户在mempool中得最大交易数量,默认100
maxTxNumPerAccount
=
10000
maxTxNumPerAccount
=
10000
# score是分数队列模式(分数=常量a*手续费/交易字节数-常量b*时间*定量c,按分数排队,高的优先,常量a,b和定量c可配置),按分数来排序
# score是分数队列模式(分数=常量a*手续费/交易字节数-常量b*时间*定量c,按分数排队,高的优先,常量a,b和定量c可配置),按分数来排序
[mempool.sub.score]
[mempool.sub.score]
# mempool缓存容量大小,默认10240
# mempool缓存容量大小,默认10240
poolCacheSize
=
10240
poolCacheSize
=
10240
...
@@ -108,6 +111,7 @@ priceConstant=1544
...
@@ -108,6 +111,7 @@ priceConstant=1544
# 常量比例
# 常量比例
pricePower
=
1
pricePower
=
1
# price是价格队列模式(价格=手续费/交易字节数,价格高者优先,同价则时间早优先)
# price是价格队列模式(价格=手续费/交易字节数,价格高者优先,同价则时间早优先)
[mempool.sub.price]
[mempool.sub.price]
# mempool缓存容量大小,默认10240
# mempool缓存容量大小,默认10240
poolCacheSize
=
10240
poolCacheSize
=
10240
...
@@ -115,6 +119,7 @@ poolCacheSize=10240
...
@@ -115,6 +119,7 @@ poolCacheSize=10240
minTxFee
=
100000
minTxFee
=
100000
# 每个账户在mempool中得最大交易数量,默认100
# 每个账户在mempool中得最大交易数量,默认100
maxTxNumPerAccount
=
10000
maxTxNumPerAccount
=
10000
[consensus]
[consensus]
#共识名,可选项有solo,ticket,raft,tendermint,para
#共识名,可选项有solo,ticket,raft,tendermint,para
name
=
"solo"
name
=
"solo"
...
@@ -124,6 +129,7 @@ minerstart=true
...
@@ -124,6 +129,7 @@ minerstart=true
genesisBlockTime
=
1514533394
genesisBlockTime
=
1514533394
#创世交易地址
#创世交易地址
genesis
=
"1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
genesis
=
"1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
[mver.consensus]
[mver.consensus]
#基金账户地址
#基金账户地址
fundKeyAddr
=
"1BQXS6TxaYYG5mADaWij4AxhZZUTpw95a5"
fundKeyAddr
=
"1BQXS6TxaYYG5mADaWij4AxhZZUTpw95a5"
...
@@ -150,6 +156,7 @@ targetTimespan = 2304
...
@@ -150,6 +156,7 @@ targetTimespan = 2304
#每个区块打包的目标时间
#每个区块打包的目标时间
targetTimePerBlock
=
16
targetTimePerBlock
=
16
# 仅保留这一项,其他consensus相关的配置全部删除
# 仅保留这一项,其他consensus相关的配置全部删除
[consensus.sub.solo]
[consensus.sub.solo]
#创世交易地址
#创世交易地址
genesis
=
"1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
genesis
=
"1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
...
@@ -157,6 +164,7 @@ genesis="1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
...
@@ -157,6 +164,7 @@ genesis="1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
genesisBlockTime
=
1514533394
genesisBlockTime
=
1514533394
#获取交易间隔时长,单位纳秒
#获取交易间隔时长,单位纳秒
waitTxMs
=
10
waitTxMs
=
10
[store]
[store]
# 数据存储格式名称,目前支持mavl,kvdb,kvmvcc,mpt
# 数据存储格式名称,目前支持mavl,kvdb,kvmvcc,mpt
name
=
"mavl"
name
=
"mavl"
...
@@ -168,6 +176,7 @@ dbPath="datadir/mavltree"
...
@@ -168,6 +176,7 @@ dbPath="datadir/mavltree"
dbCache
=
128
dbCache
=
128
# 数据库版本
# 数据库版本
localdbVersion
=
"1.0.0"
localdbVersion
=
"1.0.0"
[store.sub.mavl]
[store.sub.mavl]
# 是否使能mavl加前缀
# 是否使能mavl加前缀
enableMavlPrefix
=
false
enableMavlPrefix
=
false
...
@@ -177,6 +186,7 @@ enableMVCC=false
...
@@ -177,6 +186,7 @@ enableMVCC=false
enableMavlPrune
=
false
enableMavlPrune
=
false
# 裁剪高度间隔
# 裁剪高度间隔
pruneHeight
=
10000
pruneHeight
=
10000
[wallet]
[wallet]
# 交易发送最低手续费,单位0.00000001BTY(1e-8),默认100000,即0.001BTY
# 交易发送最低手续费,单位0.00000001BTY(1e-8),默认100000,即0.001BTY
minFee
=
100000
minFee
=
100000
...
@@ -187,12 +197,14 @@ dbPath="wallet"
...
@@ -187,12 +197,14 @@ dbPath="wallet"
# walletdb缓存大小
# walletdb缓存大小
dbCache
=
16
dbCache
=
16
# 钱包发送交易签名方式
# 钱包发送交易签名方式
signType
=
"secp256k1"
signType
=
"secp256k1"
[wallet.sub.ticket]
[wallet.sub.ticket]
# 是否关闭ticket自动挖矿,默认false
# 是否关闭ticket自动挖矿,默认false
minerdisable
=
false
minerdisable
=
false
# 允许购买ticket挖矿的白名单地址,默认配置“*”,允许所有地址购买
# 允许购买ticket挖矿的白名单地址,默认配置“*”,允许所有地址购买
minerwhitelist
=
["*"]
minerwhitelist
=
["*"]
[exec]
[exec]
#执行器执行是否免费
#执行器执行是否免费
isFree
=
false
isFree
=
false
...
@@ -203,6 +215,7 @@ enableStat=false
...
@@ -203,6 +215,7 @@ enableStat=false
#是否开启MVCC插件
#是否开启MVCC插件
enableMVCC
=
false
enableMVCC
=
false
alias
=
["token1:token","token2:token","token3:token"]
alias
=
["token1:token","token2:token","token3:token"]
[exec.sub.token]
[exec.sub.token]
#是否保存token交易信息
#是否保存token交易信息
saveTokenTxList
=
true
saveTokenTxList
=
true
...
@@ -215,6 +228,7 @@ tokenApprs = [
...
@@ -215,6 +228,7 @@ tokenApprs = [
"1JYB8sxi4He5pZWHCd3Zi2nypQ4JMB6AxN"
,
"1JYB8sxi4He5pZWHCd3Zi2nypQ4JMB6AxN"
,
"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
,
"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
,
]
]
[exec.sub.cert]
[exec.sub.cert]
# 是否启用证书验证和签名
# 是否启用证书验证和签名
enable
=
false
enable
=
false
...
@@ -222,9 +236,11 @@ enable=false
...
@@ -222,9 +236,11 @@ enable=false
cryptoPath
=
"authdir/crypto"
cryptoPath
=
"authdir/crypto"
# 带证书签名类型,支持"auth_ecdsa", "auth_sm2"
# 带证书签名类型,支持"auth_ecdsa", "auth_sm2"
signType
=
"auth_ecdsa"
signType
=
"auth_ecdsa"
[exec.sub.relay]
[exec.sub.relay]
#relay执行器保存BTC头执行权限地址
#relay执行器保存BTC头执行权限地址
genesis
=
"1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
genesis
=
"1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
[exec.sub.manage]
[exec.sub.manage]
#manage执行器超级管理员地址
#manage执行器超级管理员地址
superManager
=[
superManager
=[
...
@@ -233,3 +249,42 @@ superManager=[
...
@@ -233,3 +249,42 @@ superManager=[
"1Q8hGLfoGe63efeWa8fJ4Pnukhkngt6poK"
"1Q8hGLfoGe63efeWa8fJ4Pnukhkngt6poK"
]
]
[metrics]
#是否使能发送metrics数据的发送
enableMetrics
=
false
#数据保存模式
dataEmitMode
=
"influxdb"
[metrics.sub.influxdb]
#以纳秒为单位的发送间隔
duration
=
1000000000
url
=
"http://influxdb:8086"
database
=
"chain33metrics"
username
=
""
password
=
""
namespace
=
""
[mver.exec.sub.exchange]
banks
=
[
"1PTGVR7TUm1MJUH7M1UNcKBGMvfJ7nCrnN"
]
coins
=
[
{name
=
"BTY"
,
rate
=
100000
,
minFee
=
1000000
}
,
{name
=
"USDT"
,
rate
=
100000
,
minFee
=
1000000
}
,
{name
=
"bty"
,
rate
=
100000
,
minFee
=
1000000
}
,
{name
=
"CCNY"
,
rate
=
100000
,
minFee
=
1000000
}
,
]
#[mver.exec.sub.exchange.ForkParamV1]
#banks = [
# "1PTGVR7TUm1MJUH7M1UNcKBGMvfJ7nCrnN"
#]
#coins = [
# {name = "BTY", rate = 100000, minFee = 1000000},
# {name = "USDT", rate = 100000, minFee = 1000000},
#]
[fork.sub.exchange]
Enable
=
0
#ForkParamV1=1
\ No newline at end of file
plugin/dapp/exchange/test/cmd/main.go
View file @
c7422357
...
@@ -18,10 +18,35 @@ var (
...
@@ -18,10 +18,35 @@ var (
// 批量测试前,先确保测试账户有足够的币和钱
// 批量测试前,先确保测试账户有足够的币和钱
func
main
()
{
func
main
()
{
cli
=
test
.
NewGRPCCli
(
"localhost:8802"
)
cli
=
test
.
NewGRPCCli
(
"localhost:8802"
)
onesell
()
go
buy
()
go
buy
()
go
sell
()
go
sell
()
select
{}
select
{}
}
}
func
onesell
()
{
req
:=
&
et
.
LimitOrder
{
LeftAsset
:
&
et
.
Asset
{
Symbol
:
"bty"
,
Execer
:
"coins"
},
RightAsset
:
&
et
.
Asset
{
Execer
:
"token"
,
Symbol
:
"CCNY"
},
Price
:
1
,
Amount
:
types
.
DefaultCoinPrecision
,
Op
:
et
.
OpSell
,
}
ety
:=
types
.
LoadExecutorType
(
et
.
ExchangeX
)
// 卖 2000 次,需 2000*1=2000 个 bty
fmt
.
Println
(
"one sell "
)
tx
,
err
:=
ety
.
Create
(
"LimitOrder"
,
req
)
if
err
!=
nil
{
panic
(
err
)
}
reply
,
err
:=
cli
.
SendTx
(
tx
,
PrivKeyA
)
if
err
!=
nil
{
fmt
.
Println
(
"send err:"
,
err
)
return
}
fmt
.
Println
(
"reply"
,
reply
.
IsOk
)
fmt
.
Println
(
"reply"
,
string
(
reply
.
GetMsg
()))
}
func
sell
()
{
func
sell
()
{
req
:=
&
et
.
LimitOrder
{
req
:=
&
et
.
LimitOrder
{
...
...
plugin/dapp/exchange/test/exchange_test.go
View file @
c7422357
...
@@ -17,6 +17,7 @@ var (
...
@@ -17,6 +17,7 @@ var (
PrivKeyB
=
"0x19c069234f9d3e61135fefbeb7791b149cdf6af536f26bebb310d4cd22c3fee4"
// 1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR
PrivKeyB
=
"0x19c069234f9d3e61135fefbeb7791b149cdf6af536f26bebb310d4cd22c3fee4"
// 1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR
PrivKeyC
=
"0x7a80a1f75d7360c6123c32a78ecf978c1ac55636f87892df38d8b85a9aeff115"
// 1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
PrivKeyC
=
"0x7a80a1f75d7360c6123c32a78ecf978c1ac55636f87892df38d8b85a9aeff115"
// 1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
PrivKeyD
=
"0xcacb1f5d51700aea07fca2246ab43b0917d70405c65edea9b5063d72eb5c6b71"
// 1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs
PrivKeyD
=
"0xcacb1f5d51700aea07fca2246ab43b0917d70405c65edea9b5063d72eb5c6b71"
// 1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs
PrivKeyFee
=
"0xa691ceceadb1f6878c39702a057b09077971d2995b29f18ccba1e09cd9619b7f"
// 1PTGVR7TUm1MJUH7M1UNcKBGMvfJ7nCrnN
coin
=
"bty"
coin
=
"bty"
token
=
"CCNY"
token
=
"CCNY"
leftAsset
=
&
et
.
Asset
{
Symbol
:
coin
,
Execer
:
"coins"
}
leftAsset
=
&
et
.
Asset
{
Symbol
:
coin
,
Execer
:
"coins"
}
...
...
plugin/dapp/exchange/test/exec_cli.go
View file @
c7422357
...
@@ -40,6 +40,8 @@ type ExecCli struct {
...
@@ -40,6 +40,8 @@ type ExecCli struct {
accC1
*
account
.
DB
accC1
*
account
.
DB
accD
*
account
.
DB
accD
*
account
.
DB
accD1
*
account
.
DB
accD1
*
account
.
DB
accF
*
account
.
DB
accF1
*
account
.
DB
}
}
//Nodes ...
//Nodes ...
...
@@ -49,6 +51,7 @@ var (
...
@@ -49,6 +51,7 @@ var (
"1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR"
,
"1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR"
,
"1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k"
,
"1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k"
,
"1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs"
,
"1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs"
,
"1PTGVR7TUm1MJUH7M1UNcKBGMvfJ7nCrnN"
,
}
}
)
)
...
@@ -57,7 +60,7 @@ func NewExecCli() *ExecCli {
...
@@ -57,7 +60,7 @@ func NewExecCli() *ExecCli {
dir
,
sdb
,
ldb
:=
util
.
CreateTestDB
()
dir
,
sdb
,
ldb
:=
util
.
CreateTestDB
()
log
.
Println
(
dir
)
log
.
Println
(
dir
)
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
et
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
executor
.
Init
(
et
.
ExchangeX
,
cfg
,
nil
)
executor
.
Init
(
et
.
ExchangeX
,
cfg
,
nil
)
...
@@ -72,7 +75,6 @@ func NewExecCli() *ExecCli {
...
@@ -72,7 +75,6 @@ func NewExecCli() *ExecCli {
Frozen
:
0
,
Frozen
:
0
,
Addr
:
Nodes
[
1
],
Addr
:
Nodes
[
1
],
}
}
accountC
:=
&
types
.
Account
{
accountC
:=
&
types
.
Account
{
Balance
:
total
,
Balance
:
total
,
Frozen
:
0
,
Frozen
:
0
,
...
@@ -83,6 +85,11 @@ func NewExecCli() *ExecCli {
...
@@ -83,6 +85,11 @@ func NewExecCli() *ExecCli {
Frozen
:
0
,
Frozen
:
0
,
Addr
:
Nodes
[
3
],
Addr
:
Nodes
[
3
],
}
}
accountFee
:=
&
types
.
Account
{
Balance
:
0
,
Frozen
:
0
,
Addr
:
Nodes
[
4
],
}
execAddr
:=
address
.
ExecAddress
(
et
.
ExchangeX
)
execAddr
:=
address
.
ExecAddress
(
et
.
ExchangeX
)
...
@@ -98,6 +105,9 @@ func NewExecCli() *ExecCli {
...
@@ -98,6 +105,9 @@ func NewExecCli() *ExecCli {
accD
,
_
:=
account
.
NewAccountDB
(
cfg
,
"coins"
,
"bty"
,
sdb
)
accD
,
_
:=
account
.
NewAccountDB
(
cfg
,
"coins"
,
"bty"
,
sdb
)
accD
.
SaveExecAccount
(
execAddr
,
accountD
)
accD
.
SaveExecAccount
(
execAddr
,
accountD
)
accF
,
_
:=
account
.
NewAccountDB
(
cfg
,
"coins"
,
"bty"
,
sdb
)
accF
.
SaveExecAccount
(
execAddr
,
accountFee
)
accA1
,
_
:=
account
.
NewAccountDB
(
cfg
,
"token"
,
"CCNY"
,
sdb
)
accA1
,
_
:=
account
.
NewAccountDB
(
cfg
,
"token"
,
"CCNY"
,
sdb
)
accA1
.
SaveExecAccount
(
execAddr
,
accountA
)
accA1
.
SaveExecAccount
(
execAddr
,
accountA
)
...
@@ -110,6 +120,9 @@ func NewExecCli() *ExecCli {
...
@@ -110,6 +120,9 @@ func NewExecCli() *ExecCli {
accD1
,
_
:=
account
.
NewAccountDB
(
cfg
,
"token"
,
"CCNY"
,
sdb
)
accD1
,
_
:=
account
.
NewAccountDB
(
cfg
,
"token"
,
"CCNY"
,
sdb
)
accD1
.
SaveExecAccount
(
execAddr
,
accountD
)
accD1
.
SaveExecAccount
(
execAddr
,
accountD
)
accF1
,
_
:=
account
.
NewAccountDB
(
cfg
,
"token"
,
"CCNY"
,
sdb
)
accF1
.
SaveExecAccount
(
execAddr
,
accountFee
)
q
:=
queue
.
New
(
"channel"
)
q
:=
queue
.
New
(
"channel"
)
q
.
SetConfig
(
cfg
)
q
.
SetConfig
(
cfg
)
...
@@ -131,6 +144,8 @@ func NewExecCli() *ExecCli {
...
@@ -131,6 +144,8 @@ func NewExecCli() *ExecCli {
accC1
:
accC1
,
accC1
:
accC1
,
accD
:
accD
,
accD
:
accD
,
accD1
:
accD1
,
accD1
:
accD1
,
accF
:
accF
,
accF1
:
accF1
,
}
}
}
}
...
...
plugin/dapp/exchange/test/grpc_cli.go
View file @
c7422357
...
@@ -28,7 +28,7 @@ func NewGRPCCli(grpcAddr string) *GRPCCli {
...
@@ -28,7 +28,7 @@ func NewGRPCCli(grpcAddr string) *GRPCCli {
panic
(
err
)
panic
(
err
)
}
}
client
:=
types
.
NewChain33Client
(
conn
)
client
:=
types
.
NewChain33Client
(
conn
)
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
et
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
executor
.
Init
(
et
.
ExchangeX
,
cfg
,
nil
)
executor
.
Init
(
et
.
ExchangeX
,
cfg
,
nil
)
return
&
GRPCCli
{
return
&
GRPCCli
{
...
@@ -138,7 +138,7 @@ func (c *GRPCCli) sendAndWaitReceipt(tx *types.Transaction, hexKey string) (txHa
...
@@ -138,7 +138,7 @@ func (c *GRPCCli) sendAndWaitReceipt(tx *types.Transaction, hexKey string) (txHa
//SendTx ...
//SendTx ...
func
(
c
*
GRPCCli
)
SendTx
(
tx
*
types
.
Transaction
,
hexKey
string
)
(
reply
*
types
.
Reply
,
err
error
)
{
func
(
c
*
GRPCCli
)
SendTx
(
tx
*
types
.
Transaction
,
hexKey
string
)
(
reply
*
types
.
Reply
,
err
error
)
{
cfg
:=
types
.
NewChain33Config
(
types
.
GetDefaultCfgstring
())
cfg
:=
types
.
NewChain33Config
(
et
.
GetDefaultCfgstring
())
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
cfg
.
SetTitleOnlyForTest
(
"chain33"
)
tx
,
err
=
types
.
FormatTx
(
cfg
,
et
.
ExchangeX
,
tx
)
tx
,
err
=
types
.
FormatTx
(
cfg
,
et
.
ExchangeX
,
tx
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
plugin/dapp/exchange/test/prepare.sh
View file @
c7422357
...
@@ -30,6 +30,9 @@ sleep 1
...
@@ -30,6 +30,9 @@ sleep 1
#D -- 1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs
#D -- 1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs
./chain33-cli account import_key
-k
0xcacb1f5d51700aea07fca2246ab43b0917d70405c65edea9b5063d72eb5c6b71
-l
D
./chain33-cli account import_key
-k
0xcacb1f5d51700aea07fca2246ab43b0917d70405c65edea9b5063d72eb5c6b71
-l
D
#Fee -- 1PTGVR7TUm1MJUH7M1UNcKBGMvfJ7nCrnN
./chain33-cli account import_key
-k
0xa691ceceadb1f6878c39702a057b09077971d2995b29f18ccba1e09cd9619b7f
-l
Fee
## config token
## config token
./chain33-cli send config config_tx
-c
token-finisher
-o
add
-v
1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs
-k
1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs
./chain33-cli send config config_tx
-c
token-finisher
-o
add
-v
1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs
-k
1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs
sleep
1
sleep
1
...
...
plugin/dapp/exchange/types/errors.go
View file @
c7422357
...
@@ -15,4 +15,6 @@ var (
...
@@ -15,4 +15,6 @@ var (
ErrDirection
=
fmt
.
Errorf
(
"%s"
,
"The direction only 0 or 1!"
)
ErrDirection
=
fmt
.
Errorf
(
"%s"
,
"The direction only 0 or 1!"
)
ErrStatus
=
fmt
.
Errorf
(
"%s"
,
"The status only in 0 , 1, 2!"
)
ErrStatus
=
fmt
.
Errorf
(
"%s"
,
"The status only in 0 , 1, 2!"
)
ErrOrderID
=
fmt
.
Errorf
(
"%s"
,
"Wrong OrderID!"
)
ErrOrderID
=
fmt
.
Errorf
(
"%s"
,
"Wrong OrderID!"
)
ErrCfgFmt
=
fmt
.
Errorf
(
"%s"
,
"ErrCfgFmt"
)
)
)
plugin/dapp/exchange/types/exchange.go
View file @
c7422357
...
@@ -127,3 +127,51 @@ func (e *ExchangeType) GetTypeMap() map[string]int32 {
...
@@ -127,3 +127,51 @@ func (e *ExchangeType) GetTypeMap() map[string]int32 {
func
(
e
*
ExchangeType
)
GetLogMap
()
map
[
int64
]
*
types
.
LogInfo
{
func
(
e
*
ExchangeType
)
GetLogMap
()
map
[
int64
]
*
types
.
LogInfo
{
return
logMap
return
logMap
}
}
var
MverPrefix
=
"mver.exec.sub."
+
ExchangeX
// [mver.exec.sub.exchange]
type
TradeConfig
struct
{
Banks
[]
string
Coins
map
[
string
]
Coin
}
// 交易对配置
type
Coin
struct
{
Name
string
Rate
int32
MinFee
int64
}
func
(
f
*
TradeConfig
)
GetFeeAddr
()
string
{
return
f
.
Banks
[
0
]
}
func
(
f
*
TradeConfig
)
GetRate
(
or
*
LimitOrder
)
int32
{
var
symbol
=
or
.
GetRightAsset
()
.
GetSymbol
()
if
or
.
GetOp
()
==
OpBuy
{
symbol
=
or
.
GetLeftAsset
()
.
GetSymbol
()
}
c
,
ok
:=
f
.
Coins
[
symbol
]
if
!
ok
{
return
0
}
return
c
.
Rate
}
func
(
f
*
TradeConfig
)
GetMinFee
(
or
*
LimitOrder
)
int64
{
var
symbol
=
or
.
GetRightAsset
()
.
GetSymbol
()
if
or
.
GetOp
()
==
OpBuy
{
symbol
=
or
.
GetLeftAsset
()
.
GetSymbol
()
}
c
,
ok
:=
f
.
Coins
[
symbol
]
if
!
ok
{
return
0
}
return
c
.
MinFee
}
plugin/dapp/exchange/types/exchange.pb.go
View file @
c7422357
This diff is collapsed.
Click to expand it.
plugin/dapp/exchange/types/exchangecfg.go
0 → 100644
View file @
c7422357
package
types
var
cfgstring
=
`
# Title为local,表示此配置文件为本地单节点的配置。此时本地节点所在的链上只有这一个节点,共识模块一般采用solo模式。
Title="local"
TestNet=true
FixTime=false
[crypto]
[log]
# 日志级别,支持debug(dbug)/info/warn/error(eror)/crit
loglevel = "info"
logConsoleLevel = "info"
# 日志文件名,可带目录,所有生成的日志文件都放到此目录下
logFile = "logs/chain33.log"
# 单个日志文件的最大值(单位:兆)
maxFileSize = 300
# 最多保存的历史日志文件个数
maxBackups = 100
# 最多保存的历史日志消息(单位:天)
maxAge = 28
# 日志文件名是否使用本地时间(否则使用UTC时间)
localTime = true
# 历史日志文件是否压缩(压缩格式为gz)
compress = true
# 是否打印调用源文件和行号
callerFile = false
# 是否打印调用方法
callerFunction = false
[blockchain]
# 缓存区块的个数
defCacheSize=128
# 同步区块时一次最多申请获取的区块个数
maxFetchBlockNum=128
# 向对端节点请求同步区块的时间间隔
timeoutSeconds=5
# 使用的数据库类型
driver="leveldb"
# 数据库文件目录
dbPath="datadir"
# 数据库缓存大小
dbCache=64
# 是否为单节点
singleMode=true
# 同步区块批量写数据库时,是否需要立即写磁盘,非固态硬盘的电脑可以设置为false,以提高性能
batchsync=false
# 是否记录添加或者删除区块的序列,若节点作为主链节点,为平行链节点提供服务,需要设置为true
isRecordBlockSequence=true
# 是否为平行链节点
isParaChain=false
# 是否开启交易快速查询索引
enableTxQuickIndex=false
[p2p]
types=["dht"]
msgCacheSize=10240
driver="leveldb"
dbPath="datadir/addrbook"
dbCache=4
grpcLogFile="grpc33.log"
[rpc]
# jrpc绑定地址
jrpcBindAddr="localhost:8801"
# grpc绑定地址
grpcBindAddr="localhost:8802"
# 白名单列表,允许访问的IP地址,默认是“*”,允许所有IP访问
whitelist=["127.0.0.1"]
# jrpc方法请求白名单,默认是“*”,允许访问所有RPC方法
jrpcFuncWhitelist=["*"]
# jrpc方法请求黑名单,禁止调用黑名单里配置的rpc方法,一般和白名单配合使用,默认是空
# jrpcFuncBlacklist=["xxxx"]
# grpc方法请求白名单,默认是“*”,允许访问所有RPC方法
grpcFuncWhitelist=["*"]
# grpc方法请求黑名单,禁止调用黑名单里配置的rpc方法,一般和白名单配合使用,默认是空
# grpcFuncBlacklist=["xxx"]
# 是否开启https
enableTLS=false
# 证书文件,证书和私钥文件可以用cli工具生成
certFile="cert.pem"
# 私钥文件
keyFile="key.pem"
[mempool]
# mempool队列名称,可配,timeline,score,price
name="timeline"
# mempool缓存容量大小,默认10240
poolCacheSize=10240
# 最小得交易手续费用,这个没有默认值,必填,一般是100000
minTxFee=100000
# 每个账户在mempool中得最大交易数量,默认100
maxTxNumPerAccount=10000
# timeline 是默认的先来先进的按时间排序
[mempool.sub.timeline]
# mempool缓存容量大小,默认10240
poolCacheSize=10240
# 最小得交易手续费用,这个没有默认值,必填,一般是100000
minTxFee=100000
# 每个账户在mempool中得最大交易数量,默认100
maxTxNumPerAccount=10000
# score是分数队列模式(分数=常量a*手续费/交易字节数-常量b*时间*定量c,按分数排队,高的优先,常量a,b和定量c可配置),按分数来排序
[mempool.sub.score]
# mempool缓存容量大小,默认10240
poolCacheSize=10240
# 最小得交易手续费用,这个没有默认值,必填,一般是100000
minTxFee=100000
# 每个账户在mempool中得最大交易数量,默认100
maxTxNumPerAccount=10000
# 时间占价格比例
timeParam=1
# 手续费相对于时间的一个合适的常量,取当前unix时间戳前四位数,排队时手续费高1e-5的分数~=快1s的分数
priceConstant=1544
# 常量比例
pricePower=1
# price是价格队列模式(价格=手续费/交易字节数,价格高者优先,同价则时间早优先)
[mempool.sub.price]
# mempool缓存容量大小,默认10240
poolCacheSize=10240
# 最小得交易手续费用,这个没有默认值,必填,一般是100000
minTxFee=100000
# 每个账户在mempool中得最大交易数量,默认100
maxTxNumPerAccount=10000
[consensus]
#共识名,可选项有solo,ticket,raft,tendermint,para
name="solo"
#是否开启挖矿,开启挖矿才能创建区块
minerstart=true
#创世区块时间(UTC时间)
genesisBlockTime=1514533394
#创世交易地址
genesis="1McRuWgLN7daKTFfZyibb5eK769NVgNH22"
[mver.consensus]
#基金账户地址
fundKeyAddr = "1BQXS6TxaYYG5mADaWij4AxhZZUTpw95a5"
#用户回报
coinReward = 18
#发展基金回报
coinDevFund = 12
#ticket价格
ticketPrice = 10000
#挖矿难度
powLimitBits = "0x1f00ffff"
#每次调整难度的最大的范围,如果设置成 4 的话,范围是 (1/4 - 4),一次不能增加 4倍以上的难度,或者难度减少为 原来的 1/4 ,这个参数,是为了难度不会突然爆增加或者减少
retargetAdjustmentFactor = 4
#表示如果区块时间大于当前时间 16s ,那么区块就会判定为无效区块。
futureBlockTime = 16
#ticket冻结时长
ticketFrozenTime = 5 #5s only for test
ticketWithdrawTime = 10 #10s only for test
ticketMinerWaitTime = 2 #2s only for test
#区块包含最多交易数
maxTxNumber = 1600 #160
#调整挖矿难度的间隔,(ps:难度不是每个区块都调整的,而是每隔 targetTimespan / targetTimePerBlock 块调整一次)
targetTimespan = 2304
#每个区块打包的目标时间
targetTimePerBlock = 16
# 仅保留这一项,其他consensus相关的配置全部删除
[consensus.sub.solo]
#创世交易地址
genesis="1McRuWgLN7daKTFfZyibb5eK769NVgNH22"
#创世区块时间(UTC时间)
genesisBlockTime=1514533394
#获取交易间隔时长,单位纳秒
waitTxMs=10
[store]
# 数据存储格式名称,目前支持mavl,kvdb,kvmvcc,mpt
name="mavl"
# 数据存储驱动类别,目前支持leveldb,goleveldb,memdb,gobadgerdb,ssdb,pegasus
driver="leveldb"
# 数据文件存储路径
dbPath="datadir/mavltree"
# Cache大小
dbCache=128
# 数据库版本
localdbVersion="1.0.0"
[store.sub.mavl]
# 是否使能mavl加前缀
enableMavlPrefix=false
# 是否使能MVCC,如果mavl中enableMVCC为true此处必须为true
enableMVCC=false
# 是否使能mavl数据裁剪
enableMavlPrune=false
# 裁剪高度间隔
pruneHeight=10000
[wallet]
# 交易发送最低手续费,单位0.00000001BTY(1e-8),默认100000,即0.001BTY
minFee=100000
# walletdb驱动名,支持leveldb/memdb/gobadgerdb/ssdb/pegasus
driver="leveldb"
# walletdb路径
dbPath="wallet"
# walletdb缓存大小
dbCache=16
# 钱包发送交易签名方式
signType="secp256k1"
[wallet.sub.ticket]
# 是否关闭ticket自动挖矿,默认false
minerdisable=false
# 允许购买ticket挖矿的白名单地址,默认配置“*”,允许所有地址购买
minerwhitelist=["*"]
[exec]
#执行器执行是否免费
isFree=false
#执行器执行所需最小费用,低于Mempool和Wallet设置的MinFee,在minExecFee = 0 的情况下,isFree = true才会生效
minExecFee=100000
#是否开启stat插件
enableStat=false
#是否开启MVCC插件
enableMVCC=false
alias=["token1:token","token2:token","token3:token"]
[exec.sub.token]
#是否保存token交易信息
saveTokenTxList=true
#token审批人地址
tokenApprs = [
"1McRuWgLN7daKTFfZyibb5eK769NVgNH22",
"1Q8hGLfoGe63efeWa8fJ4Pnukhkngt6poK",
"1LY8GFia5EiyoTodMLfkB5PHNNpXRqxhyB",
"1GCzJDS6HbgTQ2emade7mEJGGWFfA15pS9",
"1JYB8sxi4He5pZWHCd3Zi2nypQ4JMB6AxN",
"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv",
]
[exec.sub.cert]
# 是否启用证书验证和签名
enable=false
# 加密文件路径
cryptoPath="authdir/crypto"
# 带证书签名类型,支持"auth_ecdsa", "auth_sm2"
signType="auth_ecdsa"
[exec.sub.relay]
#relay执行器保存BTC头执行权限地址
genesis="1McRuWgLN7daKTFfZyibb5eK769NVgNH22"
[exec.sub.manage]
#manage执行器超级管理员地址
superManager=[
"1McRuWgLN7daKTFfZyibb5eK769NVgNH22",
"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv",
"1Q8hGLfoGe63efeWa8fJ4Pnukhkngt6poK"
]
[metrics]
#是否使能发送metrics数据的发送
enableMetrics=false
#数据保存模式
dataEmitMode="influxdb"
[metrics.sub.influxdb]
#以纳秒为单位的发送间隔
duration=1000000000
url="http://influxdb:8086"
database="chain33metrics"
username=""
password=""
namespace=""
[mver.exec.sub.exchange]
banks = [
"1PTGVR7TUm1MJUH7M1UNcKBGMvfJ7nCrnN"
]
coins = [
{name = "BTY", rate = 100000, minFee = 1000000},
{name = "USDT", rate = 100000, minFee = 1000000},
{name = "bty", rate = 100000, minFee = 1000000},
{name = "CCNY", rate = 100000, minFee = 1000000},
]
#[mver.exec.sub.exchange.ForkParamV1]
#banks = [
# "1PTGVR7TUm1MJUH7M1UNcKBGMvfJ7nCrnN"
#]
#coins = [
# {name = "BTY", rate = 100000, minFee = 1000000},
# {name = "USDT", rate = 100000, minFee = 1000000},
#]
[fork.sub.exchange]
Enable=0
#ForkParamV1=1
`
//GetDefaultCfgstring ...
func
GetDefaultCfgstring
()
string
{
return
cfgstring
}
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