diff --git a/go/libbolt.go b/go/libbolt.go index d1a75db..eb9ca41 100644 --- a/go/libbolt.go +++ b/go/libbolt.go @@ -142,172 +142,328 @@ type CustClose struct { Signature Signature `json:"signature"` } -func BidirectionalChannelSetup(name string, channelSupport bool) string { +func BidirectionalChannelSetup(name string, channelSupport bool) (string, error) { resp := C.GoString(C.ffishim_bidirectional_channel_setup(C.CString(name), C.uint(btoi(channelSupport)))) - r := processCResponse(resp) - return r.ChannelState + r, err := processCResponse(resp) + if err != nil { + return "", err + } + return r.ChannelState, nil } -func BidirectionalInitMerchant(channelState string, balanceMerchant int, nameMerchant string) (ChannelToken, MerchState) { +func BidirectionalInitMerchant(channelState string, balanceMerchant int, nameMerchant string) (ChannelToken, MerchState, error) { resp := C.GoString(C.ffishim_bidirectional_init_merchant(C.CString(channelState), C.int(balanceMerchant), C.CString(nameMerchant))) - r := processCResponse(resp) + r, err := processCResponse(resp) + if err != nil { + return ChannelToken{}, MerchState{}, err + } merchState := MerchState{} - json.Unmarshal([]byte(r.MerchState), &merchState) + err = json.Unmarshal([]byte(r.MerchState), &merchState) + if err != nil { + return ChannelToken{}, MerchState{}, err + } channelToken := ChannelToken{} - json.Unmarshal([]byte(r.ChannelToken), &channelToken) - return channelToken, merchState + err = json.Unmarshal([]byte(r.ChannelToken), &channelToken) + return channelToken, merchState, err } -func BidirectionalInitCustomer(channelState string, channelToken ChannelToken, balanceCustomer int, balanceMerchant int, nameCustomer string) (ChannelToken, CustState) { - serChannelToken, _ := json.Marshal(channelToken) +func BidirectionalInitCustomer(channelState string, channelToken ChannelToken, balanceCustomer int, balanceMerchant int, nameCustomer string) (ChannelToken, CustState, error) { + serChannelToken, err := json.Marshal(channelToken) + if err != nil { + return ChannelToken{}, CustState{}, err + } resp := C.GoString(C.ffishim_bidirectional_init_customer(C.CString(channelState), C.CString(string(serChannelToken)), C.int(balanceCustomer), C.int(balanceMerchant), C.CString(nameCustomer))) - r := processCResponse(resp) + r, err := processCResponse(resp) + if err != nil { + return ChannelToken{}, CustState{}, err + } custState := CustState{} - json.Unmarshal([]byte(r.CustState), &custState) - json.Unmarshal([]byte(r.ChannelToken), &channelToken) - return channelToken, custState + err = json.Unmarshal([]byte(r.CustState), &custState) + if err != nil { + return ChannelToken{}, CustState{}, err + } + err = json.Unmarshal([]byte(r.ChannelToken), &channelToken) + return channelToken, custState, err } -func BidirectionalEstablishCustomerGenerateProof(channelToken ChannelToken, custState CustState) (ChannelToken, CustState, Commitment, CommitmentProof) { - serChannelToken, _ := json.Marshal(channelToken) - serCustState, _ := json.Marshal(custState) +func BidirectionalEstablishCustomerGenerateProof(channelToken ChannelToken, custState CustState) (ChannelToken, CustState, Commitment, CommitmentProof, error) { + serChannelToken, err := json.Marshal(channelToken) + if err != nil { + return ChannelToken{}, CustState{}, Commitment{}, CommitmentProof{}, err + } + serCustState, err := json.Marshal(custState) + if err != nil { + return ChannelToken{}, CustState{}, Commitment{}, CommitmentProof{}, err + } resp := C.GoString(C.ffishim_bidirectional_establish_customer_generate_proof(C.CString(string(serChannelToken)), C.CString(string(serCustState)))) - r := processCResponse(resp) - json.Unmarshal([]byte(r.CustState), &custState) - json.Unmarshal([]byte(r.ChannelToken), &channelToken) + r, err := processCResponse(resp) + if err != nil { + return ChannelToken{}, CustState{}, Commitment{}, CommitmentProof{}, err + } + err = json.Unmarshal([]byte(r.CustState), &custState) + if err != nil { + return ChannelToken{}, CustState{}, Commitment{}, CommitmentProof{}, err + } + err = json.Unmarshal([]byte(r.ChannelToken), &channelToken) + if err != nil { + return ChannelToken{}, CustState{}, Commitment{}, CommitmentProof{}, err + } com := Commitment{} - json.Unmarshal([]byte(r.Com), &com) + err = json.Unmarshal([]byte(r.Com), &com) + if err != nil { + return ChannelToken{}, CustState{}, Commitment{}, CommitmentProof{}, err + } comProof := CommitmentProof{} - json.Unmarshal([]byte(r.ComProof), &comProof) - return channelToken, custState, com, comProof + err = json.Unmarshal([]byte(r.ComProof), &comProof) + return channelToken, custState, com, comProof, err } -func BidirectionalEstablishMerchantIssueCloseToken(serChannelState string, com Commitment, comProof CommitmentProof, initCustBal int, initMerchBal int, merchState MerchState) Signature { - serCom, _ := json.Marshal(com) - serMerchState, _ := json.Marshal(merchState) - serComProof, _ := json.Marshal(comProof) +func BidirectionalEstablishMerchantIssueCloseToken(serChannelState string, com Commitment, comProof CommitmentProof, initCustBal int, initMerchBal int, merchState MerchState) (Signature, error) { + serCom, err := json.Marshal(com) + if err != nil { + return Signature{}, err + } + serMerchState, err := json.Marshal(merchState) + if err != nil { + return Signature{}, err + } + serComProof, err := json.Marshal(comProof) + if err != nil { + return Signature{}, err + } resp := C.GoString(C.ffishim_bidirectional_establish_merchant_issue_close_token(C.CString(serChannelState), C.CString(string(serCom)), C.CString(string(serComProof)), C.int(initCustBal), C.int(initMerchBal), C.CString(string(serMerchState)))) - r := processCResponse(resp) - closeToken := &Signature{} - json.Unmarshal([]byte(r.CloseToken), closeToken) - return *closeToken + r, err := processCResponse(resp) + if err != nil { + return Signature{}, err + } + closeToken := Signature{} + err = json.Unmarshal([]byte(r.CloseToken), &closeToken) + return closeToken, err } -func BidirectionalEstablishMerchantIssuePayToken(serChannelState string, com Commitment, merchState MerchState) Signature { - serCom, _ := json.Marshal(com) - serMerchState, _ := json.Marshal(merchState) +func BidirectionalEstablishMerchantIssuePayToken(serChannelState string, com Commitment, merchState MerchState) (Signature, error) { + serCom, err := json.Marshal(com) + if err != nil { + return Signature{}, err + } + serMerchState, err := json.Marshal(merchState) + if err != nil { + return Signature{}, err + } resp := C.GoString(C.ffishim_bidirectional_establish_merchant_issue_pay_token(C.CString(serChannelState), C.CString(string(serCom)), C.CString(string(serMerchState)))) - r := processCResponse(resp) - payToken := &Signature{} - json.Unmarshal([]byte(r.PayToken), payToken) - return *payToken + r, err := processCResponse(resp) + if err != nil { + return Signature{}, err + } + payToken := Signature{} + err = json.Unmarshal([]byte(r.PayToken), &payToken) + return payToken, err } -func BidirectionalVerifyCloseToken(serChannelState string, custState CustState, closeToken Signature) (bool, string, CustState) { - serCloseToken, _ := json.Marshal(closeToken) - serCustState, _ := json.Marshal(custState) +func BidirectionalVerifyCloseToken(serChannelState string, custState CustState, closeToken Signature) (bool, string, CustState, error) { + serCloseToken, err := json.Marshal(closeToken) + if err != nil { + return false, "", CustState{}, err + } + serCustState, err := json.Marshal(custState) + if err != nil { + return false, "", CustState{}, err + } resp := C.GoString(C.ffishim_bidirectional_verify_close_token(C.CString(serChannelState), C.CString(string(serCustState)), C.CString(string(serCloseToken)))) - r := processCResponse(resp) - json.Unmarshal([]byte(r.CustState), &custState) - return r.IsTokenValid, r.ChannelState, custState + r, err := processCResponse(resp) + if err != nil { + return false, "", CustState{}, err + } + err = json.Unmarshal([]byte(r.CustState), &custState) + return r.IsTokenValid, r.ChannelState, custState, err } -func BidirectionalEstablishCustomerFinal(serChannelState string, custState CustState, payToken Signature) (bool, string, CustState) { - serPayToken, _ := json.Marshal(payToken) - serCustState, _ := json.Marshal(custState) +func BidirectionalEstablishCustomerFinal(serChannelState string, custState CustState, payToken Signature) (bool, string, CustState, error) { + serPayToken, err := json.Marshal(payToken) + if err != nil { + return false, "", CustState{}, err + } + serCustState, err := json.Marshal(custState) + if err != nil { + return false, "", CustState{}, err + } resp := C.GoString(C.ffishim_bidirectional_establish_customer_final(C.CString(serChannelState), C.CString(string(serCustState)), C.CString(string(serPayToken)))) - r := processCResponse(resp) - json.Unmarshal([]byte(r.CustState), &custState) - return r.IsEstablished, r.ChannelState, custState + r, err := processCResponse(resp) + if err != nil { + return false, "", CustState{}, err + } + err = json.Unmarshal([]byte(r.CustState), &custState) + return r.IsEstablished, r.ChannelState, custState, err } -func BidirectionalPayGeneratePaymentProof(serChannelState string, custState CustState, amount int) (string, CustState) { - serCustState, _ := json.Marshal(custState) +func BidirectionalPayGeneratePaymentProof(serChannelState string, custState CustState, amount int) (string, CustState, error) { + serCustState, err := json.Marshal(custState) + if err != nil { + return "", CustState{}, err + } resp := C.GoString(C.ffishim_bidirectional_pay_generate_payment_proof(C.CString(serChannelState), C.CString(string(serCustState)), C.int(amount))) - r := processCResponse(resp) - json.Unmarshal([]byte(r.CustState), &custState) - return r.Payment, custState + r, err := processCResponse(resp) + if err != nil { + return "", CustState{}, err + } + err = json.Unmarshal([]byte(r.CustState), &custState) + return r.Payment, custState, err } -func BidirectionalPayVerifyPaymentProof(serChannelState string, serPayProof string, merchState MerchState) (Signature, MerchState) { - serMerchState, _ := json.Marshal(merchState) +func BidirectionalPayVerifyPaymentProof(serChannelState string, serPayProof string, merchState MerchState) (Signature, MerchState, error) { + serMerchState, err := json.Marshal(merchState) + if err != nil { + return Signature{}, MerchState{}, err + } resp := C.GoString(C.ffishim_bidirectional_pay_verify_payment_proof(C.CString(serChannelState), C.CString(serPayProof), C.CString(string(serMerchState)))) - r := processCResponse(resp) - json.Unmarshal([]byte(r.MerchState), &merchState) + r, err := processCResponse(resp) + if err != nil { + return Signature{}, MerchState{}, err + } + err = json.Unmarshal([]byte(r.MerchState), &merchState) + if err != nil { + return Signature{}, MerchState{}, err + } closeToken := &Signature{} - json.Unmarshal([]byte(r.CloseToken), closeToken) - return *closeToken, merchState + err = json.Unmarshal([]byte(r.CloseToken), closeToken) + return *closeToken, merchState, err } -func BidirectionalPayGenerateRevokeToken(serChannelState string, custState CustState, newCustState CustState, closeToken Signature) (RevokeToken, CustState) { - serCloseToken, _ := json.Marshal(closeToken) - serCustState, _ := json.Marshal(custState) - serNewCustState, _ := json.Marshal(newCustState) +func BidirectionalPayGenerateRevokeToken(serChannelState string, custState CustState, newCustState CustState, closeToken Signature) (RevokeToken, CustState, error) { + serCloseToken, err := json.Marshal(closeToken) + if err != nil { + return RevokeToken{}, CustState{}, err + } + serCustState, err := json.Marshal(custState) + if err != nil { + return RevokeToken{}, CustState{}, err + } + serNewCustState, err := json.Marshal(newCustState) + if err != nil { + return RevokeToken{}, CustState{}, err + } resp := C.GoString(C.ffishim_bidirectional_pay_generate_revoke_token(C.CString(serChannelState), C.CString(string(serCustState)), C.CString(string(serNewCustState)), C.CString(string(serCloseToken)))) - r := processCResponse(resp) - json.Unmarshal([]byte(r.CustState), &custState) + r, err := processCResponse(resp) + if err != nil { + return RevokeToken{}, CustState{}, err + } + err = json.Unmarshal([]byte(r.CustState), &custState) + if err != nil { + return RevokeToken{}, CustState{}, err + } revokeToken := RevokeToken{} - json.Unmarshal([]byte(r.RevokeToken), &revokeToken) - return revokeToken, custState + err = json.Unmarshal([]byte(r.RevokeToken), &revokeToken) + return revokeToken, custState, err } -func BidirectionalPayVerifyRevokeToken(revokeToken RevokeToken, merchState MerchState) (Signature, MerchState) { - serMerchState, _ := json.Marshal(merchState) - serRevokeToken, _ := json.Marshal(revokeToken) +func BidirectionalPayVerifyRevokeToken(revokeToken RevokeToken, merchState MerchState) (Signature, MerchState, error) { + serMerchState, err := json.Marshal(merchState) + if err != nil { + return Signature{}, MerchState{}, err + } + serRevokeToken, err := json.Marshal(revokeToken) + if err != nil { + return Signature{}, MerchState{}, err + } resp := C.GoString(C.ffishim_bidirectional_pay_verify_revoke_token(C.CString(string(serRevokeToken)), C.CString(string(serMerchState)))) - r := processCResponse(resp) - json.Unmarshal([]byte(r.MerchState), &merchState) + r, err := processCResponse(resp) + if err != nil { + return Signature{}, MerchState{}, err + } + err = json.Unmarshal([]byte(r.MerchState), &merchState) + if err != nil { + return Signature{}, MerchState{}, err + } payToken := &Signature{} - json.Unmarshal([]byte(r.PayToken), payToken) - return *payToken, merchState + err = json.Unmarshal([]byte(r.PayToken), payToken) + return *payToken, merchState, err } -func BidirectionalPayVerifyPaymentToken(serChannelState string, custState CustState, payToken Signature) (CustState, bool) { - serPayToken, _ := json.Marshal(payToken) - serCustState, _ := json.Marshal(custState) +func BidirectionalPayVerifyPaymentToken(serChannelState string, custState CustState, payToken Signature) (CustState, bool, error) { + serPayToken, err := json.Marshal(payToken) + if err != nil { + return CustState{}, false, err + } + serCustState, err := json.Marshal(custState) + if err != nil { + return CustState{}, false, err + } resp := C.GoString(C.ffishim_bidirectional_pay_verify_payment_token(C.CString(serChannelState), C.CString(string(serCustState)), C.CString(string(serPayToken)))) - r := processCResponse(resp) - json.Unmarshal([]byte(r.CustState), &custState) - return custState, r.IsPayValid + r, err := processCResponse(resp) + if err != nil { + return CustState{}, false, err + } + err = json.Unmarshal([]byte(r.CustState), &custState) + return custState, r.IsPayValid, err } -func BidirectionalCustomerClose(serChannelState string, custState CustState) CustClose { - serCustState, _ := json.Marshal(custState) +func BidirectionalCustomerClose(serChannelState string, custState CustState) (CustClose, error) { + serCustState, err := json.Marshal(custState) + if err != nil { + return CustClose{}, err + } resp := C.GoString(C.ffishim_bidirectional_customer_close(C.CString(serChannelState), C.CString(string(serCustState)))) - r := processCResponse(resp) - custClose:= CustClose{} - json.Unmarshal([]byte(r.CustClose), &custClose) - return custClose + r, err := processCResponse(resp) + if err != nil { + return CustClose{}, err + } + custClose := CustClose{} + err = json.Unmarshal([]byte(r.CustClose), &custClose) + return custClose, err } -func BidirectionalMerchantClose(serChannelState string, channelToken ChannelToken, serAddress string, custClose CustClose, merchState MerchState) (string, string, string) { - serMerchState, _ := json.Marshal(merchState) - serChannelToken, _ := json.Marshal(channelToken) - serCustClose, _ := json.Marshal(custClose) +func BidirectionalMerchantClose(serChannelState string, channelToken ChannelToken, serAddress string, custClose CustClose, merchState MerchState) (string, string, string, error) { + serMerchState, err := json.Marshal(merchState) + if err != nil { + return "", "", "", err + } + serChannelToken, err := json.Marshal(channelToken) + if err != nil { + return "", "", "", err + } + serCustClose, err := json.Marshal(custClose) + if err != nil { + return "", "", "", err + } resp := C.GoString(C.ffishim_bidirectional_merchant_close(C.CString(serChannelState), C.CString(string(serChannelToken)), C.CString(serAddress), C.CString(string(serCustClose)), C.CString(string(serMerchState)))) - r := processCResponse(resp) - return r.Wpk, r.MerchClose, r.Error + r, err := processCResponse(resp) + if err != nil { + return "", "", "", err + } + return r.Wpk, r.MerchClose, r.Error, nil } -func BidirectionalWtpVerifyCustCloseMessage(channelToken ChannelToken, serWpk string, serCloseMsg string, serCloseToken string) string { - serChannelToken, _ := json.Marshal(channelToken) +func BidirectionalWtpVerifyCustCloseMessage(channelToken ChannelToken, serWpk string, serCloseMsg string, serCloseToken string) (string, error) { + serChannelToken, err := json.Marshal(channelToken) + if err != nil { + return "", err + } resp := C.GoString(C.ffishim_bidirectional_wtp_verify_cust_close_message(C.CString(string(serChannelToken)), C.CString(serWpk), C.CString(serCloseMsg), C.CString(string(serCloseToken)))) - r := processCResponse(resp) - return r.Result + r, err := processCResponse(resp) + if err != nil { + return "", err + } + return r.Result, nil } -func BidirectionalWtpVerifyMerchCloseMessage(channelToken ChannelToken, serWpk string, serMerchClose string) string { - serChannelToken, _ := json.Marshal(channelToken) +func BidirectionalWtpVerifyMerchCloseMessage(channelToken ChannelToken, serWpk string, serMerchClose string) (string, error) { + serChannelToken, err := json.Marshal(channelToken) + if err != nil { + return "", err + } resp := C.GoString(C.ffishim_bidirectional_wtp_verify_merch_close_message(C.CString(string(serChannelToken)), C.CString(serWpk), C.CString(serMerchClose))) - r := processCResponse(resp) - return r.Result + r, err := processCResponse(resp) + if err != nil { + return "", err + } + return r.Result, nil } -func processCResponse(resp string) *setupResp { +func processCResponse(resp string) (*setupResp, error) { resp = cleanJson(resp) r := &setupResp{} - json.Unmarshal([]byte(resp), r) - return r + err := json.Unmarshal([]byte(resp), r) + return r, err } func cleanJson(in string) string { diff --git a/go/libbolt_test.go b/go/libbolt_test.go index fcdf63c..bf7352a 100644 --- a/go/libbolt_test.go +++ b/go/libbolt_test.go @@ -6,37 +6,50 @@ import ( ) func Test_ChannelSetup(t *testing.T) { - _, channelToken, merchState, custState := setup(1000, 100) + _, channelToken, merchState, custState, err := setup(1000, 100) + assert.Nil(t, err) assert.NotEqual(t, "", merchState) assert.NotEqual(t, "", custState) assert.NotEqual(t, "", channelToken) } -func setup(b0Cust int, b0Merch int) (string, ChannelToken, MerchState, CustState) { - channelState := BidirectionalChannelSetup("Test Channel", false) - channelToken, merchState := BidirectionalInitMerchant(channelState, b0Merch, "Bob") - channelToken, custState := BidirectionalInitCustomer(channelState, channelToken, b0Cust, b0Merch, "Alice") - return channelState, channelToken, merchState, custState +func setup(b0Cust int, b0Merch int) (string, ChannelToken, MerchState, CustState, error) { + channelState, err := BidirectionalChannelSetup("Test Channel", false) + if err != nil { + return "", ChannelToken{}, MerchState{}, CustState{}, err + } + channelToken, merchState, err := BidirectionalInitMerchant(channelState, b0Merch, "Bob") + if err != nil { + return "", ChannelToken{}, MerchState{}, CustState{}, err + } + channelToken, custState, err := BidirectionalInitCustomer(channelState, channelToken, b0Cust, b0Merch, "Alice") + return channelState, channelToken, merchState, custState, err } func Test_Establish(t *testing.T) { b0Cust := 1000 b0Merch := 100 - channelState, channelToken, merchState, custState := setup(b0Cust, b0Merch) + channelState, channelToken, merchState, custState, err := setup(b0Cust, b0Merch) + assert.Nil(t, err) - channelToken, custState, com, comProof := BidirectionalEstablishCustomerGenerateProof(channelToken, custState) + channelToken, custState, com, comProof, err := BidirectionalEstablishCustomerGenerateProof(channelToken, custState) + assert.Nil(t, err) - closeToken := BidirectionalEstablishMerchantIssueCloseToken(channelState, com, comProof, b0Cust, b0Merch, merchState) + closeToken, err := BidirectionalEstablishMerchantIssueCloseToken(channelState, com, comProof, b0Cust, b0Merch, merchState) + assert.Nil(t, err) assert.NotNil(t, closeToken) - isTokenValid, channelState, custState := BidirectionalVerifyCloseToken(channelState, custState, closeToken) + isTokenValid, channelState, custState, err := BidirectionalVerifyCloseToken(channelState, custState, closeToken) + assert.Nil(t, err) assert.True(t, isTokenValid) - payToken := BidirectionalEstablishMerchantIssuePayToken(channelState, com, merchState) + payToken, err := BidirectionalEstablishMerchantIssuePayToken(channelState, com, merchState) + assert.Nil(t, err) assert.NotNil(t, payToken) - isChannelEstablished, channelState, custState := BidirectionalEstablishCustomerFinal(channelState, custState, payToken) + isChannelEstablished, channelState, custState, err := BidirectionalEstablishCustomerFinal(channelState, custState, payToken) + assert.Nil(t, err) assert.True(t, isChannelEstablished) } @@ -44,39 +57,63 @@ func Test_Establish(t *testing.T) { func Test_Pay(t *testing.T) { b0Cust := 1000 b0Merch := 100 - channelState, channelToken, merchState, custState := setup(b0Cust, b0Merch) - channelToken, custState, com, comProof := BidirectionalEstablishCustomerGenerateProof(channelToken, custState) - closeToken := BidirectionalEstablishMerchantIssueCloseToken(channelState, com, comProof, b0Cust, b0Merch, merchState) - _, channelState, custState = BidirectionalVerifyCloseToken(channelState, custState, closeToken) - payToken := BidirectionalEstablishMerchantIssuePayToken(channelState, com, merchState) - _, channelState, custState = BidirectionalEstablishCustomerFinal(channelState, custState, payToken) + channelState, channelToken, merchState, custState, err := setup(b0Cust, b0Merch) + assert.Nil(t, err) + channelToken, custState, com, comProof, err := BidirectionalEstablishCustomerGenerateProof(channelToken, custState) + assert.Nil(t, err) + closeToken, err := BidirectionalEstablishMerchantIssueCloseToken(channelState, com, comProof, b0Cust, b0Merch, merchState) + assert.Nil(t, err) + _, channelState, custState, err = BidirectionalVerifyCloseToken(channelState, custState, closeToken) + assert.Nil(t, err) + payToken, err := BidirectionalEstablishMerchantIssuePayToken(channelState, com, merchState) + assert.Nil(t, err) + _, channelState, custState, err = BidirectionalEstablishCustomerFinal(channelState, custState, payToken) + assert.Nil(t, err) - payment, newCustState := BidirectionalPayGeneratePaymentProof(channelState, custState, 10) - closeToken, merchState = BidirectionalPayVerifyPaymentProof(channelState, payment, merchState) - revokeToken, custState := BidirectionalPayGenerateRevokeToken(channelState, custState, newCustState, closeToken) - payToken, merchState = BidirectionalPayVerifyRevokeToken(revokeToken, merchState) - custState, isTokenValid := BidirectionalPayVerifyPaymentToken(channelState, custState, payToken) + payment, newCustState, err := BidirectionalPayGeneratePaymentProof(channelState, custState, 10) + assert.Nil(t, err) + closeToken, merchState, err = BidirectionalPayVerifyPaymentProof(channelState, payment, merchState) + assert.Nil(t, err) + revokeToken, custState, err := BidirectionalPayGenerateRevokeToken(channelState, custState, newCustState, closeToken) + assert.Nil(t, err) + payToken, merchState, err = BidirectionalPayVerifyRevokeToken(revokeToken, merchState) + assert.Nil(t, err) + custState, isTokenValid, err := BidirectionalPayVerifyPaymentToken(channelState, custState, payToken) + assert.Nil(t, err) assert.True(t, isTokenValid) } func Test_Close(t *testing.T) { b0Cust := 1000 b0Merch := 100 - channelState, channelToken, merchState, custState := setup(b0Cust, b0Merch) - channelToken, custState, com, comProof := BidirectionalEstablishCustomerGenerateProof(channelToken, custState) - closeToken := BidirectionalEstablishMerchantIssueCloseToken(channelState, com, comProof, b0Cust, b0Merch, merchState) - _, channelState, custState = BidirectionalVerifyCloseToken(channelState, custState, closeToken) - payToken := BidirectionalEstablishMerchantIssuePayToken(channelState, com, merchState) - _, channelState, custState = BidirectionalEstablishCustomerFinal(channelState, custState, payToken) + channelState, channelToken, merchState, custState, err := setup(b0Cust, b0Merch) + assert.Nil(t, err) + channelToken, custState, com, comProof, err := BidirectionalEstablishCustomerGenerateProof(channelToken, custState) + assert.Nil(t, err) + closeToken, err := BidirectionalEstablishMerchantIssueCloseToken(channelState, com, comProof, b0Cust, b0Merch, merchState) + assert.Nil(t, err) + _, channelState, custState, err = BidirectionalVerifyCloseToken(channelState, custState, closeToken) + assert.Nil(t, err) + payToken, err := BidirectionalEstablishMerchantIssuePayToken(channelState, com, merchState) + assert.Nil(t, err) + _, channelState, custState, err = BidirectionalEstablishCustomerFinal(channelState, custState, payToken) + assert.Nil(t, err) - payment, newCustState := BidirectionalPayGeneratePaymentProof(channelState, custState, 10) - closeToken, merchState = BidirectionalPayVerifyPaymentProof(channelState, payment, merchState) - revokeToken, custState := BidirectionalPayGenerateRevokeToken(channelState, custState, newCustState, closeToken) - payToken, merchState = BidirectionalPayVerifyRevokeToken(revokeToken, merchState) - custState, _ = BidirectionalPayVerifyPaymentToken(channelState, custState, payToken) + payment, newCustState, err := BidirectionalPayGeneratePaymentProof(channelState, custState, 10) + assert.Nil(t, err) + closeToken, merchState, err = BidirectionalPayVerifyPaymentProof(channelState, payment, merchState) + assert.Nil(t, err) + revokeToken, custState, err := BidirectionalPayGenerateRevokeToken(channelState, custState, newCustState, closeToken) + assert.Nil(t, err) + payToken, merchState, err = BidirectionalPayVerifyRevokeToken(revokeToken, merchState) + assert.Nil(t, err) + custState, _, err = BidirectionalPayVerifyPaymentToken(channelState, custState, payToken) + assert.Nil(t, err) - custClose := BidirectionalCustomerClose(channelState, custState) - _, _, err := BidirectionalMerchantClose(channelState, channelToken, "onChainAddress", custClose, merchState) - assert.Equal(t, "merchant_close - Could not find entry for wpk & revoke token pair. Valid close!", err) + custClose, err := BidirectionalCustomerClose(channelState, custState) + assert.Nil(t, err) + _, _, Err, err := BidirectionalMerchantClose(channelState, channelToken, "onChainAddress", custClose, merchState) + assert.Nil(t, err) + assert.Equal(t, "merchant_close - Could not find entry for wpk & revoke token pair. Valid close!", Err) }