Ripple

如何從 websocket 交易源獲取交易?

  • April 10, 2014

我很難弄清楚如何從 Ripple websocket 交易提要中提取交易資訊(即與報價相關的付款)。

根據我目前的理解,我想會有一種方法可以將付款與報價相匹配,或者可能知道報價已被取消,因為它已經成功。這可能會奏效。

但我目前看不到任何實現這一目標的方法。

對於一個程序(一個客戶端、一個圖表站點、一個簡單的訂單簿顯示等)來有效地跟踪變化,它可以訂閱與其感興趣的交易流相關的交易流,一組賬戶,一組訂單簿,等等。或者,系統可以訂閱所有交易或獲取單獨的已關閉分類帳及其相關交易。

無論程序以何種方式獲取交易,每筆交易都包含一組元數據,描述它在包含它的分類帳中所做的所有更改。對於執行交易報價的任何部分的任何交易,它將包含引用交易報價的元數據,並描述它是如何更改的(消耗了多少,是否要刪除報價等)。

這是最近使用元數據的交易範例。這些可以通過https://ripple.com/tools/info/或<https://ripple.com/tools/api/>等網站輕鬆查看

{
 Account : "rGTfnwAqmPG5CN9vgzfubDQA4CkCpeK9zZ",
 Amount : { /* currency, issuer, ... */ },
 Destination : "rMDnTSD3TUizf2qvd9oGdCz3BXLheJyYtP",
 Fee : "15",
 Flags : 0,
 LastLedgerSequence : 6005165,
 Paths : [ /* 3 items */ ],
 SendMax : { /* currency, issuer, ... */ },
 Sequence : 3539,
 SigningPubKey : "02A25443D8FC411A395B626760062F506BF44FDA7CBFE004B1F2A7D2052CCEBC33",
 TransactionType : "Payment",
 TxnSignature : "3046022100D806A3FF5F2002F55BA48C4824CF8AEC70741411383CD79037012A85C3F92A9502210084335505CA91F28DDE04290FB7A46318F6337E2522D46731403BE686176F3A12",
 hash : "14A60155B276A78ED29FF11A9EE8E63AC1FCBED50CCE1AB30642B06E8D0E00D8",
 inLedger : 6005158,
 ledger_index : 6005158,
 meta : {
       AffectedNodes : [
             {
                   ModifiedNode : {
                         FinalFields : {
                               Account : "rH1hbPUfvhmqkEE3AWi77CZNexJyTGE6SF",
                               BookDirectory : "4627DFFCFF8B5A265EDBD8AE8C14A52325DBFEDAF4F5C32E5D04F0F1A6DD3F05",
                               BookNode : "0000000000000000",
                               Flags : 0,
                               OwnerNode : "0000000000000000",
                               Sequence : 71,
                               TakerGets : {
                                     currency : "USD",
                                     issuer : "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
                                     value : "221.8195734530501"
                               },
                               TakerPays : "30851122872"
                         },
                         LedgerEntryType : "Offer",
                         LedgerIndex : "0346EED5470F7A69B0A8DBF4B403DDD5CFD80F4A588555A934F00B09B4CE7AD2",
                         PreviousFields : {
                               TakerGets : {
                                     currency : "USD",
                                     issuer : "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
                                     value : "222.82157345305"
                               },
                               TakerPays : "30990483095"
                         },
                         PreviousTxnID : "B8613D4BE0C6EAA9F970CC2D580534B8A2B53F1BD844518BED4A73AA0FA52DFB",
                         PreviousTxnLgrSeq : 6005141
                   }
             },
             { /* ModifiedNode */ },
             { /* ModifiedNode */ },
             { /* DeletedNode */ },
             { /* ModifiedNode */ },
             { /* DeletedNode */ },
             { /* ModifiedNode */ },
             { /* ModifiedNode */ },
             { /* ModifiedNode */ },
             { /* ModifiedNode */ },
             { /* ModifiedNode */ },
             { /* ModifiedNode */ },
             { /* ModifiedNode */ }
       ],
       TransactionIndex : 0,
       TransactionResult : "tesSUCCESS"
 },
 validated : true
}

在此範例中,您可以看到事務恰好是類型Payment,但它修改了具有LedgerEntryType: offer. 這些就是您要查找的內容(來自任何和所有交易類型,“OfferCreate”、“OfferCancel”、“Payment”等)。諸如“BookDirectory”之類的欄位主要用於在內部查找帶有分類帳的節點,處理這些 JSON blob 的簡單工具可以只查看AccountSequence欄位以唯一標識特定的報價。在此範例中,既有 final TakerGets/ TakerPaysfields 也有 previous;減法告訴你接受了多少報價。(這些沒有列出貨幣/發行人對的欄位是 XRP 下降,除以 1e6 得到 XRP 的數量。)

如果付款或交叉報價要完全消耗現有報價,那麼您會看到它的“DeletedNode”條目,並且再次需要使用先前/最終欄位來查看消耗了多少報價(可能是如果報價因其他原因(例如不再資助或過期)而被刪除,則為零)。

如果您嘗試匯總特定報價在其生命週期中發生的所有變化,您可以通過PreviousTxnIDPreviousTxnLgrSeq欄位向後跟踪。

引用自:https://bitcoin.stackexchange.com/questions/24474