This is an automated email from the ASF dual-hosted git repository. cmorris pushed a commit to branch splitroles-blockchain in repository https://gitbox.apache.org/repos/asf/incubator-milagro-dta.git
commit db3f2b0d9e08cb5a70e74652db109d5f935ab2a1 Author: Christopher Morris <[email protected]> AuthorDate: Tue Sep 24 16:41:37 2019 +0100 Order working & Add Tags --- cmd/service/__debug_bin | Bin 51604364 -> 51651284 bytes cmd/service/main.go | 2 +- cmd/servicetester/block_test.sh | 1 + go.mod | 3 + go.sum | 38 +++++++++---- pkg/api/proto.go | 4 +- pkg/defaultservice/fulfill.go | 4 +- pkg/defaultservice/order.go | 54 +++++++++--------- pkg/endpoints/endpoints.go | 61 +------------------- pkg/service/service.go | 2 - pkg/tendermint/cmd/cmd | Bin 0 -> 10230244 bytes pkg/tendermint/cmd/tmget.go | 110 +++++++++++++++++++++++++++++++++++++ pkg/tendermint/cmd/transactions.go | 60 ++++++++++++++++++++ pkg/tendermint/config.go | 6 +- pkg/tendermint/tendermint.go | 30 ++++++++-- pkg/tendermint/websockets.go | 40 +++++++++++--- 16 files changed, 292 insertions(+), 123 deletions(-) diff --git a/cmd/service/__debug_bin b/cmd/service/__debug_bin index 4309b69..3a3cf1b 100755 Binary files a/cmd/service/__debug_bin and b/cmd/service/__debug_bin differ diff --git a/cmd/service/main.go b/cmd/service/main.go index 239c5e2..920fc46 100644 --- a/cmd/service/main.go +++ b/cmd/service/main.go @@ -146,7 +146,7 @@ func startDaemon(args []string) error { return errors.Wrap(err, "init logger") } - go tendermint.Subscribe(logger) + go tendermint.Subscribe(logger, cfg.Node.NodeID) if err != nil { return errors.Wrap(err, "init Tendermint Blockchain") } diff --git a/cmd/servicetester/block_test.sh b/cmd/servicetester/block_test.sh new file mode 100755 index 0000000..304490a --- /dev/null +++ b/cmd/servicetester/block_test.sh @@ -0,0 +1 @@ +curl -s -X POST "127.0.0.1:5556/v1/order1" -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":\"\",\"extension\":{\"coin\":\"0\"}}" \ No newline at end of file diff --git a/go.mod b/go.mod index a7bbca8..a526712 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,7 @@ require ( github.com/golang/protobuf v1.3.2 github.com/google/uuid v1.1.1 github.com/gorilla/mux v1.7.3 + github.com/hokaccha/go-prettyjson v0.0.0-20190818114111-108c894c2c0e // indirect github.com/ipfs/go-datastore v0.0.5 github.com/ipfs/go-ds-leveldb v0.0.2 github.com/ipfs/go-ipfs v0.4.22 @@ -30,8 +31,10 @@ require ( github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect github.com/prometheus/client_golang v0.9.3 github.com/stretchr/testify v1.4.0 + github.com/stumble/gorocksdb v0.0.3 // indirect github.com/tendermint/tendermint v0.32.4 github.com/tyler-smith/go-bip39 v1.0.0 + github.com/urfave/cli v1.22.1 go.etcd.io/bbolt v1.3.3 gopkg.in/go-playground/assert.v1 v1.2.1 // indirect gopkg.in/go-playground/validator.v9 v9.29.1 diff --git a/go.sum b/go.sum index 0aab82b..58ea010 100644 --- a/go.sum +++ b/go.sum @@ -8,7 +8,6 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y= github.com/Kubuxu/gocovmerge v0.0.0-20161216165753-7ecaa51963cd/go.mod h1:bqoB8kInrTeEtYAwaIXoSRqdwnjQmFhsfusnzyui6yY= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenPeeDeeP/depguard v0.0.0-20180806142446-a69c782687b2/go.mod h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o= github.com/OpenPeeDeeP/depguard v1.0.0/go.mod h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/Stebalien/go-bitfield v0.0.0-20180330043415-076a62f9ce6e/go.mod h1:3oM7gXIttpYDAJXpVNnSCiUMYBLIZ6cb1t+Ip982MRo= @@ -62,7 +61,10 @@ github.com/coreos/go-semver v0.2.1-0.20180108230905-e214231b295a h1:U0BbGfKnviqV github.com/coreos/go-semver v0.2.1-0.20180108230905-e214231b295a/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -82,20 +84,27 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8 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/elgris/jsondiff v0.0.0-20160530203242-765b5c24c302/go.mod h1:qBlWZqWeVx9BjvqBsnC/8RUlAYpIFmPvgROcw0n1scE= +github.com/etcd-io/bbolt v1.3.3 h1:gSJmxrs37LgTqR/oyJBWok6k6SvXEUerFTbltIhXkBM= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 h1:BBso6MBKW8ncyZLv37o+KNyy0HrrHgfnOaGQC2qvN+A= github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5/go.mod h1:JpoxHjuQauoxiFMl1ie8Xc/7TfLuMZ5eOCONd1sUBHg= +github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 h1:0JZ+dUmQeA8IIVUMzysrX4/AKuQwWhV2dYQuPZdvdSQ= +github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= +github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 h1:E2s37DuLxFhQDg5gKsWoLBOB0n+ZW8s599zru8FJ2/Y= +github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fd/go-nat v1.0.0/go.mod h1:BTBu/CKvMmOMUPkKVef1pngt2WFH/lg7E6yQnulfp6E= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-check/check v0.0.0-20180628173108-788fd7840127 h1:0gkP6mzaMqkmpcJYCFOLkIBwI7xFExG03bbkOkCvUPI= github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= -github.com/go-critic/go-critic v0.3.5-0.20190210220443-ee9bf5809ead/go.mod h1:3MzXZKJdeXqdU9cj+rvZdNiN7SZ8V9OjybF8loZDmHU= github.com/go-critic/go-critic v0.3.5-0.20190526074819-1df300866540/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -114,9 +123,7 @@ github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw= github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/go-toolsmith/astcast v0.0.0-20181028201508-b7a89ed70af1/go.mod h1:TEo3Ghaj7PsZawQHxT/oBvo4HK/sl1RcuUHDKTTju+o= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v0.0.0-20180903214859-79b422d080c4/go.mod h1:c9CPdq2AzM8oPomdlPniEfPAC6g1s7NqZzODt8y6ib8= github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= @@ -127,9 +134,7 @@ github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur9 github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= -github.com/go-toolsmith/strparse v0.0.0-20180903215201-830b6daa1241/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v0.0.0-20181030061450-d63dc7650676/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= github.com/go-yaml/yaml v2.1.0+incompatible h1:RYi2hDdss1u4YE7GwixGzWwVo47T8UQwnTLB6vQiq+o= github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= @@ -139,6 +144,7 @@ github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE= github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +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-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.0.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= @@ -160,14 +166,11 @@ github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9 github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= github.com/golangci/go-tools v0.0.0-20190318055746-e32c54105b7c/go.mod h1:unzUULGw35sjyOYjUt0jMTXqHlZPpPc6e+xfO4cd6mM= -github.com/golangci/go-tools v0.0.0-20190318060251-af6baa5dc196/go.mod h1:unzUULGw35sjyOYjUt0jMTXqHlZPpPc6e+xfO4cd6mM= github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= github.com/golangci/gofmt v0.0.0-20181222123516-0b8337e80d98/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/golangci-lint v1.16.1-0.20190425135923-692dacb773b7/go.mod h1:kSe2pu2LlcsMT5Dr95yNKUT5RNfMkwif9MZqtOW5NEs= github.com/golangci/golangci-lint v1.18.0/go.mod h1:kaqo8l0OZKYPtjNmG4z4HrWLgcYNIJ9B9q3LWri9uLg= github.com/golangci/gosec v0.0.0-20190211064107-66fb7fc33547/go.mod h1:0qUabqiIQgfmlAmulqxyiGkkyF6/tOGSnY2cnPVwrzU= -github.com/golangci/ineffassign v0.0.0-20180808204949-2ee8f2867dde/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= github.com/golangci/lint-1 v0.0.0-20190420132249-ee948d087217/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= @@ -178,6 +181,7 @@ github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -206,6 +210,8 @@ github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hokaccha/go-prettyjson v0.0.0-20190818114111-108c894c2c0e h1:0aewS5NTyxftZHSnFaJmWE5oCCrj4DyEXkAiMa1iZJM= +github.com/hokaccha/go-prettyjson v0.0.0-20190818114111-108c894c2c0e/go.mod h1:pFlLw2CfqZiIBOx6BuCeRLCrfxBJipTY0nIOF/VbGcI= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hsanjuan/go-libp2p-gostream v0.0.31/go.mod h1:cWvV5/NQ5XWi0eQZnX/svsAk6NLc4U26pItvj0eDeRk= @@ -344,6 +350,7 @@ github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsj github.com/jbenet/goprocess v0.1.3 h1:YKyIEECS/XvcfHtBzxtjBBbWK+MbvA6dG8ASiqwvr10= github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= @@ -532,6 +539,7 @@ github.com/lucas-clemente/quic-go v0.11.1/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdf github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/marten-seemann/qtls v0.2.3 h1:0yWJ43C62LsZt08vuQJDK1uC1czUc3FJeCLPoNAI4vA= github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= @@ -642,12 +650,17 @@ github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= @@ -685,6 +698,8 @@ github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stumble/gorocksdb v0.0.3 h1:9UU+QA1pqFYJuf9+5p7z1IqdE5k0mma4UAeu2wmX8kA= +github.com/stumble/gorocksdb v0.0.3/go.mod h1:v6IHdFBXk5DJ1K4FZ0xi+eY737quiiBxYtSWXadLybY= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/syndtr/goleveldb v1.0.1-0.20190318030020-c3a204f8e965 h1:1oFLiOyVl+W7bnBzGhf7BbIv9loSFQcieWWYIjLqcAw= @@ -704,6 +719,8 @@ github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGr github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ultraware/funlen v0.0.1/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= github.com/valyala/quicktemplate v1.1.1/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= @@ -795,7 +812,6 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190310074541-c10a0554eabf/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522135303-fa69b94a3b58/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= @@ -840,7 +856,6 @@ golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181205014116-22934f0fdb62/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190121143147-24cd39ecf745/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -848,7 +863,6 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190420000508-685fecacd0a0/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190909030654-5b82db07426d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= diff --git a/pkg/api/proto.go b/pkg/api/proto.go index 3107b12..a4a7eea 100644 --- a/pkg/api/proto.go +++ b/pkg/api/proto.go @@ -44,8 +44,10 @@ const ( type BlockChainTX struct { Processor string SenderID string - RecipientID string + RecipientID []string Payload []byte + TXhash []byte + Tags map[string]string } //CreateIdentityRequest - diff --git a/pkg/defaultservice/fulfill.go b/pkg/defaultservice/fulfill.go index 26be911..8b1b87b 100644 --- a/pkg/defaultservice/fulfill.go +++ b/pkg/defaultservice/fulfill.go @@ -80,7 +80,7 @@ func (s *Service) FulfillOrder(req *api.FulfillOrderRequest) (string, error) { chainTX := &api.BlockChainTX{ Processor: api.TXFulfillResponse, SenderID: nodeID, - RecipientID: s.MasterFiduciaryNodeID(), + RecipientID: []string{s.MasterFiduciaryNodeID()}, Payload: marshaledRequest, } //curl --data-binary '{"jsonrpc":"2.0","id":"anything","method":"broadcast_tx_commit","params": {"tx": "YWFhcT1hYWFxCg=="}}' -H 'content-type:text/plain;' http://localhost:26657 @@ -143,7 +143,7 @@ func (s *Service) FulfillOrderSecret(req *api.FulfillOrderSecretRequest) (string chainTX := &api.BlockChainTX{ Processor: api.TXFulfillOrderSecretResponse, SenderID: nodeID, - RecipientID: s.MasterFiduciaryNodeID(), + RecipientID: []string{s.MasterFiduciaryNodeID()}, Payload: marshaledRequest, } //curl --data-binary '{"jsonrpc":"2.0","id":"anything","method":"broadcast_tx_commit","params": {"tx": "YWFhcT1hYWFxCg=="}}' -H 'content-type:text/plain;' http://localhost:26657 diff --git a/pkg/defaultservice/order.go b/pkg/defaultservice/order.go index faa9ccb..8ab714d 100644 --- a/pkg/defaultservice/order.go +++ b/pkg/defaultservice/order.go @@ -116,8 +116,8 @@ func (s *Service) Order(req *api.OrderRequest) (*api.OrderResponse, error) { //Initialise values from Request object beneficiaryIDDocumentCID := req.BeneficiaryIDDocumentCID - iDDocID := s.NodeID() - recipientList, err := common.BuildRecipientList(s.Ipfs, iDDocID, s.MasterFiduciaryNodeID()) + nodeID := s.NodeID() + recipientList, err := common.BuildRecipientList(s.Ipfs, nodeID, s.MasterFiduciaryNodeID()) if err != nil { return nil, err } @@ -128,7 +128,7 @@ func (s *Service) Order(req *api.OrderRequest) (*api.OrderResponse, error) { } //Create Order - order, err := common.CreateNewDepositOrder(beneficiaryIDDocumentCID, iDDocID) + order, err := common.CreateNewDepositOrder(beneficiaryIDDocumentCID, nodeID) if err != nil { return nil, err } @@ -139,14 +139,14 @@ func (s *Service) Order(req *api.OrderRequest) (*api.OrderResponse, error) { } //Write Order to IPFS - orderPart1CID, err := common.WriteOrderToIPFS(iDDocID, s.Ipfs, s.Store, iDDocID, order, recipientList) + orderPart1CID, err := common.WriteOrderToIPFS(nodeID, s.Ipfs, s.Store, nodeID, order, recipientList) if err != nil { return nil, err } //Fullfill the order on the remote Server request := &api.FulfillOrderRequest{ - DocumentCID: iDDocID, + DocumentCID: nodeID, OrderPart1CID: orderPart1CID, Extension: fulfillExtension, } @@ -157,11 +157,11 @@ func (s *Service) Order(req *api.OrderRequest) (*api.OrderResponse, error) { } //Get the updated order out of IPFS - _, _, _, sikeSK, err := common.RetrieveIdentitySecrets(s.Store, iDDocID) + _, _, _, sikeSK, err := common.RetrieveIdentitySecrets(s.Store, nodeID) if err != nil { return nil, err } - updatedOrder, err := common.RetrieveOrderFromIPFS(s.Ipfs, response.OrderPart2CID, sikeSK, iDDocID, remoteIDDoc.BLSPublicKey) + updatedOrder, err := common.RetrieveOrderFromIPFS(s.Ipfs, response.OrderPart2CID, sikeSK, nodeID, remoteIDDoc.BLSPublicKey) if err != nil { return nil, errors.Wrap(err, "Fail to retrieve Order from IPFS") } @@ -291,8 +291,8 @@ func (s *Service) Order1(req *api.OrderRequest) (string, error) { //Initialise values from Request object beneficiaryIDDocumentCID := req.BeneficiaryIDDocumentCID - iDDocID := s.NodeID() - recipientList, err := common.BuildRecipientList(s.Ipfs, iDDocID, s.MasterFiduciaryNodeID()) + nodeID := s.NodeID() + recipientList, err := common.BuildRecipientList(s.Ipfs, nodeID, s.MasterFiduciaryNodeID()) if err != nil { return "", err } @@ -303,7 +303,7 @@ func (s *Service) Order1(req *api.OrderRequest) (string, error) { // } //Create Order - order, err := common.CreateNewDepositOrder(beneficiaryIDDocumentCID, iDDocID) + order, err := common.CreateNewDepositOrder(beneficiaryIDDocumentCID, nodeID) if err != nil { return "", err } @@ -314,14 +314,14 @@ func (s *Service) Order1(req *api.OrderRequest) (string, error) { } //Write Order to IPFS - orderPart1CID, err := common.WriteOrderToIPFS(iDDocID, s.Ipfs, s.Store, iDDocID, order, recipientList) + orderPart1CID, err := common.WriteOrderToIPFS(nodeID, s.Ipfs, s.Store, nodeID, order, recipientList) if err != nil { return "", err } //Fullfill the order on the remote Server request := &api.FulfillOrderRequest{ - DocumentCID: iDDocID, + DocumentCID: nodeID, OrderPart1CID: orderPart1CID, Extension: fulfillExtension, } @@ -331,8 +331,8 @@ func (s *Service) Order1(req *api.OrderRequest) (string, error) { //Write the requests to the chain chainTX := &api.BlockChainTX{ Processor: api.TXFulfillRequest, - SenderID: iDDocID, - RecipientID: s.MasterFiduciaryNodeID(), + SenderID: nodeID, + RecipientID: []string{s.MasterFiduciaryNodeID(), nodeID}, Payload: marshaledRequest, } //curl --data-binary '{"jsonrpc":"2.0","id":"anything","method":"broadcast_tx_commit","params": {"tx": "YWFhcT1hYWFxCg=="}}' -H 'content-type:text/plain;' http://localhost:26657 @@ -349,8 +349,8 @@ func (s *Service) Order2(req *api.FulfillOrderResponse) (string, error) { // //Initialise values from Request object // beneficiaryIDDocumentCID := req.BeneficiaryIDDocumentCID - iDDocID := s.NodeID() - // recipientList, err := common.BuildRecipientList(s.Ipfs, iDDocID, s.MasterFiduciaryNodeID()) + nodeID := s.NodeID() + // recipientList, err := common.BuildRecipientList(s.Ipfs, nodeID, s.MasterFiduciaryNodeID()) // if err != nil { // return "", err // } @@ -361,7 +361,7 @@ func (s *Service) Order2(req *api.FulfillOrderResponse) (string, error) { } // //Create Order - // order, err := common.CreateNewDepositOrder(beneficiaryIDDocumentCID, iDDocID) + // order, err := common.CreateNewDepositOrder(beneficiaryIDDocumentCID, nodeID) // if err != nil { // return "", err // } @@ -372,14 +372,14 @@ func (s *Service) Order2(req *api.FulfillOrderResponse) (string, error) { // } // //Write Order to IPFS - // orderPart1CID, err := common.WriteOrderToIPFS(iDDocID, s.Ipfs, s.Store, iDDocID, order, recipientList) + // orderPart1CID, err := common.WriteOrderToIPFS(nodeID, s.Ipfs, s.Store, nodeID, order, recipientList) // if err != nil { // return "", err // } // //Fullfill the order on the remote Server // request := &api.FulfillOrderRequest{ - // DocumentCID: iDDocID, + // DocumentCID: nodeID, // OrderPart1CID: orderPart1CID, // Extension: fulfillExtension, // } @@ -389,7 +389,7 @@ func (s *Service) Order2(req *api.FulfillOrderResponse) (string, error) { // //Write the requests to the chain // chainTX := &api.BlockChainTX{ // Type: api.TXFullfullRequest, - // SenderID: iDDocID, + // SenderID: nodeID, // RecipientID: s.MasterFiduciaryNodeID(), // Payload: marshaledRequest, // } @@ -403,11 +403,11 @@ func (s *Service) Order2(req *api.FulfillOrderResponse) (string, error) { // } //Get the updated order out of IPFS - _, _, _, sikeSK, err := common.RetrieveIdentitySecrets(s.Store, iDDocID) + _, _, _, sikeSK, err := common.RetrieveIdentitySecrets(s.Store, nodeID) if err != nil { return "", err } - updatedOrder, err := common.RetrieveOrderFromIPFS(s.Ipfs, req.OrderPart2CID, sikeSK, iDDocID, remoteIDDoc.BLSPublicKey) + updatedOrder, err := common.RetrieveOrderFromIPFS(s.Ipfs, req.OrderPart2CID, sikeSK, nodeID, remoteIDDoc.BLSPublicKey) if err != nil { return "", errors.Wrap(err, "Fail to retrieve Order from IPFS") } @@ -429,11 +429,11 @@ func (s *Service) Order2(req *api.FulfillOrderResponse) (string, error) { //Write the requests to the chain chainTX := &api.BlockChainTX{ Processor: api.TXOrderSecretResponse, - SenderID: iDDocID, - RecipientID: s.MasterFiduciaryNodeID(), + SenderID: nodeID, + RecipientID: []string{s.MasterFiduciaryNodeID(), nodeID}, Payload: marshaledRequest, + Tags: map[string]string{"reference": updatedOrder.Reference}, } - //curl --data-binary '{"jsonrpc":"2.0","id":"anything","method":"broadcast_tx_commit","params": {"tx": "YWFhcT1hYWFxCg=="}}' -H 'content-type:text/plain;' http://localhost:26657 return tendermint.PostToChain(chainTX, "Order2") } @@ -501,7 +501,7 @@ func (s *Service) OrderSecret1(req *api.OrderSecretRequest) (string, error) { chainTX := &api.BlockChainTX{ Processor: api.TXFulfillOrderSecretRequest, SenderID: nodeID, - RecipientID: s.MasterFiduciaryNodeID(), + RecipientID: []string{s.MasterFiduciaryNodeID(), nodeID}, Payload: marshaledRequest, } //curl --data-binary '{"jsonrpc":"2.0","id":"anything","method":"broadcast_tx_commit","params": {"tx": "YWFhcT1hYWFxCg=="}}' -H 'content-type:text/plain;' http://localhost:26657 @@ -556,7 +556,7 @@ func (s *Service) OrderSecret2(req *api.FulfillOrderSecretResponse) (string, err chainTX := &api.BlockChainTX{ Processor: api.TXOrderSecretResponse, SenderID: nodeID, - RecipientID: s.MasterFiduciaryNodeID(), + RecipientID: []string{s.MasterFiduciaryNodeID(), nodeID}, Payload: marshaledRequest, } //curl --data-binary '{"jsonrpc":"2.0","id":"anything","method":"broadcast_tx_commit","params": {"tx": "YWFhcT1hYWFxCg=="}}' -H 'content-type:text/plain;' http://localhost:26657 diff --git a/pkg/endpoints/endpoints.go b/pkg/endpoints/endpoints.go index d0c7b93..11c246b 100644 --- a/pkg/endpoints/endpoints.go +++ b/pkg/endpoints/endpoints.go @@ -89,24 +89,7 @@ func Endpoints(svc service.Service, corsAllow string, authorizer transport.Autho }, } principalEndpoints := transport.HTTPEndpoints{ - "Order": { - Path: "/" + apiVersion + "/order", - Method: http.MethodPost, - Endpoint: MakeOrderEndpoint(svc), - NewRequest: func() interface{} { return &api.OrderRequest{} }, - NewResponse: func() interface{} { return &api.OrderResponse{} }, - Options: transport.ServerOptions( - transport.SetCors(corsAllow), - transport.AuthorizeOIDC(authorizer, false), - ), - ErrStatus: transport.ErrorStatus{ - transport.ErrInvalidRequest: http.StatusUnprocessableEntity, - }, - // ErrStatus: transport.ErrorStatus{ - // transport.ErrInvalidRequest: http.StatusUnprocessableEntity, - // ErrCreatingOrderDoc: http.StatusInternalServerError, - // }, - }, + "Order1": { Path: "/" + apiVersion + "/order1", Method: http.MethodPost, @@ -162,20 +145,6 @@ func Endpoints(svc service.Service, corsAllow string, authorizer transport.Autho transport.ErrInvalidRequest: http.StatusUnprocessableEntity, }, }, - "OrderSecret": { - Path: "/" + apiVersion + "/order/secret", - Method: http.MethodPost, - Endpoint: MakeOrderSecretEndpoint(svc), - NewRequest: func() interface{} { return &api.OrderSecretRequest{} }, - NewResponse: func() interface{} { return &api.OrderSecretResponse{} }, - Options: transport.ServerOptions( - transport.SetCors(corsAllow), - transport.AuthorizeOIDC(authorizer, false), - ), - ErrStatus: transport.ErrorStatus{ - transport.ErrInvalidRequest: http.StatusUnprocessableEntity, - }, - }, "OrderSecret1": { Path: "/" + apiVersion + "/order/secret1", Method: http.MethodPost, @@ -355,20 +324,6 @@ func MakeGetOrderEndpoint(m service.Service) endpoint.Endpoint { } } -//MakeOrderEndpoint - -func MakeOrderEndpoint(m service.Service) endpoint.Endpoint { - return func(ctx context.Context, request interface{}) (response interface{}, err error) { - req, ok := request.(*api.OrderRequest) - if !ok { - return nil, transport.ErrInvalidRequest - } - if err := validateRequest(req); err != nil { - return "", err - } - return m.Order(req) - } -} - //MakeOrder1Endpoint - func MakeOrder1Endpoint(m service.Service) endpoint.Endpoint { return func(ctx context.Context, request interface{}) (response interface{}, err error) { @@ -397,20 +352,6 @@ func MakeOrder2Endpoint(m service.Service) endpoint.Endpoint { } } -//MakeOrderSecretEndpoint - -func MakeOrderSecretEndpoint(m service.Service) endpoint.Endpoint { - return func(ctx context.Context, request interface{}) (response interface{}, err error) { - req, ok := request.(*api.OrderSecretRequest) - if !ok { - return nil, transport.ErrInvalidRequest - } - if err := validateRequest(req); err != nil { - return "", err - } - return m.OrderSecret(req) - } -} - //MakeOrderSecret1Endpoint - func MakeOrderSecret1Endpoint(m service.Service) endpoint.Endpoint { return func(ctx context.Context, request interface{}) (response interface{}, err error) { diff --git a/pkg/service/service.go b/pkg/service/service.go index fafbff7..7dbb7c6 100644 --- a/pkg/service/service.go +++ b/pkg/service/service.go @@ -34,11 +34,9 @@ type Service interface { OrderList(req *api.OrderListRequest) (*api.OrderListResponse, error) //Order processing - OrderSecret(req *api.OrderSecretRequest) (*api.OrderSecretResponse, error) OrderSecret1(req *api.OrderSecretRequest) (string, error) OrderSecret2(req *api.FulfillOrderSecretResponse) (string, error) - Order(req *api.OrderRequest) (*api.OrderResponse, error) Order1(req *api.OrderRequest) (string, error) Order2(req *api.FulfillOrderResponse) (string, error) diff --git a/pkg/tendermint/cmd/cmd b/pkg/tendermint/cmd/cmd new file mode 100755 index 0000000..0e07c4f Binary files /dev/null and b/pkg/tendermint/cmd/cmd differ diff --git a/pkg/tendermint/cmd/tmget.go b/pkg/tendermint/cmd/tmget.go new file mode 100644 index 0000000..7971666 --- /dev/null +++ b/pkg/tendermint/cmd/tmget.go @@ -0,0 +1,110 @@ +package main + +import ( + "encoding/base64" + "encoding/hex" + "encoding/json" + "fmt" + "io/ioutil" + "log" + "net/http" + "os" + "time" + + "github.com/TylerBrock/colorjson" + "github.com/urfave/cli" +) + +func main() { + app := cli.NewApp() + app.Name = "tmget" + app.Version = "0.1.0" + app.Compiled = time.Now() + app.Authors = []cli.Author{ + cli.Author{ + Name: "Chris Morris", + Email: "[email protected]", + }, + } + app.Copyright = "(c) 2019 Chris Morris" + app.UsageText = `tmget tag search [url] +eg. tmget tag.recipient=Nzw3127EaxPiiZahOH592sGhPnCPaYkzOSqEk 127.0.0.1:5556 + tmget tx Nzw3127EaxPiiZahOH592sGhPnCPaYkzOSqEk` + + app.Usage = `retrieve and parse a transaction in the Qredo DT-A Format from a Tendermint Blockchain +Note tags are case sensistive +Qredo DT-A uses: + tag.recipient + tag.senderid + tag.reference + tx + +` + + app.ArgsUsage = "tx" + + app.Action = func(c *cli.Context) error { + tag := c.Args().Get(0) + lookup := "'" + c.Args().Get(1) + "'" + + url := c.Args().Get(2) + //curl "localhost:26657/tx_search?query=\"tag.name='matts'\"&prove=true" + if url == "" { + url = "localhost:26657" + } + if len(c.Args()) == 0 { + print(app.UsageText) + return nil + } + + fullUrl := "http://" + url + "/tx_search?query=\"" + tag + "=" + lookup + "\"" + print(fullUrl) + + resp, err := http.Get(fullUrl) + if err != nil { + // handle error + } + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + + txResponse, err := UnmarshalFetchTxResponse([]byte(body)) + + txs := txResponse.Result.Txs + for r1, v := range txs { + for r2, v1 := range v.TxResult.Events { + for r3, v2 := range v1.Attributes { + newkey, _ := base64.StdEncoding.DecodeString(v2.Key) + txResponse.Result.Txs[r1].TxResult.Events[r2].Attributes[r3].Key = string(newkey) + newval, _ := base64.StdEncoding.DecodeString(v2.Value) + txResponse.Result.Txs[r1].TxResult.Events[r2].Attributes[r3].Value = string(newval) + + if string(newkey) == "key" { + txResponse.Result.Txs[r1].TxResult.Events[r2].Attributes[r3].Value = hex.EncodeToString(newval) + } + } + } + } + + x, err := txResponse.Marshal() + + var obj map[string]interface{} + json.Unmarshal(x, &obj) + + //print(string(x)) + + // Make a custom formatter with indent set + f := colorjson.NewFormatter() + f.Indent = 4 + + // Marshall the Colorized JSON + s, _ := f.Marshal(obj) + fmt.Println(string(s)) + + return nil + } + + err := app.Run(os.Args) + if err != nil { + log.Fatal(err) + } +} diff --git a/pkg/tendermint/cmd/transactions.go b/pkg/tendermint/cmd/transactions.go new file mode 100644 index 0000000..2b68658 --- /dev/null +++ b/pkg/tendermint/cmd/transactions.go @@ -0,0 +1,60 @@ +package main + +import "encoding/json" + +func UnmarshalFetchTxResponse(data []byte) (FetchTxResponse, error) { + var r FetchTxResponse + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *FetchTxResponse) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +func UnmarshalAttribute(data []byte) (Attribute, error) { + var r Attribute + print("hello") + err := json.Unmarshal(data, &r) + return r, err +} + +type FetchTxResponse struct { + ID string `json:"id"` + Jsonrpc string `json:"jsonrpc"` + Result Result `json:"result"` +} + +type Result struct { + TotalCount string `json:"total_count"` + Txs []Tx `json:"txs"` +} + +type Tx struct { + Hash string `json:"hash"` + Height string `json:"height"` + Index int64 `json:"index"` + Tx string `json:"tx"` + TxResult TxResult `json:"tx_result"` +} + +type TxResult struct { + Code int64 `json:"code"` + Codespace string `json:"codespace"` + Data interface{} `json:"data"` + Events []Event `json:"events"` + GasUsed string `json:"gasUsed"` + GasWanted string `json:"gasWanted"` + Info string `json:"info"` + Log string `json:"log"` +} + +type Event struct { + Attributes []Attribute `json:"attributes"` + Type string `json:"type"` +} + +type Attribute struct { + Key string `json:"key"` + Value string `json:"value"` +} diff --git a/pkg/tendermint/config.go b/pkg/tendermint/config.go index a113a5f..6d20001 100644 --- a/pkg/tendermint/config.go +++ b/pkg/tendermint/config.go @@ -1,7 +1,5 @@ - package tendermint - const ( - node = "3.248.201.10:26657" -) \ No newline at end of file + node = "127.0.0.1:26657" +) diff --git a/pkg/tendermint/tendermint.go b/pkg/tendermint/tendermint.go index cd4447f..3d34f36 100644 --- a/pkg/tendermint/tendermint.go +++ b/pkg/tendermint/tendermint.go @@ -40,14 +40,19 @@ func QueryChain(index string) (string, string) { } //PostToChain - send TX data to the Blockchain -func PostToChain(payload *api.BlockChainTX, method string) (string, error) { - serializedTX, _ := json.Marshal(payload) - TXID := sha256.Sum256(serializedTX) +func PostToChain(tx *api.BlockChainTX, method string) (string, error) { + //Create TX Hash + + tx.RecipientID = unique(tx.RecipientID) + + TXID := sha256.Sum256(tx.Payload) TXIDhex := hex.EncodeToString(TXID[:]) - fullTx := fmt.Sprintf("%s=%s", TXIDhex, string(serializedTX)) + tx.TXhash = TXID[:] + + //serialize the whole transaction + serializedTX, _ := json.Marshal(tx) + base64EncodedTX := base64.StdEncoding.EncodeToString(serializedTX) - //fmt.Printf(" **** %s Block TX: %s\n", method, TXIDhex) - base64EncodedTX := base64.StdEncoding.EncodeToString([]byte(fullTx)) body := strings.NewReader("{\"jsonrpc\":\"2.0\",\"id\":\"anything\",\"method\":\"broadcast_tx_commit\",\"params\": {\"tx\": \"" + base64EncodedTX + "\"}}") req, err := http.NewRequest("POST", "http://"+node+"", body) if err != nil { @@ -62,6 +67,7 @@ func PostToChain(payload *api.BlockChainTX, method string) (string, error) { return "", err } defer resp.Body.Close() + fmt.Printf("POST TO CHAIN: METHOD:%s CALLS:%s - TXID:%s", method, tx.Processor, TXIDhex) return TXIDhex, nil } @@ -171,3 +177,15 @@ func ProcessTransactionID(txid string) { panic(err) } } + +func unique(stringSlice []string) []string { + keys := make(map[string]bool) + list := []string{} + for _, entry := range stringSlice { + if _, value := keys[entry]; !value { + keys[entry] = true + list = append(list, entry) + } + } + return list +} diff --git a/pkg/tendermint/websockets.go b/pkg/tendermint/websockets.go index ddc9722..145374e 100644 --- a/pkg/tendermint/websockets.go +++ b/pkg/tendermint/websockets.go @@ -2,17 +2,20 @@ package tendermint import ( "context" + "encoding/hex" + "encoding/json" "os" "os/signal" "syscall" "github.com/apache/incubator-milagro-dta/libs/logger" + "github.com/apache/incubator-milagro-dta/pkg/api" tmclient "github.com/tendermint/tendermint/rpc/client" tmtypes "github.com/tendermint/tendermint/types" ) //Subscribe - Connect to the Tendermint websocket to collect events -func Subscribe(logger *logger.Logger) error { +func Subscribe(logger *logger.Logger, nodeID string) error { //tmlogger := log2.NewTMLogger(log.NewSyncWriter(os.Stdout)) @@ -25,7 +28,9 @@ func Subscribe(logger *logger.Logger) error { } defer client.Stop() - query := "tm.event = 'Tx'" + query := "tag.recipient='" + nodeID + "'" + //query := "tm.event = 'Tx'" + out, err := client.Subscribe(context.Background(), "test", query, 1000) if err != nil { logger.Info("Failed to subscribe to query %s %s", query, err) @@ -41,16 +46,35 @@ func Subscribe(logger *logger.Logger) error { select { case result := <-out: tx := result.Data.(tmtypes.EventDataTx).Tx - blockchainTX, txid, err := decodeTX(string(tx)) - logger.Info("Incoming TX %s", txid) + payload := api.BlockChainTX{} + err := json.Unmarshal(tx, &payload) if err != nil { - logger.Info("Invalid Incoming Transaction %s - %s:", err, string(tx)) + logger.Info("******** Invalid TX - ignored") + break + } + + //check is receipient + isRecipient := false + for _, v := range payload.RecipientID { + if v == nodeID { + isRecipient = true + break + } + } + if isRecipient == false { + logger.Info("******** Invalid Recipient - why are we receiving this TX?") + break } - if blockchainTX.Processor == "NONE" { - DumpTX(blockchainTX) + + //blockchainTX, txid, err := decodeTX(string(tx)) + TXIDhex := hex.EncodeToString(payload.TXhash[:]) + logger.Info("Incoming TXHash:%s . Processor:%s", TXIDhex, payload.Processor) + + if payload.Processor == "NONE" { + DumpTX(&payload) } else { - callNextTX(blockchainTX) + callNextTX(&payload) } //print(blockchainTX)
