1. 程式人生 > >瑞波Ripple概念解析-複雜的付款型別

瑞波Ripple概念解析-複雜的付款型別

跨貨幣支付

在XRP賬本中,您可以傳送交換一種或多種已發行貨幣XRP或二者的交叉貨幣付款。與直接XRP付款一樣,這些付款使用付款交易型別。XRP賬本內的跨貨幣支付是完全原子的,這意味著支付完全執行或者沒有執行。

預設情況下,交叉貨幣付款會為其來源以可變費用向其目的地提供固定金額。跨貨幣支付也可以在設定了傳送限額後向目的地提供可變金額的部分支付。

先決條件

        根據定義,交叉貨幣支付至少涉及兩種貨幣,這意味著至少涉及一種貨幣必須是非XRP發行貨幣。         通常,這意味著使用由XRP賬本閘道器發行的一種或多種貨幣。此類貨幣由XRP賬本之外的資金支援,並可通過閘道器提取。        只要交易雙方都願意傳送或接收這些tokens並將它們視為有價值的東西,您也可以使用僅在XRP賬本內發行並且沒有外部支援的數字tokens 。        傳送者和接收者之間必須至少有一條路徑,並且所有路徑的總流動性必須足以支付款項。對於交叉貨幣付款,這通常意味著要撮合掛單從一種貨幣轉換為另一種貨幣。

Autobridging(自動尋找最優路徑)

用來交換兩種已發行貨幣的跨貨幣支付通過連線訂單簿(order books )來加強流動性,自動使用XRP來降低支付成本。例如,從USD傳送到MXN的付款會自動將USD轉換為XRP,然後將XRP轉換為MXN(注意:前提是這樣做比直接將USD轉換為MXN便宜)。

支票        XRP賬本中的支票功能允許使用者建立可以由預期接收方取消或兌現的延期付款。就像個人紙質支票一樣,XRP賬本支票從資金髮送人開始,建立一個指定金額和收款人的支票。接收方兌現支票,將資金從傳送方賬戶中提取到收款人的賬戶中。直到接收方兌現支票,才能移動錢。由於建立支票時資金並未被擱置,如果傳送方在收款人嘗試兌現時沒有足夠的資金,則兌現支票可能會失敗,就像傳統支票一樣。如果支票兌現失敗,傳送方可以重試,直到支票到期。

XRP賬本支票有到期時間,之後可能不再兌現。如果接收方未成功兌現支票,Check物件將保留在XRP賬本中直到有人取消為止。只有傳送方和接收方可以在支票過期或兌現前取消支票。當傳送方兌現了支票或有人取消支票時,Check物件將從賬本中移除。

支票與託管和付款渠道類似,但這些功能與支票之間存在一些重要區別:

·         您可以通過Checks支票傳送發行貨幣。通過付款渠道和託管,您只能傳送XRP。

·         支票不捆綁任何資金。支付渠道和託管的XRP只有在傳送方贖回(支付渠道)或到過期時間或滿足加密條件(託管)才能使用。

·         您可以通過Escrow將XRP傳送給您自己。您不能使用支票或支付渠道向您自己傳送XRP(或在支票,發行貨幣的情況下)。

注意:“ 檢查”修訂會更改OfferCreate事務的到期行為。有關更多資訊,請參閱優惠到期。

為什麼用支票Checks?         傳統的紙質支票允許人們在不立即兌換實際貨幣的情況下轉賬餘額。XRP賬本支票允許人們使用銀行業熟悉和接受的流程非同步交換資金。

       XRP賬本支票也解決了XRP賬本唯一的問題:它允許使用者拒絕不想要的付款或僅接受部分付款。這對於那些因合規原因需要小心接受付款的機構很有用。

       檢查可能啟用許多其他用例。Ripple鼓勵社群為支票尋找新的和創造性的應用程式。

為什麼用支票Checks?         傳統的紙質支票允許人們在不立即兌換實際貨幣的情況下轉賬餘額。XRP賬本支票允許人們使用銀行業熟悉和接受的流程非同步交換資金。

        XRP賬本支票也解決了XRP賬本唯一的問題:它允許使用者拒絕不想要的付款或僅接受部分付款。這對於那些因合規原因需要小心接受付款的機構很有用。

       檢查可能啟用許多其他用例。Ripple鼓勵社群為支票尋找新的和創造性的應用程式。

使用案例:付款授權         問題:為遵守像BSA,KYC,AML和CFT這樣的規定,金融機構必須提供關於他們收到資金來源的檔案。這些法規旨在通過要求機構披露機構處理的所有付款的來源和目的地來防止非法轉移資金。由於XRP賬本的性質,任何人都可能將XRP(並且在適當的情況下,包括髮行貨幣)傳送到XRP賬本的機構賬戶裡。處理這些不必要的支付會給這些機構的合規部門帶來巨大的成本和時間延遲,包括可能的罰款或處罰。

        解決方案:機構可以通過在交易中設定標誌,在其XRP賬本帳戶上啟用存款授權。這使該帳戶無法接收付款交易。通過在AccountSet交易中設定asfDepositAuth標誌來啟用存款授權的帳戶只能通過託管,付款渠道或支票接收資金。如果啟用存款授權,支票是最直接,最熟悉,最靈活的轉賬方式。

用法 檢查通常具有下述的生命週期。

步驟1:要建立支票,傳送方提交CheckCreate交易並指定接收方(Destination),到期時間(Expiration)以及可能從傳送方帳戶(SendMax)中扣除的最高金額。

步驟2:處理CheckCreate事務後,將在XRP賬本上建立一個Check物件。該物件包含由建立它的事務定義的Check的屬性。該物件只能由傳送方(通過取消CheckCancel交易)或接收方(通過取消或兌現)在到期時間過去之前進行修改。到期後,任何人都可以取消支票。

步驟3:為了兌現支票,接收者提交CheckCash交易。接收方有兩個選項可以兌現支票:

·         Amount - 接收者可以使用這個選項來指定一個確切的現金金額。這對於傳送方填寫的支票以涵蓋可能的轉賬費用並且接收人只能接受確切金額的發票,這在其他合同中的情況可能是有用的。

·         DeliverMin - 接收方可以使用此選項來指定他們願意從支票收到的最低金額。如果接收方使用此選項,則rippled儘可能多地嘗試交付並至少交付此金額。如果可以記入收款人的金額不低於此金額,則交易失敗。

如果傳送方有足夠的資金支付支票並且過期時間未過,則資金從傳送方的帳戶中扣除並記入收款人的賬戶,並且支票物件被銷燬。

過期案例 在過期的情況下,支票的生命週期如下所述。

所有檢查都以相同的方式開始,因此步驟1和步驟2是相同的。

步驟3a:如果支票在收款人可以兌現之前到期,則支票不能再兌現,但仍保留在賬本中。

步驟4a:在支票到期後,任何人都可以通過提交CheckCancel交易來取消它。該交易將從賬本中刪除支票。

支票的可用性         支票需要rippledv0.90.0或更高版本支援。支票修正案在2018-03-22正式XRP 賬本上獲得了大多數驗證節點的支援:EnableAmendment pseudo-transaction: EC0D90F114D4F3C599FEABCAF47DCF0CAC29A272D1EF6C9BEF7F420819540F04。有關如何啟用和投票修訂的更多資訊,請參閱修訂流程。

        不使用正式XRP賬本時,可以使用功能方法檢查支票修訂的狀態。

進一步閱讀 有關XRP賬本中的支票的更多資訊,請參閱:

交易參考檢查修正        CheckCreate         CheckCash         CheckCancel支票教程        傳送支票         按傳送方地址查詢支票         按接收方地址查詢支票         以確切金額兌換支票         以靈活金額兌換支票         取消支票有關相關功能的更多資訊,請參閱:

        存款授權         第三方託管         付款頻道教程

第三方託管         託管是XRP賬本的特徵,允許您傳送有條件的XRP支付交易。這些有條件的付款(稱為託管)將XRP留出,並在滿足特定條件後再交付。成功完成託管的條件包括基於時間的解鎖和加密條件。如果未及時完成,也可以將Escrow設定為過期。有條件持有的支付交易是 Interledger Protocol 支援的一個關鍵特徵,它可以使支付鏈跨越任何數量的賬本。

        在託管中擱置的XRP被鎖定。在託管成功完成或取消之前,任何人都不能使用或銷燬XRP。在到期時間之前,只有預期的接收者可以獲得XRP。過了到期時間後,XRP只能退回給傳送方。

用法

步驟1:要傳送託管,傳送方使用EscrowCreate事務來鎖定某些XRP。該交易定義了完成時間,到期時間或兩者。交易也可以定義一個加密條件,必須滿足完成託管。此交易必須定義XRP的預期接收方; 接收方可能與傳送方相同。

步驟2:在處理完此事務後,XRP賬本擁有一個託管物件,用於儲存託管的XRP。該物件包含由建立它的事務定義的託管屬性。如果此託管有結束時間,則在此之前沒有人可以訪問XRP。

步驟3:接收方或任何其他XRP賬本地址傳送EscrowFinish交易以交付XRP。如果符合正確的條件,則會銷燬賬本中的Escrow物件,並將XRP歸入預期的收款人。如果託管存在加密條件,則該交易必須包含該條件的履行。如果託管的過期時間已經過去,則EscrowFinish交易將失敗並顯示程式碼tecNO_PERMISSION。

過期案例

所有託管開始的方式相同,因此步驟1和2與成功案例中的步驟相同。

步驟3a:如果託管有到期時間,並且在此之前尚未成功完成,則託管被視為過期。它繼續存在於XRP賬本中,但不能再成功完成。(過期物件保留在賬本中,直到事務修改它們為止。基於時間的觸發器不能更改賬本內容。)

步驟4a:傳送方或任何其他XRP賬本地址傳送EscrowCancel交易以取消過期的託管。這會銷燬賬本中的Escrow物件並將XRP返回給傳送方。

限制         Escrow被設計為一項功能,可以使XRP賬本在Inter賬本協議和其他智慧合約中使用。目前的版本有一個適度的範圍以避免複雜性。

        託管僅適用於XRP,不適用於已發行的貨幣。         託管要求至少傳送兩筆交易:一筆交易建立託管,一筆交易完成或取消。因此,在非常小的數額內託管支付可能在財務上並不明智,因為參與者必須支付兩筆交易的交易費用。         使用加密條件時,交易完成託管的成本比平時高。         所有託管必須具有“完成後”時間或到期時間,或兩者兼有。當建立代管的交易執行時,既不是過去的時間。          定時釋出和到期僅限於XRP賬本關閉的解決方案。這意味著在實踐中,時間可能會四捨五入到大約5秒的時間間隔,具體取決於賬本的確切時間。         唯一支援的加密條件型別是PREIMAGE-SHA-256。 託管提供了最適合高價值,低數量支付的強有力保證。付款渠道更適合快速,低價值的付款。當然,無條件支付對於許多用例也是可取的。

託管的可用性 Conditional payments have been enabled by the "Escrow" Amendment to the XRP Ledger Consensus Protocol since 2017-03-31. A previous version of the same functionality was available on the Ripple Test Net by the name "Suspended Payments" (SusPay) in 2016.

在獨立模式下進行測試時,無論修改狀態如何,您都可以在本地啟用Escrow功能。將以下節新增到您的rippled.cfg:

[features] Escrow 您可以使用特徵方法檢查託管修正的狀態。

EscrowFinish交易費用 在使用加密條件時,由於驗證密碼條件實現所涉及的處理負載較高,因此EscrowFinish事務必須支付較高的交易費用。

如果託管純粹是時間鎖定而沒有加密條件,則EscrowFinish僅參考交易的標準交易費用支付費用。

所需的額外交易成本與履行的規模成正比。目前,滿足要求的EscrowFinish要求交易成本最低為330 滴XRP,並且在履行規模中每16位元組有10滴。如果交易是多重簽署的,則多次簽署的成本將被新增到履行的成本中。

注意:上述公式基於一個事務的參考成本為10個XRP的假設。

如果費用投票更改了該reference_fee值,則公式將根據新的參考成本進行縮放。具有履約的EscrowFinish交易的廣義公式如下:

reference_fee * (signer_count + 33 + (fulfillment_bytes / 16))

為什麼託管?

Escrow的古老做法使得許多種金融交易成為可能,特別是在線上。通過讓一個值得信賴的第三方在交易或評估期間持有資金,雙方都可以放心,另一方必須阻止交易的結束。

託管功能通過用XRP帳簿中內建的自動化系統取代第三方來進一步實現這一想法,從而鎖定和釋放資金是公正的,並且可以自動化。

完全自動託管由XRP賬本本身的完整性支援,解決了Ripple的重要問題,並且我們認為還有許多其他使用託管的用例。Ripple鼓勵業界找到新的獨特的方式來代管使用。

舉例:基於時間的鎖定背景:Ripple擁有大量的XRP,它有條不紊地出售,作為資助和激勵XRP 賬本及相關技術健康發展的一種方式。同時,擁有如此大量的XRP會給公司帶來問題,例如:

        使用XRP賬本的個人和企業擔心,如果Ripple通過以比平常更高的利率銷售來刺激市場,他們在XRP上的投資可能會被稀釋或貶值。         雖然flooding the marke對Ripple來說是一個長期的損失,但公司這樣做的可能性會對XRP的價格施加下行壓力,從而降低公司資產的價值。          Ripple一定要謹慎管理其帳戶的所有權,以防止數字竊取和其他形式的惡意行為,即使是內部人員也是如此。

解決方案:通過將550億XRP放入基於時間的託管中,Ripple確保迴圈中XRP的供應可預測並以緩慢但穩定的速率增加。其他持有XRP的人都知道,即​​使公司的優先事項或策略發生變化,Ripple也不能淹沒市場。

將資金存入第三方託管並不能直接保護Ripple的資產免受惡意行為者的侵害,但是如果惡意行為者對Ripple的XRP賬戶進行臨時控制,它會大幅度減少可能被迅速盜走或重定向的XRP數量。這降低了XRP災難性損失的風險,並增加了Ripple檢測,防止和追蹤Ripple XRP資產非預期使用的時間。

舉例:Interledger Payments支付

背景:在快速發展的金融技術世界中,核心挑戰之一是協調跨多個數字貨幣系統或賬本的活動。許多提出的解決方案(包括XRP賬本的早期觀點)可以被縮減為建立“一個賬本來統治它們”。Ripple認為沒有一個系統能夠滿足世界上每個人的需求:事實上,一些理想的功能是相互排斥的。相反,Ripple認為,網際網路賬本 - 一個網際網路 - 是金融技術的真正未來。所述Inter賬本協議定義了用於製備如許多系統儘可能連線可靠順暢地標準。

賬本支付的最基本原則是有條件轉移。多跳支付有一個風險問題:中間跳躍越多,付款失敗的地方就越多。Inter賬本通過“ 兩階段承諾 ” 的金融解決方案解決了這個問題,其中兩個步驟是(1)準備有條件的轉賬,然後(2)履行執行轉賬的條件。Inter賬本專案定義了一個加密條件規範,以標準化自動化方式來定義和驗證條件,並將SHA-256雜湊定義為這些條件的“共同點”。

解決方案:藉助Escrow功能,XRP分帳器非常適合使用Inter賬本協議來橋接多跳付款,因為它本身支援基於PREIMAGE-SHA-256加密條件提供XRP的傳輸,並且在提交後幾秒鐘內即可執行這些傳輸與匹配的履行。

進一步閱讀 有關XRP賬本中託管的更多資訊,請參閱以下內容:

託管教程        傳送延時託管         傳送有條件的託管         通過傳送方或接收方查詢託管 交易參考        EscrowCreate交易         EscrowFinish交易         EscrowCancel交易 賬本參考         託管物件 有關Inter賬本以及條件傳輸如何跨多個賬本實現安全支付的更多資訊,請參閱Inter賬本架構。

有關Ripple的55億XRP鎖定的更多資訊,請參閱Ripple的Insights部落格。

部分付款 在預設情況下,XRP賬本Amount中的付款交易欄位指的是在支付匯率和轉賬費用後要交付的確切金額。“部分支付”標誌(tfPartialPayment)允許通過減少收到的金額來使交易成功,而不是增加發送的金額。部分支付對返還支付很有用,而不會對自己造成額外費用。

無論交易型別如何,用於交易費用的XRP金額總是從傳送方的帳戶中扣除。

部分支付可用於利用與XRP賬本的原生整合從交易所和閘道器竊取資金。本文件的部分支付利用部分描述瞭如何利用此漏洞以及如何避免它。

語義 沒有部分付款 傳送不使用部分支付標誌的支付時,Amount交易SendMax欄位指定要交付的確切金額,並且該欄位指定要傳送的最大金額和貨幣。如果付款無法在Amount不超過SendMax引數的情況下交付全款,或者由於其他原因無法交付全額金額,交易將失敗。如果該SendMax欄位在交易指令中被忽略,則認為它等於Amount。在這種情況下,只有當費用總額為0時,付款才能成功。

換一種說法:

Amount  + (fees) = (sent amount) ≤ SendMax 在這個公式中,“費用”是指轉賬費用和匯率。“已傳送金額”和已交付金額(Amount)可以以不同貨幣計價,並通過在XRP去中心化交易所中撮合掛單進行轉換。

注:該Fee交易的領域是指XRP 交易成本,該交易轉發到網路後被銷燬。指定的確切交易成本始終從傳送方中扣除,並且與任何型別付款的收費計算完全分開。

部分付款 在傳送啟用了部分支付標誌的支付時,Amount交易欄位指定了要交付的最大金額。儘管收費包括費用,流動性不足,接收賬戶信託額度不足或其他原因,但部分支付可以成功傳送部分預期價值。

可選DeliverMin欄位指定了要交付的最低金額。該SendMax領域的功能與非部分支付相同。如果部分付款交易的交付金額大於等於該DeliverMin欄位,且不超過SendMax金額,則該部分付款交易成功。如果DeliverMin未指定該欄位,則可以通過提供任何大於0的數來支付部分付款。

換一種說法:

Amount ≥ (Delivered Amount) = SendMax - (Fees) ≥ DeliverMin > 0 部分支付限制

部分付款具有以下限制:

        部分支付無法建立資金地址; 這種情況下返回結果程式碼 telNO_DST_PARTIAL。         直接XRP到XRP付款不能是部分付款; 這種情況下返回結果程式碼 temBAD_SEND_XRP_PARTIAL。         但是,issuance至XRP付款或XRP到issuance付款可以是部分付款。

delivered_amount欄位 為了幫助理解實際交付的部分付款的金額,成功的付款交易的元資料包含一個delivered_amount欄位。該欄位描述實際交付的金額,格式與Amount欄位相同。

對於非部分支付,delivered_amount交易元資料的Amount欄位等於交易欄位。當交付已發行貨幣時,由於四捨五入的原因,delivered_amount與Amount欄位可能略有不同。

交付金額不適用於符合以下兩個標準的交易:

·         部分付款

·         2014-01-20之前的賬本交易

如果兩個條件均為真,則delivered_amount包含字串值unavailable而不是實際金額。如果發生這種情況,您只能通過讀取交易元資料中的AffectedNodes來確定實際交付金額。如果事務遞送的貨幣發行和issuer的Amount是相同的帳戶作為Destination地址,所遞送的量可以在多個之間劃分AffectedNodes表示信任線不同對手成員。

您可以在以下位置找到該delivered_amount欄位: API

Method

Field

JSON-RPC / WebSocket

account_tx method

result.transactions array members' meta.delivered_amount

JSON-RPC / WebSocket

tx method

result.meta.delivered_amount

JSON-RPC / WebSocket

transaction_entry method

result.metadata.delivered_amount

RippleAPI

getTransaction method

outcome.deliveredAmount

RippleAPI

getTransactions method

array members' outcome.deliveredAmount

部分支付利用 如果一家金融機構與XRP賬簿的整合假定Amount支付領域始終是全額交付的,惡意行為者可能會利用這一假設從該機構竊取資金。只要這些機構的軟體沒有正確處理部分支付,這種利用可以用於閘道器,交易所或商家。

處理傳入的支付交易的正確方法是使用delivered_amount元資料欄位,而不是Amount場。通過這種方式,一個機構從不會誤解它實際收到了多少。

利用場景步驟 為了利用一個脆弱的金融機構,惡意行為者可以這樣做:

        1 惡意演員向機構傳送支付交易。此事務有一個大的Amount欄位,並啟用了tfPartialPayment標誌。         2 部分支付成功(結果程式碼tesSUCCESS),但實際上只提供了非常少量的指定貨幣。         3 易受攻擊的機構Amount無需檢視Flags欄位或delivered_amount元資料欄位即可讀取交易的欄位。          4 儘管在XRP賬本中只收到了一個小得多的delivered_amount數量的賬單,但是這個脆弱的機構將這個惡意行為者執行了一個外部系統,比如該機構自己的賬本。         5 在易受攻擊的機構注意到這種差異之前,惡意行為者儘可能多地將餘額提取到另一個系統。         惡意行為者通常寧願將餘額轉換為另一種加密貨幣,如比特幣,因為區塊鏈交易通常是不可逆的。隨著撤回到法定貨幣體系,金融機構可能能夠在最初執行後幾天撤銷或取消交易。         在交換的情況下,惡意行為人也可以將XRP餘額直接回收到XRP賬本中。在商人的情況下,操作順序略有不同,但概念是相同的

        惡意的演員要求購買大量的商品或服務。         易受攻擊的商家向惡意行為者提供這些商品和服務的價格。         惡意演員向商家傳送支付交易。此事務有一個大的Amount欄位,並啟用了tfPartialPayment標誌。         部分支付成功(結果程式碼tesSUCCESS),但只提供指定的非常少量的貨幣。         易受攻擊的商家Amount無檢視Flags欄位或delivered_amount元資料欄位即可讀取該事務的欄位。         易受攻擊的商家將發票視為已付款,並將商品或服務提供給惡意行為者,儘管delivered_amount在XRP賬本中僅收到了更小的發票。        惡意行為者在商家注意到這種差異之前使用,轉售或者銷售商品和服務。

進一步的緩解措施 處理傳入交易時使用delivered_amount欄位足以避免此漏洞。儘管如此,額外的主動商業行為還可以避免或減輕這種類似漏洞攻擊的可能性。例如:

        為您的業務邏輯新增額外的健全性檢查以處理提款。如果您在XRP賬簿中持有的總餘額與您預期的資產和義務不符,請不要處理提款。         遵循“瞭解您的客戶”指南並嚴格驗證您的客戶身份。您可能會提前識別並阻止惡意使用者,或對利用您的系統的惡意攻擊者採取法律行動。

付款渠道

付款渠道是一項傳送“非同步”XRP付款的高階功能,可以分為很小的增量並在稍後解決。

支付渠道的XRP在特定時間段內被預留。傳送方根據頻道建立宣告,接收方驗證該宣告而不傳送XRP賬本處理或等待新的賬本版本獲得一致批准。(這是一個非同步過程,因為它與通過一致性獲得交易的通常模式分開。)在任何時候,接收方都可以兌換Claim 以獲得由該索賠授權的XRP數量。作為通常的共識流程的一部分,使用標準的XRP賬本交易來解決此類索賠。這種單一交易可以包含任何數量的由較小索賠保證的交易。

由於理賠可以單獨進行驗證,但之後可以批量結算,因此支付渠道可以以僅限參與者建立和驗證這些索賠的數字簽名的能力進行交易。這個限制主要基於參與者硬體的速度和簽名演算法的複雜性。為獲得最大速度,請使用比XRP賬本的預設secp256k1 ECSDA簽名更快的Ed25519簽名。研究表明,每秒能夠建立超過Ed25519 100,000個簽名並驗證每秒超過70,000個簽名 在2011年的商品硬體上。

為什麼使用付款渠道

使用付款渠道的過程總是涉及兩方,即付款人和收款人。付款人是使用作為收款人客戶的XRP賬本的個人或機構。收款人是收到XRP作為商品或服務付款的個人或企業。

付款渠道本質上並未指明您可以隨意購買和出售的東西。但是,適合付款渠道的商品和服務型別包括:

        可以即時傳輸的東西,如數字專案         廉價的東西,其中處理交易的成本是價格的一個不平凡的部分         通常情況下,散裝物品都是購買的,而預先確定的數量並不知道

付款渠道生命週期

下圖總結了付款渠道的生命週期:

也可以看看

        使用付款渠道,這是一個教程,介紹使用付款渠道的過程。         Escrow,對於價值較高,速度較低的有條件XRP付款的類似功能  

總結:

複雜的支付功能有:

跨貨幣支付,多種發行貨幣的交易,會自動選擇最優路徑,跨貨幣支付也使用部分支付交易

支票,可以設定過期時間,接受者可以拒絕支付

託管,可以對XRP進行鎖定

部分付款,支付的金額是delived_amount,而不是amount

付款通道,類似於比特幣的微支付通道