Tidy up beneficiary
diff --git "a/\041notes" "b/\041notes"
index 25596f0..63605f8 100644
--- "a/\041notes"
+++ "b/\041notes"
@@ -1,2 +1,9 @@
-curl -X POST "127.0.0.1:5556/v1/order1" -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":\"\",\"extension\":{\"coin\":\"0\"}}"
-curl -X POST "127.0.0.1:5556/v1/order/secret1" -H "accept: */*" -H "Content-Type: application/json" -d "{\"orderReference\":\"1daef6ba-df9e-11e9-b3b8-acde48001122\",\"beneficiaryIDDocumentCID\":\"QmcyJqEMqNEEYHrNSyUY83CQCNwZ5yVan3SgaQ4NchsqsC\"}"
\ No newline at end of file
+
+Empty:
+ref=$(curl -s -X POST "127.0.0.1:5556/v1/order1" -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":\"\",\"extension\":{\"coin\":\"0\"}}");sleep 4; curl -X POST "127.0.0.1:5556/v1/order/secret1" -H "accept: */*" -H "Content-Type: application/json" -d "{\"orderReference\":$ref,\"beneficiaryIDDocumentCID\":\"QmcyJqEMqNEEYHrNSyUY83CQCNwZ5yVan3SgaQ4NchsqsC\"}"
+
+
+Define at start:
+ref=$(curl -s -X POST "127.0.0.1:5556/v1/order1" -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":\"QmcyJqEMqNEEYHrNSyUY83CQCNwZ5yVan3SgaQ4NchsqsC\",\"extension\":{\"coin\":\"0\"}}");sleep 4; curl -X POST "127.0.0.1:5556/v1/order/secret1" -H "accept: */*" -H "Content-Type: application/json" -d "{\"orderReference\":$ref,\"beneficiaryIDDocumentCID\":\"\"}"
+
+
diff --git a/cmd/service/main.go b/cmd/service/main.go
index 944d373..9548f0a 100644
--- a/cmd/service/main.go
+++ b/cmd/service/main.go
@@ -146,11 +146,6 @@
 		return errors.Wrap(err, "init logger")
 	}
 
-	go tendermint.Subscribe(logger, cfg.Node.NodeID, cfg.HTTP.ListenAddr)
-	if err != nil {
-		return errors.Wrap(err, "init Tendermint Blockchain")
-	}
-
 	// Create KV store
 	logger.Info("Datastore type: %s", cfg.Node.Datastore)
 	store, err := initDataStore(cfg.Node.Datastore)
@@ -158,6 +153,12 @@
 		return errors.Wrap(err, "init datastore")
 	}
 
+	//Connect to Blockchain - Tendermint
+	go tendermint.Subscribe(store, logger, cfg.Node.NodeID, cfg.HTTP.ListenAddr)
+	if err != nil {
+		return errors.Wrap(err, "init Tendermint Blockchain")
+	}
+
 	logger.Info("IPFS connector type: %s", cfg.IPFS.Connector)
 	var ipfsConnector ipfs.Connector
 	switch cfg.IPFS.Connector {
diff --git a/cmd/servicetester/tendertest1.sh b/cmd/servicetester/tendertest1.sh
new file mode 100755
index 0000000..64fc139
--- /dev/null
+++ b/cmd/servicetester/tendertest1.sh
@@ -0,0 +1,8 @@
+ref=$(curl -s -X POST "127.0.0.1:5556/v1/order1" -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":\"\",\"extension\":{\"coin\":\"0\"}}")
+
+#sleep long enough for blockchain to catch up
+sleep 4
+
+curl -X POST "127.0.0.1:5556/v1/order/secret1" -H "accept: */*" -H "Content-Type: application/json" -d "{\"orderReference\":$ref,\"beneficiaryIDDocumentCID\":\"QmcyJqEMqNEEYHrNSyUY83CQCNwZ5yVan3SgaQ4NchsqsC\"}"
+
+
diff --git a/pkg/bitcoinplugin/helpers.go b/pkg/bitcoinplugin/helpers.go
index b1a15f2..310d833 100644
--- a/pkg/bitcoinplugin/helpers.go
+++ b/pkg/bitcoinplugin/helpers.go
@@ -125,7 +125,7 @@
 	coinType := order.Coin
 	var pubKeyPart1of2 string
 
-	if beneficiaryIDDocumentCID == "" {
+	if order.BeneficiaryType == documents.OrderDocument_Beneficiary_Unknown_at_Start {
 		//There is no beneficiary ID so we do it all locally based on
 		//Retrieve the Local Seed
 		seedHex, err := common.RetrieveSeed(s.Store, order.Reference)
@@ -148,7 +148,7 @@
 		}
 	}
 
-	if beneficiaryIDDocumentCID != "" {
+	if order.BeneficiaryType == documents.OrderDocument_Beneficiary_Known_at_start {
 		//There is a BeneficiaryID use it to generate the key
 		//Get beneficiary's identity out of IPFS
 		id := &documents.IDDoc{}
@@ -173,7 +173,6 @@
 		return "", "", err
 	}
 	return finalPublicKey, addressForPublicKey, nil
-
 }
 
 //AddPrivateKeys Perform eliptical key additon on 2 privates keys
diff --git a/pkg/defaultservice/fulfill.go b/pkg/defaultservice/fulfill.go
index 4a8c827..6f457c8 100644
--- a/pkg/defaultservice/fulfill.go
+++ b/pkg/defaultservice/fulfill.go
@@ -82,6 +82,7 @@
 		SenderID:    nodeID,
 		RecipientID: []string{order.PrincipalCID, nodeID},
 		Payload:     marshaledRequest,
+		Tags:        map[string]string{"reference": order.Reference},
 	}
 	return tendermint.PostToChain(chainTX, "FulfillOrder")
 
@@ -144,6 +145,7 @@
 		SenderID:    nodeID,
 		RecipientID: []string{s.MasterFiduciaryNodeID(), order.BeneficiaryCID},
 		Payload:     marshaledRequest,
+		Tags:        map[string]string{"reference": order.Reference},
 	}
 	return tendermint.PostToChain(chainTX, "FulfillOrderSecret")
 }
diff --git a/pkg/defaultservice/order.go b/pkg/defaultservice/order.go
index 95d8697..778189d 100644
--- a/pkg/defaultservice/order.go
+++ b/pkg/defaultservice/order.go
@@ -121,97 +121,6 @@
 	return finalPrivateKey, finalPublicKey, nil, err
 }
 
-// OrderSecret -
-//func (s *Service) OrderSecret(req *api.OrderSecretRequest) (*api.OrderSecretResponse, error) {
-// orderReference := req.OrderReference
-// var orderPart2CID string
-// if err := s.Store.Get("order", orderReference, &orderPart2CID); err != nil {
-// 	return nil, err
-// }
-
-// nodeID := s.NodeID()
-// recipientList, err := common.BuildRecipientList(s.Ipfs, nodeID, s.MasterFiduciaryNodeID())
-// if err != nil {
-// 	return nil, err
-// }
-// remoteIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, s.MasterFiduciaryNodeID())
-// if err != nil {
-// 	return nil, err
-// }
-
-// _, _, blsSK, sikeSK, err := common.RetrieveIdentitySecrets(s.Store, nodeID)
-// if err != nil {
-// 	return nil, err
-// }
-
-// //Retrieve the order from IPFS
-
-// order, err := common.RetrieveOrderFromIPFS(s.Ipfs, orderPart2CID, sikeSK, nodeID, remoteIDDoc.BLSPublicKey)
-// if err != nil {
-// 	return nil, errors.Wrap(err, "Fail to retrieve Order from IPFS")
-// }
-
-// if err := s.Plugin.ValidateOrderSecretRequest(req, *order); err != nil {
-// 	return nil, err
-// }
-
-// var beneficiariesSikeSK []byte
-// var beneficiaryCID string
-
-// if req.BeneficiaryIDDocumentCID != "" {
-// 	beneficiaryCID = req.BeneficiaryIDDocumentCID
-// } else {
-// 	beneficiaryCID = order.BeneficiaryCID
-// }
-
-// _, beneficiariesSeed, _, beneficiariesSikeSK, err := common.RetrieveIdentitySecrets(s.Store, beneficiaryCID)
-// if err != nil {
-// 	return nil, err
-// }
-
-// //Create a piece of data that is destined for the beneficiary, passed via the Master Fiduciary
-
-// beneficiaryEncryptedData, extension, err := s.Plugin.ProduceBeneficiaryEncryptedData(blsSK, order, req)
-// if err != nil {
-// 	return nil, err
-// }
-
-// //Create a request Object in IPFS
-// orderPart3CID, err := common.CreateAndStorePart3(s.Ipfs, s.Store, order, orderPart2CID, nodeID, beneficiaryEncryptedData, recipientList)
-// if err != nil {
-// 	return nil, err
-// }
-
-// //Post the address of the updated doc to the custody node
-// request := &api.FulfillOrderSecretRequest{
-// 	SenderDocumentCID: nodeID,
-// 	OrderPart3CID:     orderPart3CID,
-// 	Extension:         extension,
-// }
-// response, err := s.MasterFiduciaryServer.FulfillOrderSecret(request)
-// if err != nil {
-// 	return nil, 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
-// }
-
-// finalPrivateKey, finalPublicKey, ext, err := s.Plugin.ProduceFinalSecret(beneficiariesSeed, beneficiariesSikeSK, order, orderPart4, beneficiaryCID)
-// if err != nil {
-// 	return nil, err
-// }
-
-// return &api.OrderSecretResponse{
-// 	Secret:         finalPrivateKey,
-// 	Commitment:     finalPublicKey,
-// 	OrderReference: order.Reference,
-// 	Extension:      ext,
-// }, nil
-//}
-
 // Order1 -
 func (s *Service) Order1(req *api.OrderRequest) (string, error) {
 	if err := s.Plugin.ValidateOrderRequest(req); err != nil {
@@ -226,11 +135,6 @@
 		return "", err
 	}
 
-	// remoteIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, s.MasterFiduciaryNodeID())
-	// if err != nil {
-	// 	return "", err
-	// }
-
 	//Create Order
 	order, err := common.CreateNewDepositOrder(beneficiaryIDDocumentCID, nodeID)
 	if err != nil {
@@ -263,74 +167,21 @@
 		SenderID:    nodeID,
 		RecipientID: []string{s.MasterFiduciaryNodeID(), nodeID},
 		Payload:     marshaledRequest,
+		Tags:        map[string]string{"reference": order.Reference},
 	}
-	//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, "Order1")
 	return order.Reference, nil
 }
 
 // Order2 -
 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
 	nodeID := s.NodeID()
-	// recipientList, err := common.BuildRecipientList(s.Ipfs, nodeID, 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, nodeID)
-	// 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(nodeID, s.Ipfs, s.Store, nodeID, order, recipientList)
-	// if err != nil {
-	// 	return "", err
-	// }
-
-	// //Fullfill the order on the remote Server
-	// request := &api.FulfillOrderRequest{
-	// 	DocumentCID:   nodeID,
-	// 	OrderPart1CID: orderPart1CID,
-	// 	Extension:     fulfillExtension,
-	// }
-
-	// marshaledRequest, _ := json.Marshal(request)
-
-	// //Write the requests to the chain
-	// chainTX := &api.BlockChainTX{
-	// 	Type:        api.TXFullfullRequest,
-	// 	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
-
-	// 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, nodeID)
 	if err != nil {
@@ -365,7 +216,7 @@
 	//Write the requests to the chain
 	chainTX := &api.BlockChainTX{
 		Processor:   api.TXOrderSecretResponse,
-		SenderID:    nodeID,
+		SenderID:    "",
 		RecipientID: []string{s.MasterFiduciaryNodeID(), nodeID},
 		Payload:     marshaledRequest,
 		Tags:        map[string]string{"reference": updatedOrder.Reference},
@@ -416,12 +267,11 @@
 		return "", err
 	}
 
-	//Create a piece of data that is destined for the beneficiary, passed via the Master Fiduciary
-
 	if req.BeneficiaryIDDocumentCID != "" {
 		order.BeneficiaryCID = req.BeneficiaryIDDocumentCID
 	}
 
+	//Create a piece of data that is destined for the beneficiary, passed via the Master Fiduciary
 	beneficiaryEncryptedData, extension, err := s.Plugin.ProduceBeneficiaryEncryptedData(blsSK, order, req)
 	if err != nil {
 		return "", err
@@ -448,9 +298,8 @@
 		SenderID:    nodeID,
 		RecipientID: []string{s.MasterFiduciaryNodeID()},
 		Payload:     marshaledRequest,
+		Tags:        map[string]string{"reference": order.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, "OrderSecret1")
 }
 
@@ -467,32 +316,19 @@
 		return "", err
 	}
 
-	// localIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, s.NodeID())
-	// if err != nil {
-	// 	return "", err
-	// }
-
 	//Retrieve the response Order from IPFS
 	orderPart4, err := common.RetrieveOrderFromIPFS(s.Ipfs, req.OrderPart4CID, sikeSK, nodeID, remoteIDDoc.BLSPublicKey)
-	// if err != nil {
-	// 	//check if we are re-trying the call, so the OrderDoc is locally signed
-	// 	orderPart4, err = common.RetrieveOrderFromIPFS(s.Ipfs, req.OrderPart4CID, sikeSK, nodeID, localIDDoc.BLSPublicKey)
-	// 	if err != nil {
-	// 		return "", errors.Wrap(err, "Fail to retrieve Order from IPFS")
-	// 	}
-	// }
 
-	var beneficiariesSikeSK []byte
-	var beneficiaryCID string
+	if orderPart4.BeneficiaryCID != nodeID {
+		return "", errors.New("Invalid Processor")
+	}
 
-	beneficiaryCID = orderPart4.BeneficiaryCID
-
-	_, beneficiariesSeed, _, beneficiariesSikeSK, err := common.RetrieveIdentitySecrets(s.Store, beneficiaryCID)
+	_, seed, _, sikeSK, err := common.RetrieveIdentitySecrets(s.Store, nodeID)
 	if err != nil {
 		return "", err
 	}
 
-	finalPrivateKey, finalPublicKey, ext, err := s.Plugin.ProduceFinalSecret(beneficiariesSeed, beneficiariesSikeSK, orderPart4, orderPart4, beneficiaryCID)
+	finalPrivateKey, finalPublicKey, ext, err := s.Plugin.ProduceFinalSecret(seed, sikeSK, orderPart4, orderPart4, nodeID)
 	if err != nil {
 		return "", err
 	}
@@ -510,11 +346,9 @@
 	chainTX := &api.BlockChainTX{
 		Processor:   api.TXOrderSecretResponse, //NONE
 		SenderID:    "",                        // so we can view it
-		RecipientID: []string{beneficiaryCID},
+		RecipientID: []string{nodeID},          //don't send this to chain, seed compromise becomes fatal, sent just debugging
 		Payload:     marshaledRequest,
+		Tags:        map[string]string{"reference": orderPart4.Reference, "part": "4"},
 	}
-	//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, "OrderSecret2")
-
 }
diff --git a/pkg/tendermint/config.go b/pkg/tendermint/config.go
index 6d20001..510189d 100644
--- a/pkg/tendermint/config.go
+++ b/pkg/tendermint/config.go
@@ -1,5 +1,6 @@
 package tendermint
 
 const (
-	node = "127.0.0.1:26657"
+	//node = "127.0.0.1:26657"
+	node = "34.246.173.153:26657"
 )
diff --git a/pkg/tendermint/tendermint.go b/pkg/tendermint/tendermint.go
index ab162bf..1e46497 100644
--- a/pkg/tendermint/tendermint.go
+++ b/pkg/tendermint/tendermint.go
@@ -54,7 +54,9 @@
 	base64EncodedTX := base64.StdEncoding.EncodeToString(serializedTX)
 
 	body := strings.NewReader("{\"jsonrpc\":\"2.0\",\"id\":\"anything\",\"method\":\"broadcast_tx_commit\",\"params\": {\"tx\": \"" + base64EncodedTX + "\"}}")
-	req, err := http.NewRequest("POST", "http://"+node+"", body)
+	url := "http://" + node + ""
+
+	req, err := http.NewRequest("POST", url, body)
 	if err != nil {
 		print("Error posting to Blockchain")
 		return "", err
diff --git a/pkg/tendermint/websockets.go b/pkg/tendermint/websockets.go
index 1e21a12..aba13de 100644
--- a/pkg/tendermint/websockets.go
+++ b/pkg/tendermint/websockets.go
@@ -8,16 +8,23 @@
 	"os/signal"
 	"syscall"
 
+	"github.com/apache/incubator-milagro-dta/libs/datastore"
 	"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, nodeID string, listenPort string) error {
+func catchUp(store *datastore.Store, logger *logger.Logger, nodeID string, listenPort string) error {
 
-	//tmlogger := log2.NewTMLogger(log.NewSyncWriter(os.Stdout))
+	return nil
+}
+
+//Subscribe - Connect to the Tendermint websocket to collect events
+func Subscribe(store *datastore.Store, logger *logger.Logger, nodeID string, listenPort string) error {
+
+	//first catch up to Tip of chain
+	//catchUp(store, logger, nodeID, listenPort)
 
 	client := tmclient.NewHTTP("tcp://"+node+"", "/websocket")
 	//client.SetLogger(tmlogger)
@@ -28,6 +35,7 @@
 	}
 	defer client.Stop()
 
+	//curl "34.246.173.153:26657/tx_search?query=\"tag.part=4%20AND%20tag.reference='579a2864-e100-11e9-aaf4-acde48001122'\""
 	query := "tag.recipient='" + nodeID + "'"
 	//query := "tm.event = 'Tx'"