You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@milagro.apache.org by cm...@apache.org on 2019/09/25 13:03:46 UTC
[incubator-milagro-dta] 01/11: Split Order to Async, Add websockets
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 b9f63d36990400fbb4d40b1d3c413af3d1f71d08
Author: Christopher Morris <ch...@morris.net>
AuthorDate: Thu Sep 5 20:37:16 2019 +0100
Split Order to Async, Add websockets
---
cmd/service/main.go | 41 ++++++++++
go.mod | 7 +-
go.sum | 40 ++++++++++
pkg/api/proto.go | 16 ++++
pkg/defaultservice/fulfill.go | 36 ++++++---
pkg/defaultservice/order.go | 158 ++++++++++++++++++++++++++++++++++++++
pkg/endpoints/endpoints.go | 57 ++++++++++++++
pkg/service/service.go | 6 +-
pkg/tendermint/json.go | 35 +++++++++
pkg/tendermint/tendermint.go | 144 ++++++++++++++++++++++++++++++++++
pkg/tendermint/tendermint_test.go | 61 +++++++++++++++
11 files changed, 587 insertions(+), 14 deletions(-)
diff --git a/cmd/service/main.go b/cmd/service/main.go
index 4a289f5..e177b38 100644
--- a/cmd/service/main.go
+++ b/cmd/service/main.go
@@ -21,6 +21,7 @@ Package main - handles config, initialisation and starts the service daemon
package main
import (
+ "context"
"crypto/rand"
"fmt"
"net/http"
@@ -42,6 +43,11 @@ import (
"github.com/pkg/errors"
stdprometheus "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
+
+ log2 "github.com/tendermint/tendermint/libs/log"
+ tmclient "github.com/tendermint/tendermint/rpc/client"
+ tmtypes "github.com/tendermint/tendermint/types"
+ "github.com/tendermint/tmlibs/log"
)
func initConfig(args []string) error {
@@ -278,6 +284,7 @@ func initDataStore(ds string) (*datastore.Store, error) {
func main() {
var err error
+ go listenTendermint()
cmd, args := parseCommand()
switch cmd {
default:
@@ -293,3 +300,37 @@ func main() {
os.Exit(1)
}
}
+
+func connectTendermintWS() {
+
+ logger := log2.NewTMLogger(log.NewSyncWriter(os.Stdout))
+
+ client := tmclient.NewHTTP("tcp://localhost:26657", "/websocket")
+ client.SetLogger(logger)
+ err := client.Start()
+ if err != nil {
+ logger.Error("Failed to start a client", "err", err)
+ os.Exit(1)
+ }
+ defer client.Stop()
+
+ query := "tm.event = 'Tx'"
+ out, err := client.Subscribe(context.Background(), "test", query, 1000)
+ if err != nil {
+ logger.Error("Failed to subscribe to query", "err", err, "query", query)
+ os.Exit(1)
+ }
+
+ quit := make(chan os.Signal, 1)
+ signal.Notify(quit, os.Interrupt, syscall.SIGTERM)
+
+ for {
+ select {
+ case result := <-out:
+ logger.Info("got tx",
+ "index", result.Data.(tmtypes.EventDataTx).Index)
+ case <-quit:
+ os.Exit(0)
+ }
+ }
+}
diff --git a/go.mod b/go.mod
index c7b5ff0..b0e50bd 100644
--- a/go.mod
+++ b/go.mod
@@ -1,7 +1,6 @@
module github.com/apache/incubator-milagro-dta
require (
- github.com/VividCortex/gohistogram v1.0.0 // indirect
github.com/btcsuite/btcd v0.0.0-20190427004231-96897255fd17
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d
github.com/coreos/go-oidc v2.0.0+incompatible
@@ -11,7 +10,7 @@ require (
github.com/go-test/deep v1.0.2
github.com/go-yaml/yaml v2.1.0+incompatible
github.com/gogo/protobuf v1.2.1
- github.com/golang/protobuf v1.3.1
+ github.com/golang/protobuf v1.3.2
github.com/google/uuid v1.1.1
github.com/gorilla/mux v1.7.3
github.com/ipfs/go-datastore v0.0.5
@@ -30,9 +29,11 @@ require (
github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect
github.com/prometheus/client_golang v0.9.3
github.com/stretchr/testify v1.3.0
+ github.com/tendermint/tendermint v0.32.3
+ github.com/tendermint/tmlibs v0.9.0
github.com/tyler-smith/go-bip39 v1.0.0
go.etcd.io/bbolt v1.3.3
- google.golang.org/appengine v1.4.0 // indirect
+ golang.org/x/xerrors v0.0.0-20190528162220-0421b64034aa
gopkg.in/go-playground/assert.v1 v1.2.1 // indirect
gopkg.in/go-playground/validator.v9 v9.29.1
gopkg.in/square/go-jose.v2 v2.3.1 // indirect
diff --git a/go.sum b/go.sum
index 95517ec..dccddba 100644
--- a/go.sum
+++ b/go.sum
@@ -25,10 +25,12 @@ github.com/bifurcation/mint v0.0.0-20181105073638-824af6541065/go.mod h1:zVt7zX3
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/bren2010/proquint v0.0.0-20160323162903-38337c27106d h1:QgeLLoPD3kRVmeu/1al9iIpIANMi9O1zXFm8BnYGCJg=
github.com/bren2010/proquint v0.0.0-20160323162903-38337c27106d/go.mod h1:Jbj8eKecMNwf0KFI75skSUZqMB4UCRcndUScVBTWyUI=
+github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0=
github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8=
github.com/btcsuite/btcd v0.0.0-20190427004231-96897255fd17 h1:m0N5Vg5nP3zEz8TREZpwX3gt4Biw3/8fbIf4A3hO96g=
github.com/btcsuite/btcd v0.0.0-20190427004231-96897255fd17/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI=
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
+github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d h1:yJzD/yFppdVCf6ApMkVy8cUxV0XrxdP9rVf6D87/Mng=
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
@@ -67,14 +69,17 @@ github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUn
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
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/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5/go.mod h1:JpoxHjuQauoxiFMl1ie8Xc/7TfLuMZ5eOCONd1sUBHg=
github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
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.2.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98=
github.com/go-critic/go-critic v0.0.0-20181204210945-c3db6069acc5/go.mod h1:Jc75BZJv2dNy7opKH6bF29VveDQHfGZ6Asn/3phBesg=
github.com/go-critic/go-critic v0.0.0-20181204210945-ee9bf5809ead/go.mod h1:3MzXZKJdeXqdU9cj+rvZdNiN7SZ8V9OjybF8loZDmHU=
+github.com/go-kit/kit v0.6.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
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=
github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM=
@@ -111,8 +116,12 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0=
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
+github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4=
github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk=
github.com/golangci/errcheck v0.0.0-20181003203344-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0=
@@ -131,12 +140,14 @@ github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bz
github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4=
github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gxed/go-shellwords v1.0.3/go.mod h1:N7paucT91ByIjmVJHhvoarjoQnmsi3Jd3vH7VqgtMxQ=
@@ -280,6 +291,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/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=
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
@@ -546,6 +558,7 @@ github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDf
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.0.0-20181020173914-7e9e6cabbd39/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.4.0 h1:7etb9YClo3a6HjLzfl6rIQaU+FDfi0VSX39io3aQ+DM=
@@ -556,7 +569,10 @@ github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7z
github.com/prometheus/procfs v0.0.0-20190519111021-9935e8e0588d h1:Z5QMcUKnQw7ouB1wDuyZM6TL/rm+brJcNk6Ai8ut3zM=
github.com/prometheus/procfs v0.0.0-20190519111021-9935e8e0588d/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
+github.com/rcrowley/go-metrics v0.0.0-20180503174638-e2704e165165 h1:nkcn14uNmFEuGCb2mBZbBb24RdNRL08b/wb+xBOYpuk=
+github.com/rcrowley/go-metrics v0.0.0-20180503174638-e2704e165165/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI=
github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
@@ -568,6 +584,7 @@ github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjM
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa/go.mod h1:2RVY1rIf+2J2o/IM9+vPq9RzmHDSseB7FoXiSNIUsoU=
+github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4=
github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE=
github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a h1:/eS3yfGjQKG+9kayBkj0ip1BGhq6zJ3eaVksphxAaek=
github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0=
@@ -580,12 +597,14 @@ github.com/spf13/afero v1.1.0/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v0.0.1/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.2/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
github.com/spf13/jwalterweatherman v0.0.0-20180109140146-7c0cea34c8ec/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/viper v1.0.0/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM=
github.com/spf13/viper v1.0.2/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -595,6 +614,16 @@ github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
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=
+github.com/syndtr/goleveldb v1.0.1-0.20190318030020-c3a204f8e965/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA=
+github.com/tendermint/go-amino v0.14.1 h1:o2WudxNfdLNBwMyl2dqOJxiro5rfrEaU0Ugs6offJMk=
+github.com/tendermint/go-amino v0.14.1/go.mod h1:i/UKE5Uocn+argJJBb12qTZsCDBcAYMbR92AaJVmKso=
+github.com/tendermint/tendermint v0.32.3 h1:GEnWpGQ795h5oTFNbfBLsY0LW/CW2j6p6HtiYNfxsgg=
+github.com/tendermint/tendermint v0.32.3/go.mod h1:ZK2c29jl1QRYznIRyRWRDsmm1yvtPzBRT00x4t1JToY=
+github.com/tendermint/tm-db v0.1.1 h1:G3Xezy3sOk9+ekhjZ/kjArYIs1SmwV+1OUgNkj7RgV0=
+github.com/tendermint/tm-db v0.1.1/go.mod h1:0cPKWu2Mou3IlxecH+MEUSYc1Ch537alLe6CpFrKzgw=
+github.com/tendermint/tmlibs v0.9.0 h1:3aU/D2v3aecqpODOuBXCfi950bHTefD5Pps5X3XuJDc=
+github.com/tendermint/tmlibs v0.9.0/go.mod h1:4L0tAKpLTioy14VnmbXYTLIJN0pCMiehxDMdN6zZfM8=
github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g=
github.com/tyler-smith/go-bip39 v1.0.0 h1:FOHg9gaQLeBBRbHE/QrTLfEiBHy5pQ/yXzf9JG5pYFM=
github.com/tyler-smith/go-bip39 v1.0.0/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs=
@@ -665,6 +694,7 @@ golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/net v0.0.0-20170915142106-8351a756f30f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180524181706-dfa909b99c79/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -683,6 +713,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190522135303-fa69b94a3b58/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -725,16 +757,23 @@ 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-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/xerrors v0.0.0-20190212162355-a5947ffaace3/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522 h1:bhOzK9QyoD0ogCnFro1m2mz41+Ib0oOhfJnBp5MR4K4=
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20190528162220-0421b64034aa h1:e+qzrOCx1B2Zjbv6p2uI91VZhrmjZD0Ck57LUzO5L8k=
+golang.org/x/xerrors v0.0.0-20190528162220-0421b64034aa/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.22.0 h1:J0UbZOIrCAl+fpTOf8YLs4dJo8L/owV4LYVtAXQoPkw=
+google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -755,6 +794,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gotest.tools v2.1.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
gotest.tools/gotestsum v0.3.4/go.mod h1:Mnf3e5FUzXbkCfynWBGOwLssY7gTQgCHObK9tMpAriY=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc=
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=
mvdan.cc/unparam v0.0.0-20190124213536-fbb59629db34/go.mod h1:H6SUd1XjIs+qQCyskXg5OFSrilMRUkD8ePJpHKDPaeY=
diff --git a/pkg/api/proto.go b/pkg/api/proto.go
index 866911d..6232d21 100644
--- a/pkg/api/proto.go
+++ b/pkg/api/proto.go
@@ -27,6 +27,22 @@ import (
"time"
)
+const (
+ //OrderIn Types for the Blockchain
+ TXOrderRequest = "v1/order1"
+ TXFulfillRequest = "v1/fulfill/order"
+ TXFulfillResponse = "v1/order2"
+ TXOrderResponse = "NONE"
+)
+
+//BlockChainTX - struct for on chain req/resp
+type BlockChainTX struct {
+ Processor string
+ SenderID string
+ RecipientID string
+ Payload []byte
+}
+
//CreateIdentityRequest -
type CreateIdentityRequest struct {
Name string `json:"name,omitempty" validate:"required,alphanum"`
diff --git a/pkg/defaultservice/fulfill.go b/pkg/defaultservice/fulfill.go
index a45eacb..e3b54d6 100644
--- a/pkg/defaultservice/fulfill.go
+++ b/pkg/defaultservice/fulfill.go
@@ -18,58 +18,74 @@
package defaultservice
import (
+ "encoding/json"
+
"github.com/apache/incubator-milagro-dta/libs/cryptowallet"
"github.com/apache/incubator-milagro-dta/pkg/api"
"github.com/apache/incubator-milagro-dta/pkg/common"
+ "github.com/apache/incubator-milagro-dta/pkg/tendermint"
)
// FulfillOrder -
-func (s *Service) FulfillOrder(req *api.FulfillOrderRequest) (*api.FulfillOrderResponse, error) {
+func (s *Service) FulfillOrder(req *api.FulfillOrderRequest) (string, error) {
orderPart1CID := req.OrderPart1CID
nodeID := s.NodeID()
remoteIDDocCID := req.DocumentCID
_, _, _, sikeSK, err := common.RetrieveIdentitySecrets(s.Store, nodeID)
if err != nil {
- return nil, err
+ return "", err
}
remoteIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, remoteIDDocCID)
if err != nil {
- return nil, err
+ return "", err
}
//Retrieve the order from IPFS
order, err := common.RetrieveOrderFromIPFS(s.Ipfs, orderPart1CID, sikeSK, nodeID, remoteIDDoc.BLSPublicKey)
if err != nil {
- return nil, err
+ return "", err
}
recipientList, err := common.BuildRecipientList(s.Ipfs, nodeID, nodeID)
if err != nil {
- return nil, err
+ return "", err
}
//Generate the secret and store for later redemption
seed, err := common.MakeRandomSeedAndStore(s.Store, s.Rng, order.Reference)
if err != nil {
- return nil, err
+ return "", err
}
//Generate the Public Key (Commitment) from the Seed/Secret
commitmentPublicKey, err := cryptowallet.RedeemPublicKey(seed)
if err != nil {
- return nil, err
+ return "", err
}
//Create an order response in IPFS
orderPart2CID, err := common.CreateAndStoreOrderPart2(s.Ipfs, s.Store, order, orderPart1CID, commitmentPublicKey, nodeID, recipientList)
if err != nil {
- return nil, err
+ return "", err
}
- return &api.FulfillOrderResponse{
+ response := &api.FulfillOrderResponse{
OrderPart2CID: orderPart2CID,
- }, nil
+ }
+
+ marshaledRequest, _ := json.Marshal(response)
+
+ //Write the requests to the chain
+ chainTX := &api.BlockChainTX{
+ Processor: api.TXFulfillResponse,
+ SenderID: nodeID,
+ RecipientID: 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
+ return tendermint.PostToChain(chainTX, "FulfillOrder")
+
}
// FulfillOrderSecret -
diff --git a/pkg/defaultservice/order.go b/pkg/defaultservice/order.go
index 4326ba0..46dfb16 100644
--- a/pkg/defaultservice/order.go
+++ b/pkg/defaultservice/order.go
@@ -25,6 +25,7 @@ import (
"github.com/apache/incubator-milagro-dta/libs/documents"
"github.com/apache/incubator-milagro-dta/pkg/api"
"github.com/apache/incubator-milagro-dta/pkg/common"
+ "github.com/apache/incubator-milagro-dta/pkg/tendermint"
"github.com/pkg/errors"
)
@@ -149,6 +150,7 @@ func (s *Service) Order(req *api.OrderRequest) (*api.OrderResponse, error) {
OrderPart1CID: orderPart1CID,
Extension: fulfillExtension,
}
+
response, err := s.MasterFiduciaryServer.FulfillOrder(request)
if err != nil {
return nil, errors.Wrap(err, "Contacting Fiduciary")
@@ -279,3 +281,159 @@ func (s *Service) OrderSecret(req *api.OrderSecretRequest) (*api.OrderSecretResp
Extension: ext,
}, nil
}
+
+// Order -
+func (s *Service) Order1(req *api.OrderRequest) (string, error) {
+ if err := s.Plugin.ValidateOrderRequest(req); err != nil {
+ return "", err
+ }
+
+ //Initialise values from Request object
+ beneficiaryIDDocumentCID := req.BeneficiaryIDDocumentCID
+ iDDocID := s.NodeID()
+ recipientList, err := common.BuildRecipientList(s.Ipfs, iDDocID, s.MasterFiduciaryNodeID())
+ if err != nil {
+ return "", err
+ }
+
+ // remoteIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, s.MasterFiduciaryNodeID())
+ // if err != nil {
+ // return "", err
+ // }
+
+ //Create Order
+ order, err := common.CreateNewDepositOrder(beneficiaryIDDocumentCID, iDDocID)
+ if err != nil {
+ return "", err
+ }
+
+ fulfillExtension, err := s.Plugin.PrepareOrderPart1(order, req.Extension)
+ if err != nil {
+ return "", err
+ }
+
+ //Write Order to IPFS
+ orderPart1CID, err := common.WriteOrderToIPFS(iDDocID, s.Ipfs, s.Store, iDDocID, order, recipientList)
+ if err != nil {
+ return "", err
+ }
+
+ //Fullfill the order on the remote Server
+ request := &api.FulfillOrderRequest{
+ DocumentCID: iDDocID,
+ OrderPart1CID: orderPart1CID,
+ Extension: fulfillExtension,
+ }
+
+ marshaledRequest, _ := json.Marshal(request)
+
+ //Write the requests to the chain
+ chainTX := &api.BlockChainTX{
+ Processor: api.TXFulfillRequest,
+ SenderID: iDDocID,
+ RecipientID: 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
+
+ return tendermint.PostToChain(chainTX, "Order1")
+
+}
+
+// Order -
+func (s *Service) Order2(req *api.FulfillOrderResponse) (string, error) {
+ // if err := s.Plugin.ValidateOrderRequest(req); err != nil {
+ // return "", err
+ // }
+
+ // //Initialise values from Request object
+ // beneficiaryIDDocumentCID := req.BeneficiaryIDDocumentCID
+ iDDocID := s.NodeID()
+ // recipientList, err := common.BuildRecipientList(s.Ipfs, iDDocID, s.MasterFiduciaryNodeID())
+ // if err != nil {
+ // return "", err
+ // }
+
+ remoteIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, s.MasterFiduciaryNodeID())
+ if err != nil {
+ return "", err
+ }
+
+ // //Create Order
+ // order, err := common.CreateNewDepositOrder(beneficiaryIDDocumentCID, iDDocID)
+ // if err != nil {
+ // return "", err
+ // }
+
+ // fulfillExtension, err := s.Plugin.PrepareOrderPart1(order, req.Extension)
+ // if err != nil {
+ // return "", err
+ // }
+
+ // //Write Order to IPFS
+ // orderPart1CID, err := common.WriteOrderToIPFS(iDDocID, s.Ipfs, s.Store, iDDocID, order, recipientList)
+ // if err != nil {
+ // return "", err
+ // }
+
+ // //Fullfill the order on the remote Server
+ // request := &api.FulfillOrderRequest{
+ // DocumentCID: iDDocID,
+ // OrderPart1CID: orderPart1CID,
+ // Extension: fulfillExtension,
+ // }
+
+ // marshaledRequest, _ := json.Marshal(request)
+
+ // //Write the requests to the chain
+ // chainTX := &api.BlockChainTX{
+ // Type: api.TXFullfullRequest,
+ // SenderID: iDDocID,
+ // RecipientID: 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
+
+ // tendermint.PostToChain(chainTX)
+
+ // response, err := s.MasterFiduciaryServer.FulfillOrder(request)
+ // if err != nil {
+ // return "", errors.Wrap(err, "Contacting Fiduciary")
+ // }
+
+ //Get the updated order out of IPFS
+ _, _, _, sikeSK, err := common.RetrieveIdentitySecrets(s.Store, iDDocID)
+ if err != nil {
+ return "", err
+ }
+ updatedOrder, err := common.RetrieveOrderFromIPFS(s.Ipfs, req.OrderPart2CID, sikeSK, iDDocID, remoteIDDoc.BLSPublicKey)
+ if err != nil {
+ return "", errors.Wrap(err, "Fail to retrieve Order from IPFS")
+ }
+
+ commitment, extension, err := s.Plugin.PrepareOrderResponse(updatedOrder, req.Extension, req.Extension)
+ if err != nil {
+ return "", errors.Wrap(err, "Generating Final Public Key")
+ }
+
+ response := &api.OrderResponse{
+ OrderReference: updatedOrder.Reference,
+ Commitment: commitment,
+ CreatedAt: time.Now().Unix(),
+ Extension: extension,
+ }
+
+ marshaledRequest, _ := json.Marshal(response)
+
+ //Write the requests to the chain
+ chainTX := &api.BlockChainTX{
+ Processor: api.TXOrderResponse,
+ SenderID: iDDocID,
+ RecipientID: 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
+
+ return tendermint.PostToChain(chainTX, "Order2")
+
+}
diff --git a/pkg/endpoints/endpoints.go b/pkg/endpoints/endpoints.go
index ae66d68..f42e01c 100644
--- a/pkg/endpoints/endpoints.go
+++ b/pkg/endpoints/endpoints.go
@@ -107,6 +107,35 @@ func Endpoints(svc service.Service, corsAllow string, authorizer transport.Autho
// ErrCreatingOrderDoc: http.StatusInternalServerError,
// },
},
+ "Order1": {
+ Path: "/" + apiVersion + "/order1",
+ Method: http.MethodPost,
+ Endpoint: MakeOrder1Endpoint(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,
+ },
+ },
+ "Order2": {
+ Path: "/" + apiVersion + "/order2",
+ Method: http.MethodPost,
+ Endpoint: MakeOrder2Endpoint(svc),
+ NewRequest: func() interface{} { return &api.FulfillOrderResponse{} },
+ NewResponse: func() interface{} { return &api.OrderResponse{} },
+ Options: transport.ServerOptions(
+ transport.SetCors(corsAllow),
+ transport.AuthorizeOIDC(authorizer, false),
+ ),
+ ErrStatus: transport.ErrorStatus{
+ transport.ErrInvalidRequest: http.StatusUnprocessableEntity,
+ },
+ },
+
"GetOrder": {
Path: "/" + apiVersion + "/order/{OrderReference}",
Method: http.MethodGet,
@@ -309,6 +338,34 @@ func MakeOrderEndpoint(m service.Service) endpoint.Endpoint {
}
}
+//MakeOrderEndpoint -
+func MakeOrder1Endpoint(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.Order1(req)
+ }
+}
+
+//MakeOrderEndpoint -
+func MakeOrder2Endpoint(m service.Service) endpoint.Endpoint {
+ return func(ctx context.Context, request interface{}) (response interface{}, err error) {
+ req, ok := request.(*api.FulfillOrderResponse)
+ if !ok {
+ return nil, transport.ErrInvalidRequest
+ }
+ if err := validateRequest(req); err != nil {
+ return "", err
+ }
+ return m.Order2(req)
+ }
+}
+
//MakeOrderSecretEndpoint -
func MakeOrderSecretEndpoint(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 9ec4093..d53e5f2 100644
--- a/pkg/service/service.go
+++ b/pkg/service/service.go
@@ -37,8 +37,12 @@ type Service interface {
OrderSecret(req *api.OrderSecretRequest) (*api.OrderSecretResponse, error)
Order(req *api.OrderRequest) (*api.OrderResponse, error)
+ Order1(req *api.OrderRequest) (string, error)
+ Order2(req *api.FulfillOrderResponse) (string, error)
+
//Fullfill processing
- FulfillOrder(req *api.FulfillOrderRequest) (*api.FulfillOrderResponse, error)
+ FulfillOrder(req *api.FulfillOrderRequest) (string, error)
+
FulfillOrderSecret(req *api.FulfillOrderSecretRequest) (*api.FulfillOrderSecretResponse, error)
NodeID() string
diff --git a/pkg/tendermint/json.go b/pkg/tendermint/json.go
new file mode 100644
index 0000000..8270db5
--- /dev/null
+++ b/pkg/tendermint/json.go
@@ -0,0 +1,35 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse and unparse this JSON data, add this code to your project and do:
+//
+// fetchTxResponse, err := UnmarshalFetchTxResponse(bytes)
+// bytes, err = fetchTxResponse.Marshal()
+
+package tendermint
+
+import "encoding/json"
+
+func UnmarshalChainQuery(data []byte) (ChainQuery, error) {
+ var r ChainQuery
+ err := json.Unmarshal(data, &r)
+ return r, err
+}
+
+func (r *ChainQuery) Marshal() ([]byte, error) {
+ return json.Marshal(r)
+}
+
+type ChainQuery struct {
+ Jsonrpc string `json:"jsonrpc"`
+ ID string `json:"id"`
+ Result Result `json:"result"`
+}
+
+type Result struct {
+ Response Response `json:"response"`
+}
+
+type Response struct {
+ Log string `json:"log"`
+ Key string `json:"key"`
+ Value string `json:"value"`
+}
diff --git a/pkg/tendermint/tendermint.go b/pkg/tendermint/tendermint.go
new file mode 100644
index 0000000..286f1da
--- /dev/null
+++ b/pkg/tendermint/tendermint.go
@@ -0,0 +1,144 @@
+package tendermint
+
+import (
+ "bufio"
+ "crypto/sha256"
+ "encoding/base64"
+ "encoding/hex"
+ "encoding/json"
+ "fmt"
+ "net/http"
+ "os"
+ "strings"
+
+ "github.com/apache/incubator-milagro-dta/pkg/api"
+)
+
+//QueryChain the blockchain for an index
+func QueryChain(index string) (string, string) {
+ url := "http://localhost:26657/abci_query?data=\"" + index + "\""
+ resp, err := http.Get(url)
+ if err != nil {
+ // handle err
+ }
+ defer resp.Body.Close()
+ scanner := bufio.NewScanner(resp.Body)
+ scanner.Split(bufio.ScanBytes)
+ t := ""
+ for scanner.Scan() {
+ t += scanner.Text()
+ ///fmt.Print(scanner.Text())
+ }
+
+ res, _ := UnmarshalChainQuery([]byte(t))
+
+ val := res.Result.Response.Value
+ decodeVal, _ := base64.StdEncoding.DecodeString(val)
+ return string(decodeVal), val
+}
+
+//PostToChain - send TX data to the Blockchain
+func PostToChain(payload *api.BlockChainTX, method string) (string, error) {
+ serializedTX, _ := json.Marshal(payload)
+ TXID := sha256.Sum256(serializedTX)
+ TXIDhex := hex.EncodeToString(TXID[:])
+ fullTx := fmt.Sprintf("%s=%s", TXIDhex, string(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://localhost:26657", body)
+ if err != nil {
+ print("Error posting to Blockchain")
+ return "", err
+ }
+ req.Header.Set("Content-Type", "text/plain;")
+
+ resp, err := http.DefaultClient.Do(req)
+ if err != nil {
+ print("Error posting to Blockchain")
+ return "", err
+ }
+ defer resp.Body.Close()
+ return TXIDhex, nil
+}
+
+//HandleChainTX -
+func HandleChainTX(myID string, tx string) error {
+ blockChainTX, err := decodeChainTX(tx)
+ if err != nil {
+ return err
+ }
+
+ if blockChainTX.Processor == "NONE" {
+ print("Process Complete")
+ print(string(blockChainTX.Payload))
+ return nil
+ }
+ err = callNextTX(blockChainTX)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+//DecodeChainTX - Decode the On Chain TX into a BlockChainTX object
+func decodeChainTX(payload string) (*api.BlockChainTX, error) {
+ base64DecodedTX, _ := base64.StdEncoding.DecodeString(payload)
+ tx := &api.BlockChainTX{}
+
+ err := json.Unmarshal(base64DecodedTX, tx)
+ if err != nil {
+ return &api.BlockChainTX{}, err
+ }
+ return tx, nil
+}
+
+func callNextTX(tx *api.BlockChainTX) error {
+ // recipient := tx.RecipientID
+ // sender := tx.SenderID
+ //payloadJSON := tx.Payload
+ payloadString := string(tx.Payload)
+
+ desintationURL := fmt.Sprintf("http://localhost:5556/%s", tx.Processor)
+
+ body := strings.NewReader(payloadString)
+ req, err := http.NewRequest("POST", os.ExpandEnv(desintationURL), body)
+ if err != nil {
+ return err
+ }
+ req.Header.Set("Accept", "*/*")
+ req.Header.Set("Content-Type", "application/json")
+
+ resp, err := http.DefaultClient.Do(req)
+ if err != nil {
+ return err
+ }
+ defer resp.Body.Close()
+ scanner := bufio.NewScanner(resp.Body)
+ scanner.Split(bufio.ScanBytes)
+ t := ""
+ for scanner.Scan() {
+ t += scanner.Text()
+ ///fmt.Print(scanner.Text())
+ }
+ print(t)
+
+ return nil
+}
+
+func DumpTXID(txid string) {
+ value, raw := QueryChain(txid)
+ println(value)
+ bc, _ := decodeChainTX(raw)
+ println(string(bc.Payload))
+ println()
+}
+
+func ProcessTransactionID(txid string) {
+ _, payload := QueryChain((txid))
+ err := HandleChainTX("", payload)
+ if err != nil {
+ panic(err)
+ }
+}
diff --git a/pkg/tendermint/tendermint_test.go b/pkg/tendermint/tendermint_test.go
new file mode 100644
index 0000000..43dec6b
--- /dev/null
+++ b/pkg/tendermint/tendermint_test.go
@@ -0,0 +1,61 @@
+package tendermint
+
+import "testing"
+
+var (
+ nodeID = "QmT4y4MtV5mvPHkFjfUQYQ7h1WvAagMy2GTJCn2bF8DQb7"
+)
+
+func Test_Order1(t *testing.T) {
+ a := "eyJQcm9jZXNzb3IiOiJ2MS9mdWxmaWxsL29yZGVyIiwiU2VuZGVySUQiOiJRbVQ0eTRNdFY1bXZQSGtGamZVUVlRN2gxV3ZBYWdNeTJHVEpDbjJiRjhEUWI3IiwiUmVjaXBpZW50SUQiOiJRbVQ0eTRNdFY1bXZQSGtGamZVUVlRN2gxV3ZBYWdNeTJHVEpDbjJiRjhEUWI3IiwiUGF5bG9hZCI6ImV5SnZjbVJsY2xCaGNuUXhRMGxFSWpvaVVXMVpVRU5xVEVGME1tbzVVbWhxU0U1TVkwRnVObEF5WTJseVJHWjZTRlpFWTBwMFkzbGtUVFZ5VWxoM1V5SXNJbVJ2WTNWdFpXNTBRMGxFSWpvaVVXMVVOSGswVFhSV05XMTJVRWhyUm1wbVZWRlpVVGRvTVZkMlFXRm5UWGt5UjFSS1EyNHlZa1k0UkZGaU55SjkifQ=="
+ err := HandleChainTX(nodeID, a)
+ if err != nil {
+ panic(err)
+ }
+}
+
+func Test_FullFill(t *testing.T) {
+ a := "eyJQcm9jZXNzb3IiOiJPUkRFUl9SRVNQT05TRSIsIlNlbmRlcklEIjoiUW1UNHk0TXRWNW12UEhrRmpmVVFZUTdoMVd2QWFnTXkyR1RKQ24yYkY4RFFiNyIsIlJlY2lwaWVudElEIjoiUW1UNHk0TXRWNW12UEhrRmpmVVFZUTdoMVd2QWFnTXkyR1RKQ24yYkY4RFFiNyIsIlBheWxvYWQiOiJleUp2Y21SbGNsQmhjblF5UTBsRUlqb2lVVzFVZUZka1ltZEdhRGxHYWpGMlJIbFhlazVCWkROVmFuRjNlVEYyTkRsRlFtVjJhRzUyTVVWdk5HVllSaUo5In0="
+ err := HandleChainTX(nodeID, a)
+ if err != nil {
+ panic(err)
+ }
+
+}
+
+func Test_DumpTXID(t *testing.T) {
+ a := "5fe5823c0d8b6d49f2ac99c90575566962ac3a14a6b2f1e7fe7ea1099b7b3bbd"
+ value, raw := QueryChain(a)
+ println(value)
+ bc, _ := decodeChainTX(raw)
+ print(string(bc.Payload))
+}
+
+//Use this to generate Order1
+//curl -s -X POST "http://localhost:5556/v1/order1" -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":\"\",\"extension\":{\"coin\":\"0\"}}"
+
+func Test_All(t *testing.T) {
+ DumpTXID("473407b069ff917b110f38c36d5b9e5246b5ace5d82df38c5a188d5ac868cfec")
+ DumpTXID("586bc14b15a31999571c8188241beef046d3b78a9481ecee984e7c76a1d95112")
+
+}
+
+func Test_1(t *testing.T) {
+ txid := "473407b069ff917b110f38c36d5b9e5246b5ace5d82df38c5a188d5ac868cfec"
+ DumpTXID(txid)
+ ProcessTransactionID(txid)
+}
+
+func Test_2(t *testing.T) {
+ txid := "586bc14b15a31999571c8188241beef046d3b78a9481ecee984e7c76a1d95112"
+ DumpTXID(txid)
+ ProcessTransactionID(txid)
+}
+
+func Test_3(t *testing.T) {
+ txid := "5a48129fd272f2a8c57fdd96716a78c3be55a3cf811b179e82e54221d95ccbc4"
+ DumpTXID(txid)
+ ProcessTransactionID(txid)
+}
+
+//curl -s -X POST "http://localhost:5556/v1/order1" -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":\"\",\"extension\":{\"coin\":\"0\"}}"