OSDN Git Service

add getContractUTXOID
authorChengcheng Zhang <943420582@qq.com>
Fri, 23 Aug 2019 07:18:51 +0000 (15:18 +0800)
committerChengcheng Zhang <943420582@qq.com>
Fri, 23 Aug 2019 07:18:51 +0000 (15:18 +0800)
main.go

diff --git a/main.go b/main.go
index f9ec3ba..2daba2a 100644 (file)
--- a/main.go
+++ b/main.go
@@ -55,6 +55,10 @@ func main() {
 
        txID := submitTransaction(signedTransaction)
        fmt.Println("txID:", txID)
+
+       txID = "5ebf9cb8d3e98450ba0c41a5cf60fd04da388c6da06addc2eb8e07265305a30a"
+       contractUTXOID := getContractUTXOID(txID, controlProgram)
+       fmt.Println("contractUTXOID:", contractUTXOID)
 }
 
 func request(URL string, data []byte) []byte {
@@ -284,3 +288,36 @@ func submitTransaction(rawTransaction string) string {
        }
        return submitedTransaction.Data.TxID
 }
+
+type TransactionOutput struct {
+       TransactionOutputID string `json:"id"`
+       ControlProgram      string `json:"control_program"`
+}
+
+type GotTransactionInfo struct {
+       TransactionOutputs []TransactionOutput `json:"outputs"`
+}
+
+type getTransactionResponse struct {
+       Status string             `json:"status"`
+       Data   GotTransactionInfo `json:"data"`
+}
+
+// getContractUTXOID get contract UTXO ID by transaction ID and control program.
+func getContractUTXOID(transactionID, controlProgram string) string {
+       data := []byte(`{"tx_id":"` + transactionID + `"}`)
+       body := request(getTransactionURL, data)
+
+       getTransactionResponse := new(getTransactionResponse)
+       if err := json.Unmarshal(body, getTransactionResponse); err != nil {
+               fmt.Println(err)
+       }
+
+       for _, v := range getTransactionResponse.Data.TransactionOutputs {
+               if v.ControlProgram == controlProgram {
+                       return v.TransactionOutputID
+               }
+       }
+
+       return ""
+}