This is an automated email from the ASF dual-hosted git repository.

smihaylov pushed a commit to branch tendermint
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-dta.git

commit a8be7565035b80d8ca9f13b3598ab17db6913d5f
Merge: eb7e448 6bc9bc4
Author: Stanislav Mihaylov <[email protected]>
AuthorDate: Thu Oct 3 17:30:09 2019 +0300

    Merge the develop branch

 .travis.yml                                     |  17 +++
 Dockerfile                                      |  17 +++
 Dockerfile-alpine                               |  17 +++
 build-static.sh                                 |  18 +++
 build.sh                                        |  19 +++
 cmd/service/commands.go                         |   1 +
 cmd/service/initnode.go                         |  50 --------
 cmd/service/main.go                             |  55 ++++-----
 cmd/servicetester/e2e_test.sh                   | 134 +++++++++++++---------
 cmd/servicetester/fulltest.sh                   |  18 +++
 cmd/servicetester/id_test.sh                    |  19 +++
 go.mod                                          |   4 +-
 go.sum                                          |  59 +++-------
 libs/crypto/bench_test.go                       |  17 +++
 libs/crypto/libpqnist/CMakeLists.txt            |  17 +++
 libs/crypto/libpqnist/CPackConfig.cmake         |  17 +++
 libs/crypto/libpqnist/cmake_uninstall.cmake.in  |  17 +++
 libs/crypto/libpqnist/examples/CMakeLists.txt   |  17 +++
 libs/crypto/libpqnist/include/CMakeLists.txt    |  17 +++
 libs/crypto/libpqnist/src/CMakeLists.txt        |  17 +++
 libs/crypto/libpqnist/test/smoke/CMakeLists.txt |  17 +++
 libs/documents/build                            |  17 +++
 libs/documents/crypto.go                        |   2 +-
 libs/documents/docs.go                          |  21 ++--
 libs/documents/docs.proto                       |  19 +++
 libs/documents/docs_test.go                     |  19 ++-
 libs/keystore/filestore.go                      | 111 ++++++++++++++++++
 libs/keystore/filestore_test.go                 |  85 ++++++++++++++
 libs/keystore/keystore.go                       |  36 ++++++
 libs/keystore/memorystore.go                    |  59 ++++++++++
 libs/keystore/memorystore_test.go               |  46 ++++++++
 libs/transport/http.go                          |  12 +-
 lint.sh                                         |  19 +++
 open-api.yaml                                   |  17 +++
 pkg/bitcoinplugin/helpers.go                    |   2 +-
 pkg/bitcoinplugin/open-api.yaml                 |  17 +++
 pkg/bitcoinplugin/service.go                    |   4 +-
 pkg/common/common.go                            |  49 +-------
 pkg/defaultservice/identity.go                  | 146 ------------------------
 pkg/defaultservice/init.go                      | 102 +++++++++++++++++
 pkg/defaultservice/order.go                     |  19 ++-
 pkg/defaultservice/service.go                   |  19 +--
 pkg/endpoints/endpoints.go                      | 122 ++++----------------
 pkg/identity/identity.go                        | 121 ++++++++++++++++++++
 pkg/identity/identity_test.go                   |  47 ++++++++
 pkg/identity/keys.go                            |  63 ++++++++++
 pkg/safeguardsecret/README.md                   |  19 +++
 pkg/service/service.go                          |  15 ++-
 plugins/plugin.go                               |   9 +-
 test.sh                                         |  17 +++
 50 files changed, 1270 insertions(+), 528 deletions(-)

diff --cc cmd/service/main.go
index 286460c,7e6a8ef..41bb4a3
--- a/cmd/service/main.go
+++ b/cmd/service/main.go
@@@ -34,9 -36,11 +36,11 @@@ import 
        "github.com/apache/incubator-milagro-dta/libs/ipfs"
        "github.com/apache/incubator-milagro-dta/libs/logger"
        "github.com/apache/incubator-milagro-dta/libs/transport"
 -      "github.com/apache/incubator-milagro-dta/pkg/api"
        "github.com/apache/incubator-milagro-dta/pkg/config"
+       "github.com/apache/incubator-milagro-dta/pkg/defaultservice"
        "github.com/apache/incubator-milagro-dta/pkg/endpoints"
+       "github.com/apache/incubator-milagro-dta/pkg/identity"
 +      "github.com/apache/incubator-milagro-dta/pkg/tendermint"
        "github.com/apache/incubator-milagro-dta/plugins"
        "github.com/go-kit/kit/metrics/prometheus"
        "github.com/pkg/errors"
@@@ -224,15 -232,8 +227,15 @@@ func startDaemon(args []string) error 
  
        logger.Info("NODE ID (IPFS):  %v", svcPlugin.NodeID())
        logger.Info("Node Type: %v", strings.ToLower(cfg.Node.NodeType))
-       endpoints := endpoints.Endpoints(svcPlugin, cfg.HTTP.CorsAllow, 
authorizer, logger, cfg.Node.NodeType)
+       endpoints := endpoints.Endpoints(svcPlugin, cfg.HTTP.CorsAllow, 
authorizer, logger, cfg.Node.NodeType, svcPlugin)
        httpHandler := transport.NewHTTPHandler(endpoints, logger, duration)
 +
 +      //Connect to Blockchain - Tendermint
 +      go tendermint.Subscribe(svcPlugin, store, logger, cfg.Node.NodeID, 
cfg.HTTP.ListenAddr)
 +      if err != nil {
 +              return errors.Wrap(err, "init Tendermint Blockchain")
 +      }
 +
        // Start the application http server
        go func() {
                logger.Info("starting listener on %v, custody server %v", 
cfg.HTTP.ListenAddr, cfg.Node.MasterFiduciaryServer)
diff --cc go.mod
index 6225b74,b63bedf..7e0150c
--- a/go.mod
+++ b/go.mod
@@@ -1,11 -1,11 +1,13 @@@
  module github.com/apache/incubator-milagro-dta
  
  require (
 +      github.com/TylerBrock/colorjson v0.0.0-20180527164720-95ec53f28296
 +      github.com/btcsuite/btcd v0.0.0-20190427004231-96897255fd17
+       github.com/VividCortex/gohistogram v1.0.0 // indirect
+       github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3
        github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d
        github.com/coreos/go-oidc v2.0.0+incompatible
 -      github.com/go-kit/kit v0.8.0
 +      github.com/go-kit/kit v0.9.0
        github.com/go-playground/locales v0.12.1 // indirect
        github.com/go-playground/universal-translator v0.16.0 // indirect
        github.com/go-test/deep v1.0.2
diff --cc go.sum
index 58ea010,dfb1954..1ee5995
--- a/go.sum
+++ b/go.sum
@@@ -13,11 -12,8 +12,13 @@@ github.com/StackExchange/wmi v0.0.0-201
  github.com/Stebalien/go-bitfield v0.0.0-20180330043415-076a62f9ce6e/go.mod 
h1:3oM7gXIttpYDAJXpVNnSCiUMYBLIZ6cb1t+Ip982MRo=
  github.com/Stebalien/go-bitfield v0.0.1 
h1:X3kbSSPUaJK60wV2hjOPZwmpljr6VGCqdq4cBLhbQBo=
  github.com/Stebalien/go-bitfield v0.0.1/go.mod 
h1:GNjFpasyUVkHMsfEOk8EFLJ9syQ6SI+XWrX9Wf2XH0s=
 +github.com/TylerBrock/colorjson v0.0.0-20180527164720-95ec53f28296 
h1:JYWTroLXcNzSCgu66NMgdjwoMHQRbv2SoOVNFb4kRkE=
 +github.com/TylerBrock/colorjson v0.0.0-20180527164720-95ec53f28296/go.mod 
h1:VSw57q4QFiWDbRnjdX8Cb3Ow0SFncRw+bA/ofY6Q83w=
 +github.com/VividCortex/gohistogram v1.0.0 
h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE=
 +github.com/VividCortex/gohistogram v1.0.0/go.mod 
h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
 +github.com/Workiva/go-datastructures v1.0.50/go.mod 
h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA=
+ github.com/VividCortex/gohistogram v1.0.0/go.mod 
h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
+ github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg=
  github.com/aead/siphash v1.0.1/go.mod 
h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
  github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod 
h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
  github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod 
h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@@@ -29,12 -25,12 +30,14 @@@ github.com/bifurcation/mint v0.0.0-2018
  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/btcd v0.0.0-20190824003749-130ea5bddde3 
h1:A/EVblehb75cUgXA5njHPn0kLAsykn6mJGz7rnmW5W0=
+ github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod 
h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI=
+ github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f 
h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo=
  github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod 
h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
 +github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod 
h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
  github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod 
h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
  github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d 
h1:yJzD/yFppdVCf6ApMkVy8cUxV0XrxdP9rVf6D87/Mng=
  github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod 
h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
@@@ -48,10 -48,8 +55,9 @@@ github.com/cenkalti/backoff v2.1.1+inco
  github.com/cespare/xxhash v1.1.0/go.mod 
h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
  github.com/cheekybits/genny v1.0.0 
h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE=
  github.com/cheekybits/genny v1.0.0/go.mod 
h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ=
- github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927 
h1:SKI1/fuSdodxmNNyVBR8d7X/HuLnRpvvFO0AgyQk764=
  github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod 
h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U=
  github.com/client9/misspell v0.3.4/go.mod 
h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 +github.com/coreos/bbolt v1.3.2/go.mod 
h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
  github.com/coreos/etcd v3.3.10+incompatible/go.mod 
h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
  github.com/coreos/go-etcd v2.0.0+incompatible/go.mod 
h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
  github.com/coreos/go-oidc v2.0.0+incompatible 
h1:+RStIopZ8wooMx+Vs5Bt8zMXxV1ABl5LbakNExNmZIg=
@@@ -74,36 -67,17 +80,34 @@@ github.com/davecgh/go-spew v1.1.1/go.mo
  github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 
h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0=
  github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod 
h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4=
  github.com/dgraph-io/badger v1.5.5-0.20190226225317-8115aed38f8f/go.mod 
h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ=
- github.com/dgraph-io/badger v1.6.0-rc1 
h1:JphPpoBZJ3WHha133BGYlQqltSGIhV+VsEID0++nN9A=
  github.com/dgraph-io/badger v1.6.0-rc1/go.mod 
h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4=
 +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod 
h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
  github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod 
h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
- github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 
h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA=
  github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod 
h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
  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 
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/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.3.5-0.20190526074819-1df300866540/go.mod 
h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA=
  github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=
@@@ -142,14 -113,9 +145,13 @@@ github.com/gobwas/glob v0.2.3/go.mod h1
  github.com/gogo/protobuf v1.1.1/go.mod 
h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
  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=
  github.com/golang/mock v1.1.1/go.mod 
h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
- github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk=
  github.com/golang/mock v1.2.0/go.mod 
h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
  github.com/golang/protobuf v1.2.0/go.mod 
h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
  github.com/golang/protobuf v1.3.0/go.mod 
h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0=
@@@ -178,14 -140,9 +180,13 @@@ github.com/golangci/misspell v0.0.0-201
  github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod 
h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI=
  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/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=
- github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 
h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
  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=
@@@ -349,18 -289,17 +341,20 @@@ github.com/jbenet/go-temp-err-catcher v
  github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod 
h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY=
  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 
h1:12K8AlpT0/6QUXSfV0yi4Q0jkbq8NDtIKFtF61AoqV0=
  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 
h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI=
  github.com/jrick/logrotate v1.0.0/go.mod 
h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
- github.com/jtolds/gls v4.2.1+incompatible 
h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE=
  github.com/jtolds/gls v4.2.1+incompatible/go.mod 
h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
  github.com/julienschmidt/httprouter v1.2.0/go.mod 
h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
  github.com/kisielk/errcheck v1.1.0/go.mod 
h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
 +github.com/kisielk/errcheck v1.2.0/go.mod 
h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
  github.com/kisielk/gotool v0.0.0-20161130080628-0de1eaf82fa3/go.mod 
h1:jxZFDH7ILpTPQTk+E2s+z4CUas9lVNjIuKR4c5/zKgM=
  github.com/kisielk/gotool v1.0.0/go.mod 
h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+ github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 
h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE=
  github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod 
h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
  github.com/klauspost/compress v1.4.0/go.mod 
h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
  github.com/klauspost/compress v1.4.1/go.mod 
h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
@@@ -659,20 -580,12 +645,16 @@@ github.com/shirou/gopsutil v0.0.0-20180
  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=
  github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod 
h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
- github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa 
h1:E+gaaifzi2xF65PbDmuKI3PhLWY6G5opMLniFq8vmXA=
  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/soheilhy/cmux v0.1.4/go.mod 
h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
  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=
- github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 
h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU=
  github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod 
h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc=
  github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod 
h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
  github.com/spaolacci/murmur3 v1.1.0 
h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
@@@ -776,10 -669,7 +756,8 @@@ go.uber.org/fx v1.9.0/go.mod h1:mFdUyAU
  go.uber.org/goleak v0.10.0/go.mod 
h1:VCZuO8V8mFPlL0F5J5GK1rtHV3DrFcQ1R8ryq7FK0aI=
  go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
  go.uber.org/multierr v1.1.0/go.mod 
h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
 +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
  go4.org v0.0.0-20190218023631-ce4c26f7be8e/go.mod 
h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
- go4.org v0.0.0-20190313082347-94abd6928b1d 
h1:JkRdGP3zvTtTbabWSAC6n67ka30y7gOzWAah4XYJSfw=
  go4.org v0.0.0-20190313082347-94abd6928b1d/go.mod 
h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
  golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod 
h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
  golang.org/x/crypto v0.0.0-20180426230345-b49d69b5da94/go.mod 
h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@@ -864,10 -746,8 +841,9 @@@ golang.org/x/tools v0.0.0-2019031121294
  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-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=
  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-20190717185122-a985d3407aa7 
h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=
  golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@@ -897,11 -768,8 +870,9 @@@ gopkg.in/gemnasium/logrus-airbrake-hook
  gopkg.in/go-playground/assert.v1 v1.2.1/go.mod 
h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
  gopkg.in/go-playground/validator.v9 v9.29.1 
h1:SvGtYmN60a5CVKTOzMSyfzWDeZRxRuGvRQyEAKbw1xc=
  gopkg.in/go-playground/validator.v9 v9.29.1/go.mod 
h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
 +gopkg.in/resty.v1 v1.12.0/go.mod 
h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
  gopkg.in/square/go-jose.v2 v2.3.1 
h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4=
  gopkg.in/square/go-jose.v2 v2.3.1/go.mod 
h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
- gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 
h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
  gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod 
h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
  gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod 
h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
  gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --cc pkg/common/common.go
index 38db9dd,03f815a..4e8220b
--- a/pkg/common/common.go
+++ b/pkg/common/common.go
@@@ -117,53 -100,98 +105,22 @@@ func RetrieveSeed(store *datastore.Stor
        return seedHex, nil
  }
  
 -// CreateAndStoreOrderPart2 -
 -func CreateAndStoreOrderPart2(ipfs ipfs.Connector, store *datastore.Store, 
keyStore keystore.Store, order *documents.OrderDoc, orderPart1CID, 
commitmentPublicKey, nodeID string, recipients map[string]*documents.IDDoc) 
(orderPart2CID string, err error) {
 -      Part2 := documents.OrderPart2{
 -              CommitmentPublicKey: commitmentPublicKey,
 -              PreviousOrderCID:    orderPart1CID,
 -              Timestamp:           time.Now().Unix(),
 -      }
 -      order.OrderPart2 = &Part2
 -      //Write the updated doc back to IPFS
 -      orderPart2CID, err = WriteOrderToIPFS(nodeID, ipfs, store, keyStore, 
nodeID, order, recipients)
 -      if err != nil {
 -              return "", err
 -      }
 -      return orderPart2CID, nil
 -}
 -
 -// CreateAndStorePart3 adds part 3 "redemption request" to the order doc
 -func CreateAndStorePart3(ipfs ipfs.Connector, store *datastore.Store, 
keyStore keystore.Store, order *documents.OrderDoc, orderPart2CID, nodeID 
string, beneficiaryEncryptedData []byte, recipients 
map[string]*documents.IDDoc) (orderPart3CID string, err error) {
 -      //Add part 3 "redemption request" to the order doc
 -      redemptionRequest := documents.OrderPart3{
 -              //TODO
 -              Redemption:               "SignedReferenceNumber",
 -              PreviousOrderCID:         orderPart2CID,
 -              BeneficiaryEncryptedData: beneficiaryEncryptedData,
 -              Timestamp:                time.Now().Unix(),
 -      }
 -      order.OrderPart3 = &redemptionRequest
 -      //Write the updated doc back to IPFS
 -      orderPart3CID, err = WriteOrderToIPFS(nodeID, ipfs, store, keyStore, 
nodeID, order, recipients)
 -      if err != nil {
 -              return "", nil
 -      }
 -      return orderPart3CID, nil
 -}
 -
 -// CreateAndStoreOrderPart4 -
 -func CreateAndStoreOrderPart4(ipfs ipfs.Connector, store *datastore.Store, 
keyStore keystore.Store, order *documents.OrderDoc, commitmentPrivateKey, 
orderPart3CID, nodeID string, recipients map[string]*documents.IDDoc) 
(orderPart4CID string, err error) {
 -      Part4 := documents.OrderPart4{
 -              Secret:           commitmentPrivateKey,
 -              PreviousOrderCID: orderPart3CID,
 -              Timestamp:        time.Now().Unix(),
 -      }
 -      order.OrderPart4 = &Part4
 -      //Write the updated doc back to IPFS
 -      orderPart4CID, err = WriteOrderToIPFS(nodeID, ipfs, store, keyStore, 
nodeID, order, recipients)
 -      if err != nil {
 -              return "", nil
 -      }
 -      return orderPart4CID, nil
 -}
 -
 -// WriteOrderToIPFS writes the order document to IPFS network
 -func WriteOrderToIPFS(nodeID string, ipfs ipfs.Connector, store 
*datastore.Store, keyStore keystore.Store, id string, order 
*documents.OrderDoc, recipients map[string]*documents.IDDoc) (ipfsAddress 
string, err error) { // Get the secret keys
 -      seed, err := keyStore.Get("seed")
 -      if err != nil {
 -              return "", errors.New("load secrets")
 -      }
 -      _, blsSecretKey, err := identity.GenerateBLSKeys(seed)
 -      if err != nil {
 -              return "", err
 -      }
 -
 -      rawDoc, err := documents.EncodeOrderDocument(nodeID, *order, 
blsSecretKey, recipients)
 -      if err != nil {
 -              return "", errors.Wrap(err, "Failed to encode IDDocument")
 -      }
 -      ipfsAddress, err = ipfs.Add(rawDoc)
 -      if err != nil {
 -              return "", errors.Wrap(err, "Failed to Save Raw Document into 
IPFS")
 -      }
 -
 -      if err := store.Set("order", order.Reference, ipfsAddress, 
map[string]string{"time": time.Now().UTC().Format(time.RFC3339)}); err != nil {
 -              return "", errors.New("Save Order to store")
 +func WriteOrderToStore(store *datastore.Store, orderReference string, address 
string) error {
 +      if err := store.Set("order", orderReference, address, 
map[string]string{"time": time.Now().UTC().Format(time.RFC3339)}); err != nil {
 +              return errors.New("Save Order to store")
        }
 -      return ipfsAddress, nil
 +      return nil
  }
  
- //InitECKeys - generate EC keys using BIP44 HD Wallets (as bitcoin) from seed
- func InitECKeys(seed []byte) ([]byte, error) {
-       //EC ADD Keypair Protocol
-       _, pubKeyECADD, _, err := cryptowallet.Bip44Address(seed, 
cryptowallet.CoinTypeBitcoinMain, 0, 0, 0)
-       if err != nil {
-               return nil, errors.Wrap(err, "Failed to derive EC HD Wallet 
Key")
-       }
-       return pubKeyECADD.SerializeCompressed(), nil
- }
- 
- // RetrieveIdentitySecrets gets the secrets for the node ID
- func RetrieveIdentitySecrets(store *datastore.Store, nodeID string) (name 
string, seed []byte, blsSK []byte, sikeSK []byte, err error) {
-       var idSecrets = &IdentitySecrets{}
-       if err := store.Get("id-doc", nodeID, idSecrets); err != nil {
-               return "", nil, nil, nil, err
-       }
-       seed, err = hex.DecodeString(idSecrets.Seed)
-       if err != nil {
-               return "", nil, nil, nil, err
-       }
-       blsSK, err = hex.DecodeString(idSecrets.BLSSecretKey)
-       if err != nil {
-               return "", nil, nil, nil, err
-       }
-       sikeSK, err = hex.DecodeString(idSecrets.SikeSecretKey)
-       if err != nil {
-               return "", nil, nil, nil, err
-       }
-       return idSecrets.Name, seed, blsSK, sikeSK, nil
- }
- 
  // BuildRecipientList builds a list of recipients who are able to decrypt the 
encrypted envelope
 -func BuildRecipientList(ipfs ipfs.Connector, localNodeDocCID, 
remoteNodeDocCID string) (map[string]*documents.IDDoc, error) {
 -      remoteNodeDoc, err := RetrieveIDDocFromIPFS(ipfs, remoteNodeDocCID)
 -      if err != nil {
 -              return nil, err
 -      }
 -
 -      localNodeDoc, err := RetrieveIDDocFromIPFS(ipfs, localNodeDocCID)
 -      if err != nil {
 -              return nil, err
 -      }
 -
 -      recipients := map[string]*documents.IDDoc{
 -              remoteNodeDocCID: remoteNodeDoc,
 -              localNodeDocCID:  localNodeDoc,
 +func BuildRecipientList(ipfs ipfs.Connector, IDDocs ...string) 
(map[string]documents.IDDoc, error) {
 +      recipients := make(map[string]documents.IDDoc)
 +      for _, v := range IDDocs {
 +              iddoc, err := RetrieveIDDocFromIPFS(ipfs, v)
 +              if err != nil {
 +                      return nil, err
 +              }
 +              recipients[v] = iddoc
        }
        return recipients, nil
  }
diff --cc pkg/defaultservice/order.go
index 4f9c87f,bafd24c..acc6a6d
--- a/pkg/defaultservice/order.go
+++ b/pkg/defaultservice/order.go
@@@ -26,7 -25,7 +26,8 @@@ 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/identity"
 +      "github.com/apache/incubator-milagro-dta/pkg/tendermint"
        "github.com/pkg/errors"
  )
  
@@@ -184,76 -217,76 +190,85 @@@ func (s *Service) OrderSecret1(req *api
        }
        remoteIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, 
s.MasterFiduciaryNodeID())
        if err != nil {
 -              return nil, err
 +              return "", err
        }
  
-       _, _, blsSK, sikeSK, err := common.RetrieveIdentitySecrets(s.Store, 
nodeID)
+       // SIKE and BLS keys
+       keyseed, err := s.KeyStore.Get("seed")
+       if err != nil {
+               return nil, err
+       }
+       _, sikeSK, err := identity.GenerateSIKEKeys(keyseed)
+       if err != nil {
+               return nil, err
+       }
+       _, blsSK, err := identity.GenerateBLSKeys(keyseed)
        if err != nil {
 -              return nil, err
 +              return "", err
        }
  
 -      //Retrieve the order from IPFS
 -      order, err := common.RetrieveOrderFromIPFS(s.Ipfs, orderPart2CID, 
sikeSK, nodeID, remoteIDDoc.BLSPublicKey)
 +      localIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, s.NodeID())
        if err != nil {
 -              return nil, errors.Wrap(err, "Fail to retrieve Order from IPFS")
 +              return "", err
        }
  
 -      // TODO: Split Beneficiary and Principal
 -      beneficiariesSeed := keyseed
 -      beneficiariesSikeSK := sikeSK
 -
 -      if err := s.Plugin.ValidateOrderSecretRequest(req, *order); err != nil {
 -              return nil, err
 +      tx, err := tendermint.TXbyHash(previousOrderHash)
 +      if err != nil {
 +              return "", err
        }
  
 -      //Create a piece of data that is destined for the beneficiary, passed 
via the Master Fiduciary
 +      _ = tx
  
 -      beneficiaryEncryptedData, extension, err := 
s.Plugin.ProduceBeneficiaryEncryptedData(blsSK, order, req)
 +      order := &documents.OrderDoc{}
 +      err = documents.DecodeOrderDocument(tx.Payload, previousOrderHash, 
order, sikeSK, nodeID, remoteIDDoc.BLSPublicKey)
        if err != nil {
 -              return nil, err
 +              err = documents.DecodeOrderDocument(tx.Payload, 
previousOrderHash, order, sikeSK, nodeID, localIDDoc.BLSPublicKey)
 +              if err != nil {
 +                      return "", errors.Wrap(err, "Fail to retrieve existing 
order")
 +              }
        }
  
 -      //Create a request Object in IPFS
 -      orderPart3CID, err := common.CreateAndStorePart3(s.Ipfs, s.Store, 
s.KeyStore, order, orderPart2CID, nodeID, beneficiaryEncryptedData, 
recipientList)
 -      if err != nil {
 -              return nil, err
 +      //Populate extension fields
 +      if order.OrderSecretReqExtension == nil {
 +              order.OrderSecretReqExtension = make(map[string]string)
        }
 -
 -      //Post the address of the updated doc to the custody node
 -      request := &api.FulfillOrderSecretRequest{
 -              SenderDocumentCID: nodeID,
 -              OrderPart3CID:     orderPart3CID,
 -              Extension:         extension,
 +      for key, value := range req.Extension {
 +              order.OrderSecretReqExtension[key] = value
        }
 -      response, err := s.MasterFiduciaryServer.FulfillOrderSecret(request)
 -      if err != nil {
 -              return nil, err
 +
 +      if err := s.Plugin.ValidateOrderSecretRequest(req, *order); err != nil {
 +              return "", err
        }
  
 -      //Retrieve the response Order from IPFS
 -      orderPart4, err := common.RetrieveOrderFromIPFS(s.Ipfs, 
response.OrderPart4CID, sikeSK, nodeID, remoteIDDoc.BLSPublicKey)
 -      if err != nil {
 -              return nil, err
 +      if req.BeneficiaryIDDocumentCID != "" {
 +              order.BeneficiaryCID = req.BeneficiaryIDDocumentCID
        }
  
 -      finalPrivateKey, finalPublicKey, ext, err := 
s.Plugin.ProduceFinalSecret(beneficiariesSeed, beneficiariesSikeSK, order, 
orderPart4, req, response)
 +      //Create a piece of data that is destined for the beneficiary, passed 
via the Master Fiduciary
 +      beneficiaryEncryptedData, _, err := 
s.Plugin.ProduceBeneficiaryEncryptedData(blsSK, order, req)
        if err != nil {
 -              return nil, err
 +              return "", err
        }
  
 -      return &api.OrderSecretResponse{
 -              Secret:         finalPrivateKey,
 -              Commitment:     finalPublicKey,
 -              OrderReference: order.Reference,
 -              Extension:      ext,
 -      }, nil
 +      //Create a request Object in IPFS
 +      order.OrderPart3 = &documents.OrderPart3{
 +              Redemption:               "SignedReferenceNumber",
 +              PreviousOrderCID:         previousOrderHash,
 +              BeneficiaryEncryptedData: beneficiaryEncryptedData,
 +              Timestamp:                time.Now().Unix(),
 +      }
 +
 +      txHash, payload, err := common.CreateTX(nodeID, s.Store, nodeID, order, 
recipientList)
 +
 +      //Write the requests to the chain
 +      chainTX := &api.BlockChainTX{
 +              Processor:              api.TXFulfillOrderSecretRequest,
 +              SenderID:               nodeID,
 +              RecipientID:            s.MasterFiduciaryNodeID(),
 +              AdditionalRecipientIDs: []string{},
 +              Payload:                payload,
 +              Tags:                   map[string]string{"reference": 
order.Reference, "txhash": hex.EncodeToString(txHash)},
 +      }
 +      tendermint.PostToChain(chainTX, "OrderSecret1")
 +      return order.Reference, nil
  }
diff --cc pkg/defaultservice/service.go
index 1260a89,b1787a3..9299b92
--- a/pkg/defaultservice/service.go
+++ b/pkg/defaultservice/service.go
@@@ -27,13 -25,11 +27,15 @@@ import 
        "time"
  
        "github.com/apache/incubator-milagro-dta/libs/datastore"
 +      "github.com/apache/incubator-milagro-dta/libs/documents"
        "github.com/apache/incubator-milagro-dta/libs/ipfs"
+       "github.com/apache/incubator-milagro-dta/libs/keystore"
        "github.com/apache/incubator-milagro-dta/libs/logger"
+       "github.com/apache/incubator-milagro-dta/libs/transport"
        "github.com/apache/incubator-milagro-dta/pkg/api"
 +      "github.com/apache/incubator-milagro-dta/pkg/common"
 +      "github.com/apache/incubator-milagro-dta/pkg/config"
 +      "github.com/hokaccha/go-prettyjson"
  )
  
  var (
@@@ -48,7 -44,9 +50,8 @@@ type Service struct 
        Logger                *logger.Logger
        Rng                   io.Reader
        Store                 *datastore.Store
+       KeyStore              keystore.Store
        Ipfs                  ipfs.Connector
 -      MasterFiduciaryServer api.ClientService
        nodeID                string
        masterFiduciaryNodeID string
  }
@@@ -115,26 -100,7 +105,29 @@@ func (s *Service) Status(apiVersion, no
        }, nil
  }
  
 +//Dump - used for debugging purpose, print the entire Encrypted Transaction
 +func (s *Service) Dump(tx *api.BlockChainTX) error {
 +      nodeID := s.NodeID()
 +      txHashString := hex.EncodeToString(tx.TXhash)
 +
 +      localIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, nodeID)
 +      if err != nil {
 +              return err
 +      }
 +
 +      _, _, _, sikeSK, err := common.RetrieveIdentitySecrets(s.Store, nodeID)
 +      if err != nil {
 +              return err
 +      }
 +
 +      order := &documents.OrderDoc{}
 +      err = documents.DecodeOrderDocument(tx.Payload, txHashString, order, 
sikeSK, nodeID, localIDDoc.BLSPublicKey)
 +
 +      pp, _ := prettyjson.Marshal(order)
 +      fmt.Println(string(pp))
 +
 +      return nil
+ // Endpoints for extending the plugin endpoints
+ func (s *Service) Endpoints() (namespace string, endpoints 
transport.HTTPEndpoints) {
+       return s.Name(), nil
  }
diff --cc pkg/endpoints/endpoints.go
index d972829,b1f7d9d..cdf530b
--- a/pkg/endpoints/endpoints.go
+++ b/pkg/endpoints/endpoints.go
@@@ -45,55 -45,12 +45,13 @@@ var 
  )
  
  // Endpoints returns all the exported endpoints
- func Endpoints(svc service.Service, corsAllow string, authorizer 
transport.Authorizer, logger *logger.Logger, nodeType string) 
transport.HTTPEndpoints {
-       identityEndpoints := transport.HTTPEndpoints{
-               "CreateIdentity": {
-                       Path:        "/" + apiVersion + "/identity",
-                       Method:      http.MethodPost,
-                       Endpoint:    MakeCreateIdentityEndpoint(svc),
-                       NewRequest:  func() interface{} { return 
&api.CreateIdentityRequest{} },
-                       NewResponse: func() interface{} { return 
&api.CreateIdentityResponse{} },
-                       Options: transport.ServerOptions(
-                               transport.SetCors(corsAllow),
-                               transport.AuthorizeOIDC(authorizer, false),
-                       ),
-                       ErrStatus: transport.ErrorStatus{
-                               transport.ErrInvalidRequest: 
http.StatusUnprocessableEntity,
-                       },
-               },
-               "GetIdentity": {
-                       Path:        "/" + apiVersion + 
"/identity/{IDDocumentCID}",
-                       Method:      http.MethodGet,
-                       Endpoint:    MakeGetIdentityEndpoint(svc),
-                       NewResponse: func() interface{} { return 
&api.GetIdentityResponse{} },
-                       Options: transport.ServerOptions(
-                               transport.SetCors(corsAllow),
-                               transport.AuthorizeOIDC(authorizer, false),
-                       ),
-                       ErrStatus: transport.ErrorStatus{
-                               transport.ErrInvalidRequest: 
http.StatusUnprocessableEntity,
-                       },
-               },
-               "IdentityList": {
-                       Path:        "/" + apiVersion + "/identity",
-                       Method:      http.MethodGet,
-                       Endpoint:    MakeIdentityListEndpoint(svc),
-                       NewResponse: func() interface{} { return 
&api.IdentityListResponse{} },
-                       Options: transport.ServerOptions(
-                               transport.SetCors(corsAllow),
-                               transport.AuthorizeOIDC(authorizer, false),
-                       ),
-                       ErrStatus: transport.ErrorStatus{
-                               transport.ErrInvalidRequest: 
http.StatusUnprocessableEntity,
-                       },
-               },
-       }
+ func Endpoints(svc service.Service, corsAllow string, authorizer 
transport.Authorizer, logger *logger.Logger, nodeType string, pluginEndpoints 
service.Endpoints) transport.HTTPEndpoints {
        principalEndpoints := transport.HTTPEndpoints{
 -              "Order": {
 -                      Path:        "/" + apiVersion + "/order",
 +
 +              "Order1": {
 +                      Path:        "/" + apiVersion + "/order1",
                        Method:      http.MethodPost,
 -                      Endpoint:    MakeOrderEndpoint(svc),
 +                      Endpoint:    MakeOrder1Endpoint(svc),
                        NewRequest:  func() interface{} { return 
&api.OrderRequest{} },
                        NewResponse: func() interface{} { return 
&api.OrderResponse{} },
                        Options: transport.ServerOptions(
diff --cc pkg/service/service.go
index b1b2d72,f0ed3d4..1949ed0
--- a/pkg/service/service.go
+++ b/pkg/service/service.go
@@@ -47,10 -46,9 +45,15 @@@ type Service interface 
  
        //System
        Status(apiVersion, nopdeType string) (*api.StatusResponse, error)
 +
 +      //Blockchain transactions
 +      Dump(tx *api.BlockChainTX) error //Decrypt and dump the order for 
debugging purposes.
 +      OrderSecret2(tx *api.BlockChainTX) (string, error)
 +      FulfillOrderSecret(tx *api.BlockChainTX) (string, error)
 +      Order2(tx *api.BlockChainTX) (string, error)
  }
+ 
+ // Endpoints interface to register plugin specific endpoints
+ type Endpoints interface {
+       Endpoints() (namespace string, endpoints transport.HTTPEndpoints)
+ }

Reply via email to