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'"