比特幣支付協議
支付協議被視為已棄用,將在更高版本的比特幣核心中刪除。該協議在一些錢包中存在多個安全設計缺陷和實現缺陷。當使用BIP70 URI時,使用者將開始在比特幣核心版本0.18中接收棄用警告。商家應該從BIP70過渡到更安全的選項,如BIP21。商家不應該要求BIP70付款,並且應該提供BIP21後備。
比特幣核心0.9支援新的支付協議。付款協議為付款請求添加了許多重要功能:
- 支援X.509證書和SSL加密,以驗證接收者的身份並幫助防止中間人攻擊。
- 提供有關所需支付給消費者的更多詳細資訊。
- 允許消費者直接向接收者提交交易而無需通過對等網路。這可以加快支付處理速度並使用計劃的功能,例如child-pays-for-parent交易費和離線NFC或基於藍芽的支付。
不再被要求支付給無意義的地址,例如 mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN
,而是要求消費者從接收者的X.509證書中支付公共名稱(CN)描述,例如 www.bitcoin.org
。
要使用支付協議請求付款,你使用擴充套件(但向後相容) bitcoin:
URI。例如:
bitcoin:mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN\ ?amount=0.10\ &label=Example+Merchant\ &message=Order+of+flowers+%26+chocolates\ &r=https://example.com/pay/mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN
除了 r
之外,上面提供的任何引數都不是支付協議所必需的,但是你的應用程式可能包含它們以便與尚未處理支付協議的錢包程式向後相容。
r
引數告知支援協議的錢包程式忽略其他引數並從提供的URL中獲取PaymentRequest。瀏覽器,QR程式碼閱讀器或處理URI的其他程式在URI上開啟消費者的比特幣錢包程式。
支付協議在BIP70,BIP71和BIP72中有詳細描述。可以在支付協議中使用的所有引數的示例CGI程式和描述在開發者示例支付協議子部分中提供。在本小節中,我們將簡要介紹故事格式如何使用付款協議。
客戶Charlie在商人Bob經營的網站上購物。Charlie在他的購物車中添加了一些商品,點選 Checkout With Bitcoin
按鈕。
Bob的伺服器自動將以下資訊新增到其採購數據庫:
- Charlie訂單的詳細資訊,包括訂購的物品和送貨地址。
- satoshis中的訂單總數,通過將法定價格轉換為satoshis中的價格並被建立。
- 該總數不再被接受的到期時間。
- Charlie應該向其傳送付款的pubkey指令碼。通常,這將是一個P2PKH或P2SH pubkey指令碼,其中包含一個唯一的(從未使用過的)secp256k1公鑰。
將所有資訊新增到資料庫後,Bob的伺服器顯示查詢點選付費的 bitcoin:
URI。
Charlie點選了他的瀏覽器中的 bitcoin:
URI。他的瀏覽器的URI處理程式將URI傳送到他的錢包程式。錢包知道支付協議,因此它解析 r
引數並向該URL傳送HTTP GET以查詢PaymentRequest訊息。
返回的PaymentRequest訊息可能包括私人資訊,例如Charlie的郵件地址,但錢包必須能夠訪問它而不使用先前的身份驗證,例如HTTP cookie,因此通常使用具有猜測部分的可公開訪問的HTTPS URL。為支付請求建立的唯一公鑰可用於建立唯一識別符號。這就是為什麼在上面的示例URI中,PaymentRequest URL包含P2PKH地址: https://example.com/pay/mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN
收到HTTP GET到上面的URL後,Bob的網路伺服器上的PaymentRequest生成CGI程式從URL中獲取唯一識別符號,並在資料庫中查詢相應的詳細資訊。然後,它會建立一個PaymentDetails訊息,其中包含以下資訊:
- satoshis中的訂單數量和要支付的pubkey指令碼。
- 一份包含訂購物品清單的備忘錄,因此Charlie知道他要付的是什麼。它可能還包括Charlie的郵寄地址,因此他可以仔細檢查它。
- PaymentDetails訊息的建立時間加上它到期的時間。
- Charlie的錢包應該向其傳送完成的交易的URL。
PaymentDetails訊息放在PaymentRequest訊息中。付款請求允許Bob的伺服器使用伺服器的X.509 SSL證書對整個請求進行簽名。(付款協議的目的是在將來允許其他簽名方法。)Bob的伺服器在對HTTP GET的回覆中向Charlie的錢包傳送付款請求。
Charlie的錢包收到PaymentRequest訊息,檢查其簽名,然後將顯示PaymentDetails訊息中的詳細資訊給Charlie。Charlie同意付款,因此錢包構建了對Bob提供的伺服器提供的pubkey指令碼的付款。與傳統的比特幣支付不同,Charlie的錢包不一定會自動將此付款廣播到網路。相反,錢包構造一個Payment訊息,並將其作為HTTP POST傳送到PaymentDetails訊息中提供的URL。除其他外,付款訊息包含:
- 簽約交易,Charlie付錢給Bob。
- Charlie可以傳送給Bob的可選備忘錄。(不保證Bob會讀它。)
- 退款地址(pubkey指令碼)如果Bob需要退回部分或全部Charlie的satoshis,可以支付。
Bob的伺服器接收付款訊息,驗證交易將所請求的金額支付給所提供的地址,然後將該交易廣播到網路。它還回復帶有PaymentACK訊息的HTTP POSTed Payment訊息,其中包括來自Bob伺服器的可選備忘錄,感謝Charlie的贊助並提供有關訂單的其他資訊,例如預期到達日期。
Charlie的錢包看到了PaymentACK,並告訴Charlie付款已經發送。PaymentACK並不意味著Bob已經驗證了Charlie的付款,請參閱下面的 驗證付款 小節,但這確實意味著Charlie可以在交易得到確認時再做其他事情。Bob的伺服器從區塊鏈驗證Charlie的交易已得到適當確認後,它授權運送Charlie的訂單。
如果發生爭議,Charlie可以從各種簽名或其他證明的資訊中生成經過加密驗證的收據。
- 由Bob的網路伺服器簽名的PaymentDetails訊息證明Charlie收到一張發票,用於為備忘錄欄位中指定的貨物支付指定數量的satoshis的指定pubkey指令碼。
- 比特幣區塊鏈可以證明Bob指定的pubkey指令碼支付了指定數量的satoshis。
如果需要退款,Bob的伺服器可以安全地支付Charlie提供的退款到pubkey指令碼。有關詳細資訊,請參閱下面的 Refunds 退款部分。
======================================================================
分享一些比特幣、以太坊、EOS、Fabric等區塊鏈相關的互動式線上程式設計實戰教程:
- java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Java程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
- php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Php程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
- c#比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在C#程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是C#工程師不可多得的比特幣開發學習課程。
- java以太坊開發教程,主要是針對java和android程式設計師進行區塊鏈以太坊開發的web3j詳解。
- python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
- php以太坊,主要是介紹使用php進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和交易等內容。
- 以太坊入門教程,主要介紹智慧合約與dapp應用開發,適合入門。
- 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
- ERC721以太坊通證實戰,課程以一個數字藝術品創作與分享DApp的實戰開發為主線,深入講解以太坊非同質化通證的概念、標準與開發方案。內容包含ERC-721標準的自主實現,講解OpenZeppelin合約程式碼庫二次開發,實戰專案採用Truffle,IPFS,實現了通證以及去中心化的通證交易所。
- C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智慧合約開發與互動、過濾器和交易等。
- EOS入門教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
- 深入淺出玩轉EOS錢包開發 ,本課程以手機EOS錢包的完整開發過程為主線,深入學習EOS區塊鏈應用開發,課程內容即涵蓋賬戶、計算資源、智慧合約、動作與交易等EOS區塊鏈的核心概念,同時也講解如何使用eosjs和eosjs-ecc開發包訪問EOS區塊鏈,以及如何在React前端應用中整合對EOS區塊鏈的支援。課程內容深入淺出,非常適合前端工程師深入學習EOS區塊鏈應用開發。
- Hyperledger Fabric 區塊鏈開發詳解 ,本課程面向初學者,內容即包含Hyperledger Fabric的身份證書與MSP服務、許可權策略、通道配置與啟動、鏈碼通訊介面等核心概念,也包含Fabric網路設計、nodejs鏈碼與應用開發的操作實踐,是Nodejs工程師學習Fabric區塊鏈開發的最佳選擇。
- Hyperledger Fabric java 區塊鏈開發詳解 ,課程面向初學者,內容即包含Hyperledger Fabric的身份證書與MSP服務、許可權策略、頻道配置與啟動、鏈碼通訊介面等核心概念,也包含Fabric網路設計、java鏈碼與應用開發的操作實踐,是java工程師學習Fabric區塊鏈開發的最佳選擇。
- tendermint區塊鏈開發詳解 ,本課程適合希望使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI介面、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操程式碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。
匯智網原創翻譯,轉載請標明出處。這裡是 比特幣支付協議