Skip to content
This repository was archived by the owner on Sep 12, 2019. It is now read-only.

Commit 405c9d9

Browse files
committed
Send only relevant data to callbacks (#17)
1 parent 713469b commit 405c9d9

File tree

3 files changed

+99
-39
lines changed

3 files changed

+99
-39
lines changed

readme_compliance.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ If set in the config file, this callback will be called when sanctions checks ne
155155

156156
name | description
157157
--- | ---
158-
`data` | Stringified [AuthData](https://github.com/stellar/bridge-server/blob/master/src/github.com/stellar/gateway/protocols/compliance/auth.go#L34) JSON
158+
`sender` | Sender info JSON
159159

160160
The customer information that is exchanged between FIs is flexible but the typical fields are:
161161

@@ -166,7 +166,7 @@ The customer information that is exchanged between FIs is flexible but the typic
166166
#### Response
167167

168168
Respond with one of the following status codes:
169-
* `200 OK` when sender/receiver is allowed and the payment should be proceeded,
169+
* `200 OK` when sender/receiver is allowed and the payment should be processed,
170170
* `202 Accepted` when your callback needs some time for processing,
171171
* `403 Forbidden` when sender/receiver is denied.
172172

@@ -186,9 +186,13 @@ If set in the config file, this callback will be called when the sender needs yo
186186

187187
name | description
188188
--- | ---
189-
`data` | Stringified [AuthData](https://github.com/stellar/bridge-server/blob/master/src/github.com/stellar/gateway/protocols/compliance/auth.go#L34) JSON
189+
`amount` | Payment amount
190+
`asset_code` | Payment asset code
191+
`asset_issuer` | Payment asset issuer
192+
`sender` | Sender info JSON
193+
`note` | Note attached to the payment
190194

191-
The customer information that is exchanged between FIs is flexible but the typical fields are:
195+
The customer information (`sender`) that is exchanged between FIs is flexible but the typical fields are:
192196

193197
* Full Name
194198
* Date of birth

src/github.com/stellar/gateway/compliance/handlers/request_handler_auth.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"github.com/stellar/gateway/protocols/memo"
2020
"github.com/stellar/gateway/server"
2121
"github.com/stellar/gateway/submitter"
22+
baseAmount "github.com/stellar/go-stellar-base/amount"
2223
"github.com/stellar/go-stellar-base/xdr"
2324
"github.com/zenazn/goji/web"
2425
)
@@ -151,7 +152,7 @@ func (rh *RequestHandler) HandlerAuth(c web.C, w http.ResponseWriter, r *http.Re
151152
} else {
152153
resp, err := rh.Client.PostForm(
153154
rh.Config.Callbacks.Sanctions,
154-
url.Values{"data": {string(request.Data)}},
155+
url.Values{"sender": {memoPreimage.Transaction.SenderInfo}},
155156
)
156157
if err != nil {
157158
log.WithFields(log.Fields{
@@ -235,9 +236,28 @@ func (rh *RequestHandler) HandlerAuth(c web.C, w http.ResponseWriter, r *http.Re
235236
}
236237
} else {
237238
// Ask user
239+
var amount, assetType, assetCode, assetIssuer string
240+
241+
if len(tx.Operations) > 0 {
242+
operationBody := tx.Operations[0].Body
243+
if operationBody.Type == xdr.OperationTypePayment {
244+
amount = baseAmount.String(operationBody.PaymentOp.Amount)
245+
operationBody.PaymentOp.Asset.Extract(&assetType, &assetCode, &assetIssuer)
246+
} else if operationBody.Type == xdr.OperationTypePathPayment {
247+
amount = baseAmount.String(operationBody.PathPaymentOp.DestAmount)
248+
operationBody.PathPaymentOp.DestAsset.Extract(&assetType, &assetCode, &assetIssuer)
249+
}
250+
}
251+
238252
resp, err := rh.Client.PostForm(
239253
rh.Config.Callbacks.AskUser,
240-
url.Values{"data": {string(request.Data)}},
254+
url.Values{
255+
"amount": {amount},
256+
"asset_code": {assetCode},
257+
"asset_issuer": {assetIssuer},
258+
"sender": {memoPreimage.Transaction.SenderInfo},
259+
"note": {memoPreimage.Transaction.Note},
260+
},
241261
)
242262
if err != nil {
243263
log.WithFields(log.Fields{

src/github.com/stellar/gateway/compliance/handlers/request_handler_auth_test.go

Lines changed: 69 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -219,10 +219,26 @@ func TestRequestHandlerAuth(t *testing.T) {
219219
FetchInfo: "http://fetch_info",
220220
}
221221

222+
memoPreimage := memo.Memo{
223+
Transaction: memo.Transaction{
224+
Route: "bob*acme.com",
225+
Note: "Happy birthday",
226+
SenderInfo: "senderInfoJson",
227+
Extra: "extra",
228+
},
229+
}
230+
222231
Convey("When all params are valid (NeedInfo = `false`)", func() {
232+
authData := compliance.AuthData{
233+
Sender: "alice*stellar.org",
234+
NeedInfo: false,
235+
Tx: "AAAAAC3/58Z9rycNLmF6voWX9VmDETFVGhFoWf66mcMuir/DAAAAZAAAAAAAAAAAAAAAAAAAAANeCnOi6ZSpMNIMFUUVIfbBc5OA5kpzDbg+AJ6X8/WynAAAAAEAAAAAAAAAAgAAAAFVU0QAAAAAAEbpO2riZmlZMkHuBxUBYAAas3hWyo9VL1IOdnfXAVFBAAAAADuaygAAAAAAGVL83DJFwH0sKmy6AIgJYD7GexiD0YuzSMioBCAUOJwAAAABVVNEAAAAAAAZUvzcMkXAfSwqbLoAiAlgPsZ7GIPRi7NIyKgEIBQ4nAAAAAAL68IAAAAAAgAAAAAAAAABRVVSAAAAAAALt4SwWfv1PIJvDRMenW0zu91YxZbphRFLA4O+gbAaigAAAAA=",
236+
Memo: string(memoPreimage.Marshal()),
237+
}
238+
223239
params := url.Values{
224-
"data": {"{\"sender\":\"alice*stellar.org\",\"need_info\":false,\"tx\":\"AAAAAC3/58Z9rycNLmF6voWX9VmDETFVGhFoWf66mcMuir/DAAAAZAAAAAAAAAAAAAAAAAAAAANEE2+jVbNnihFGrRb36GSelPtPwh/nfoMQwGD2HKr/igAAAAEAAAAAAAAAAgAAAAFVU0QAAAAAAEbpO2riZmlZMkHuBxUBYAAas3hWyo9VL1IOdnfXAVFBAAAAADuaygAAAAAAGVL83DJFwH0sKmy6AIgJYD7GexiD0YuzSMioBCAUOJwAAAABVVNEAAAAAAAZUvzcMkXAfSwqbLoAiAlgPsZ7GIPRi7NIyKgEIBQ4nAAAAAAL68IAAAAAAgAAAAAAAAABRVVSAAAAAAALt4SwWfv1PIJvDRMenW0zu91YxZbphRFLA4O+gbAaigAAAAA=\",\"memo\":\"{}\"}"},
225-
"sig": {"ACamNqa0dF8gf97URhFVKWSD7fmvZKc5At+8dCLM5ySR0HsHySF3G2WuwYP2nKjeqjKmu3U9Z3+u1P10w1KBCA=="},
240+
"data": {string(authData.Marshal())},
241+
"sig": {"Q2cQVOn/A+aOxrLLeUPwHmBm3LMvlfXN8tDHo4Oi6SxWWueMTDfRkC4XvRX4emLij+Npo7/GfrZ82CnT5yB5Dg=="},
226242
}
227243

228244
mockStellartomlResolver.On(
@@ -243,7 +259,7 @@ func TestRequestHandlerAuth(t *testing.T) {
243259
mockHTTPClient.On(
244260
"PostForm",
245261
"http://sanctions",
246-
url.Values{"data": params["data"]},
262+
url.Values{"sender": {memoPreimage.Transaction.SenderInfo}},
247263
).Return(
248264
net.BuildHTTPResponse(403, "forbidden"),
249265
nil,
@@ -253,17 +269,17 @@ func TestRequestHandlerAuth(t *testing.T) {
253269
responseString := strings.TrimSpace(string(response))
254270
assert.Equal(t, 200, statusCode)
255271
expected := test.StringToJSONMap(`{
256-
"info_status": "ok",
257-
"tx_status": "denied"
258-
}`)
272+
"info_status": "ok",
273+
"tx_status": "denied"
274+
}`)
259275
assert.Equal(t, expected, test.StringToJSONMap(responseString))
260276
})
261277

262278
Convey("when sanctions server returns accepted it returns tx_status `pending`", func() {
263279
mockHTTPClient.On(
264280
"PostForm",
265281
"http://sanctions",
266-
url.Values{"data": params["data"]},
282+
url.Values{"sender": {memoPreimage.Transaction.SenderInfo}},
267283
).Return(
268284
net.BuildHTTPResponse(202, "pending"),
269285
nil,
@@ -284,16 +300,16 @@ func TestRequestHandlerAuth(t *testing.T) {
284300
mockHTTPClient.On(
285301
"PostForm",
286302
"http://sanctions",
287-
url.Values{"data": params["data"]},
303+
url.Values{"sender": {memoPreimage.Transaction.SenderInfo}},
288304
).Return(
289305
net.BuildHTTPResponse(200, "ok"),
290306
nil,
291307
).Once()
292308

293309
authorizedTransaction := &entities.AuthorizedTransaction{
294-
TransactionID: "29ec92f95b00dd8e8bbb0d2a2fc90db8ed5b26c396c44ac978bb13ccd8d25524",
295-
Memo: "RBNvo1WzZ4oRRq0W9+hknpT7T8If536DEMBg9hyq/4o=",
296-
TransactionXdr: "AAAAAC3/58Z9rycNLmF6voWX9VmDETFVGhFoWf66mcMuir/DAAAAZAAAAAAAAAAAAAAAAAAAAANEE2+jVbNnihFGrRb36GSelPtPwh/nfoMQwGD2HKr/igAAAAEAAAAAAAAAAgAAAAFVU0QAAAAAAEbpO2riZmlZMkHuBxUBYAAas3hWyo9VL1IOdnfXAVFBAAAAADuaygAAAAAAGVL83DJFwH0sKmy6AIgJYD7GexiD0YuzSMioBCAUOJwAAAABVVNEAAAAAAAZUvzcMkXAfSwqbLoAiAlgPsZ7GIPRi7NIyKgEIBQ4nAAAAAAL68IAAAAAAgAAAAAAAAABRVVSAAAAAAALt4SwWfv1PIJvDRMenW0zu91YxZbphRFLA4O+gbAaigAAAAA=",
310+
TransactionID: "f62589932eb9fcf0bf28fe95510bf614caf3169c67a85e75475a390a79b5ecc9",
311+
Memo: "XgpzoumUqTDSDBVFFSH2wXOTgOZKcw24PgCel/P1spw=",
312+
TransactionXdr: "AAAAAC3/58Z9rycNLmF6voWX9VmDETFVGhFoWf66mcMuir/DAAAAZAAAAAAAAAAAAAAAAAAAAANeCnOi6ZSpMNIMFUUVIfbBc5OA5kpzDbg+AJ6X8/WynAAAAAEAAAAAAAAAAgAAAAFVU0QAAAAAAEbpO2riZmlZMkHuBxUBYAAas3hWyo9VL1IOdnfXAVFBAAAAADuaygAAAAAAGVL83DJFwH0sKmy6AIgJYD7GexiD0YuzSMioBCAUOJwAAAABVVNEAAAAAAAZUvzcMkXAfSwqbLoAiAlgPsZ7GIPRi7NIyKgEIBQ4nAAAAAAL68IAAAAAAgAAAAAAAAABRVVSAAAAAAALt4SwWfv1PIJvDRMenW0zu91YxZbphRFLA4O+gbAaigAAAAA=",
297313
Data: params["data"][0],
298314
}
299315

@@ -321,16 +337,10 @@ func TestRequestHandlerAuth(t *testing.T) {
321337
})
322338

323339
Convey("When all params are valid (NeedInfo = `true`)", func() {
324-
memoPreimage := memo.Memo{
325-
Transaction: memo.Transaction{
326-
Route: "bob*acme.com",
327-
},
328-
}
329-
330340
authData := compliance.AuthData{
331341
Sender: "alice*stellar.org",
332342
NeedInfo: true,
333-
Tx: "AAAAAC3/58Z9rycNLmF6voWX9VmDETFVGhFoWf66mcMuir/DAAAAZAAAAAAAAAAAAAAAAAAAAAOSmd0xMyU3Or8ITID/nfZxYLwhySbceUpNTURuZBydVQAAAAEAAAAAAAAAAgAAAAFVU0QAAAAAAEbpO2riZmlZMkHuBxUBYAAas3hWyo9VL1IOdnfXAVFBAAAAADuaygAAAAAAGVL83DJFwH0sKmy6AIgJYD7GexiD0YuzSMioBCAUOJwAAAABVVNEAAAAAAAZUvzcMkXAfSwqbLoAiAlgPsZ7GIPRi7NIyKgEIBQ4nAAAAAAL68IAAAAAAgAAAAAAAAABRVVSAAAAAAALt4SwWfv1PIJvDRMenW0zu91YxZbphRFLA4O+gbAaigAAAAA=",
343+
Tx: "AAAAAC3/58Z9rycNLmF6voWX9VmDETFVGhFoWf66mcMuir/DAAAAZAAAAAAAAAAAAAAAAAAAAANeCnOi6ZSpMNIMFUUVIfbBc5OA5kpzDbg+AJ6X8/WynAAAAAEAAAAAAAAAAgAAAAFVU0QAAAAAAEbpO2riZmlZMkHuBxUBYAAas3hWyo9VL1IOdnfXAVFBAAAAADuaygAAAAAAGVL83DJFwH0sKmy6AIgJYD7GexiD0YuzSMioBCAUOJwAAAABVVNEAAAAAAAZUvzcMkXAfSwqbLoAiAlgPsZ7GIPRi7NIyKgEIBQ4nAAAAAAL68IAAAAAAgAAAAAAAAABRVVSAAAAAAALt4SwWfv1PIJvDRMenW0zu91YxZbphRFLA4O+gbAaigAAAAA=",
334344
Memo: string(memoPreimage.Marshal()),
335345
}
336346

@@ -353,11 +363,13 @@ func TestRequestHandlerAuth(t *testing.T) {
353363
mock.AnythingOfType("[]uint8"),
354364
).Return(nil).Once()
355365

356-
// Make sanctions checks successful (tested previously)
366+
// Make sanctions checks successful (tested in the previous test case)
357367
mockHTTPClient.On(
358368
"PostForm",
359369
"http://sanctions",
360-
url.Values{"data": params["data"]},
370+
url.Values{
371+
"sender": {memoPreimage.Transaction.SenderInfo},
372+
},
361373
).Return(
362374
net.BuildHTTPResponse(200, "ok"),
363375
nil,
@@ -367,7 +379,13 @@ func TestRequestHandlerAuth(t *testing.T) {
367379
mockHTTPClient.On(
368380
"PostForm",
369381
"http://ask_user",
370-
url.Values{"data": params["data"]},
382+
url.Values{
383+
"sender": {memoPreimage.Transaction.SenderInfo},
384+
"note": {memoPreimage.Transaction.Note},
385+
"amount": {"20.0000000"},
386+
"asset_code": {"USD"},
387+
"asset_issuer": {"GAMVF7G4GJC4A7JMFJWLUAEIBFQD5RT3DCB5DC5TJDEKQBBACQ4JZVEE"},
388+
},
371389
).Return(
372390
net.BuildHTTPResponse(403, "forbidden"),
373391
nil,
@@ -387,7 +405,13 @@ func TestRequestHandlerAuth(t *testing.T) {
387405
mockHTTPClient.On(
388406
"PostForm",
389407
"http://ask_user",
390-
url.Values{"data": params["data"]},
408+
url.Values{
409+
"sender": {memoPreimage.Transaction.SenderInfo},
410+
"note": {memoPreimage.Transaction.Note},
411+
"amount": {"20.0000000"},
412+
"asset_code": {"USD"},
413+
"asset_issuer": {"GAMVF7G4GJC4A7JMFJWLUAEIBFQD5RT3DCB5DC5TJDEKQBBACQ4JZVEE"},
414+
},
391415
).Return(
392416
net.BuildHTTPResponse(202, "{\"pending\": 300}"),
393417
nil,
@@ -408,7 +432,13 @@ func TestRequestHandlerAuth(t *testing.T) {
408432
mockHTTPClient.On(
409433
"PostForm",
410434
"http://ask_user",
411-
url.Values{"data": params["data"]},
435+
url.Values{
436+
"sender": {memoPreimage.Transaction.SenderInfo},
437+
"note": {memoPreimage.Transaction.Note},
438+
"amount": {"20.0000000"},
439+
"asset_code": {"USD"},
440+
"asset_issuer": {"GAMVF7G4GJC4A7JMFJWLUAEIBFQD5RT3DCB5DC5TJDEKQBBACQ4JZVEE"},
441+
},
412442
).Return(
413443
net.BuildHTTPResponse(202, "pending"),
414444
nil,
@@ -429,7 +459,13 @@ func TestRequestHandlerAuth(t *testing.T) {
429459
mockHTTPClient.On(
430460
"PostForm",
431461
"http://ask_user",
432-
url.Values{"data": params["data"]},
462+
url.Values{
463+
"sender": {memoPreimage.Transaction.SenderInfo},
464+
"note": {memoPreimage.Transaction.Note},
465+
"amount": {"20.0000000"},
466+
"asset_code": {"USD"},
467+
"asset_issuer": {"GAMVF7G4GJC4A7JMFJWLUAEIBFQD5RT3DCB5DC5TJDEKQBBACQ4JZVEE"},
468+
},
433469
).Return(
434470
net.BuildHTTPResponse(200, "ok"),
435471
nil,
@@ -445,9 +481,9 @@ func TestRequestHandlerAuth(t *testing.T) {
445481
).Once()
446482

447483
authorizedTransaction := &entities.AuthorizedTransaction{
448-
TransactionID: "b9c3a075b4c20663a26779202fdd2a25a6816114b46ef7553076af68ce1986f5",
449-
Memo: "kpndMTMlNzq/CEyA/532cWC8Ickm3HlKTU1EbmQcnVU=",
450-
TransactionXdr: "AAAAAC3/58Z9rycNLmF6voWX9VmDETFVGhFoWf66mcMuir/DAAAAZAAAAAAAAAAAAAAAAAAAAAOSmd0xMyU3Or8ITID/nfZxYLwhySbceUpNTURuZBydVQAAAAEAAAAAAAAAAgAAAAFVU0QAAAAAAEbpO2riZmlZMkHuBxUBYAAas3hWyo9VL1IOdnfXAVFBAAAAADuaygAAAAAAGVL83DJFwH0sKmy6AIgJYD7GexiD0YuzSMioBCAUOJwAAAABVVNEAAAAAAAZUvzcMkXAfSwqbLoAiAlgPsZ7GIPRi7NIyKgEIBQ4nAAAAAAL68IAAAAAAgAAAAAAAAABRVVSAAAAAAALt4SwWfv1PIJvDRMenW0zu91YxZbphRFLA4O+gbAaigAAAAA=",
484+
TransactionID: "f62589932eb9fcf0bf28fe95510bf614caf3169c67a85e75475a390a79b5ecc9",
485+
Memo: "XgpzoumUqTDSDBVFFSH2wXOTgOZKcw24PgCel/P1spw=",
486+
TransactionXdr: "AAAAAC3/58Z9rycNLmF6voWX9VmDETFVGhFoWf66mcMuir/DAAAAZAAAAAAAAAAAAAAAAAAAAANeCnOi6ZSpMNIMFUUVIfbBc5OA5kpzDbg+AJ6X8/WynAAAAAEAAAAAAAAAAgAAAAFVU0QAAAAAAEbpO2riZmlZMkHuBxUBYAAas3hWyo9VL1IOdnfXAVFBAAAAADuaygAAAAAAGVL83DJFwH0sKmy6AIgJYD7GexiD0YuzSMioBCAUOJwAAAABVVNEAAAAAAAZUvzcMkXAfSwqbLoAiAlgPsZ7GIPRi7NIyKgEIBQ4nAAAAAAL68IAAAAAAgAAAAAAAAABRVVSAAAAAAALt4SwWfv1PIJvDRMenW0zu91YxZbphRFLA4O+gbAaigAAAAA=",
451487
Data: params["data"][0],
452488
}
453489

@@ -496,9 +532,9 @@ func TestRequestHandlerAuth(t *testing.T) {
496532
).Once()
497533

498534
authorizedTransaction := &entities.AuthorizedTransaction{
499-
TransactionID: "b9c3a075b4c20663a26779202fdd2a25a6816114b46ef7553076af68ce1986f5",
500-
Memo: "kpndMTMlNzq/CEyA/532cWC8Ickm3HlKTU1EbmQcnVU=",
501-
TransactionXdr: "AAAAAC3/58Z9rycNLmF6voWX9VmDETFVGhFoWf66mcMuir/DAAAAZAAAAAAAAAAAAAAAAAAAAAOSmd0xMyU3Or8ITID/nfZxYLwhySbceUpNTURuZBydVQAAAAEAAAAAAAAAAgAAAAFVU0QAAAAAAEbpO2riZmlZMkHuBxUBYAAas3hWyo9VL1IOdnfXAVFBAAAAADuaygAAAAAAGVL83DJFwH0sKmy6AIgJYD7GexiD0YuzSMioBCAUOJwAAAABVVNEAAAAAAAZUvzcMkXAfSwqbLoAiAlgPsZ7GIPRi7NIyKgEIBQ4nAAAAAAL68IAAAAAAgAAAAAAAAABRVVSAAAAAAALt4SwWfv1PIJvDRMenW0zu91YxZbphRFLA4O+gbAaigAAAAA=",
535+
TransactionID: "f62589932eb9fcf0bf28fe95510bf614caf3169c67a85e75475a390a79b5ecc9",
536+
Memo: "XgpzoumUqTDSDBVFFSH2wXOTgOZKcw24PgCel/P1spw=",
537+
TransactionXdr: "AAAAAC3/58Z9rycNLmF6voWX9VmDETFVGhFoWf66mcMuir/DAAAAZAAAAAAAAAAAAAAAAAAAAANeCnOi6ZSpMNIMFUUVIfbBc5OA5kpzDbg+AJ6X8/WynAAAAAEAAAAAAAAAAgAAAAFVU0QAAAAAAEbpO2riZmlZMkHuBxUBYAAas3hWyo9VL1IOdnfXAVFBAAAAADuaygAAAAAAGVL83DJFwH0sKmy6AIgJYD7GexiD0YuzSMioBCAUOJwAAAABVVNEAAAAAAAZUvzcMkXAfSwqbLoAiAlgPsZ7GIPRi7NIyKgEIBQ4nAAAAAAL68IAAAAAAgAAAAAAAAABRVVSAAAAAAALt4SwWfv1PIJvDRMenW0zu91YxZbphRFLA4O+gbAaigAAAAA=",
502538
Data: params["data"][0],
503539
}
504540

@@ -553,9 +589,9 @@ func TestRequestHandlerAuth(t *testing.T) {
553589
).Once()
554590

555591
authorizedTransaction := &entities.AuthorizedTransaction{
556-
TransactionID: "b9c3a075b4c20663a26779202fdd2a25a6816114b46ef7553076af68ce1986f5",
557-
Memo: "kpndMTMlNzq/CEyA/532cWC8Ickm3HlKTU1EbmQcnVU=",
558-
TransactionXdr: "AAAAAC3/58Z9rycNLmF6voWX9VmDETFVGhFoWf66mcMuir/DAAAAZAAAAAAAAAAAAAAAAAAAAAOSmd0xMyU3Or8ITID/nfZxYLwhySbceUpNTURuZBydVQAAAAEAAAAAAAAAAgAAAAFVU0QAAAAAAEbpO2riZmlZMkHuBxUBYAAas3hWyo9VL1IOdnfXAVFBAAAAADuaygAAAAAAGVL83DJFwH0sKmy6AIgJYD7GexiD0YuzSMioBCAUOJwAAAABVVNEAAAAAAAZUvzcMkXAfSwqbLoAiAlgPsZ7GIPRi7NIyKgEIBQ4nAAAAAAL68IAAAAAAgAAAAAAAAABRVVSAAAAAAALt4SwWfv1PIJvDRMenW0zu91YxZbphRFLA4O+gbAaigAAAAA=",
592+
TransactionID: "f62589932eb9fcf0bf28fe95510bf614caf3169c67a85e75475a390a79b5ecc9",
593+
Memo: "XgpzoumUqTDSDBVFFSH2wXOTgOZKcw24PgCel/P1spw=",
594+
TransactionXdr: "AAAAAC3/58Z9rycNLmF6voWX9VmDETFVGhFoWf66mcMuir/DAAAAZAAAAAAAAAAAAAAAAAAAAANeCnOi6ZSpMNIMFUUVIfbBc5OA5kpzDbg+AJ6X8/WynAAAAAEAAAAAAAAAAgAAAAFVU0QAAAAAAEbpO2riZmlZMkHuBxUBYAAas3hWyo9VL1IOdnfXAVFBAAAAADuaygAAAAAAGVL83DJFwH0sKmy6AIgJYD7GexiD0YuzSMioBCAUOJwAAAABVVNEAAAAAAAZUvzcMkXAfSwqbLoAiAlgPsZ7GIPRi7NIyKgEIBQ4nAAAAAAL68IAAAAAAgAAAAAAAAABRVVSAAAAAAALt4SwWfv1PIJvDRMenW0zu91YxZbphRFLA4O+gbAaigAAAAA=",
559595
Data: params["data"][0],
560596
}
561597

0 commit comments

Comments
 (0)