package keybase import ( "encoding/json" "os/exec" ) // ---- Struct for sending to API type walletOut struct { Method string `json:"method"` Params walletOutParams `json:"params"` } type walletOutOptions struct { Txid string `json:"txid"` } type walletOutParams struct { Options walletOutOptions `json:"options"` } // ---- // ---- Struct for data received after sending to API type walletOutResult struct { Result WalletResult `json:"result"` } type asset struct { Type string `json:"type"` Code string `json:"code"` Issuer string `json:"issuer"` VerifiedDomain string `json:"verifiedDomain"` IssuerName string `json:"issuerName"` Desc string `json:"desc"` InfoURL string `json:"infoUrl"` } type sourceAsset struct { Type string `json:"type"` Code string `json:"code"` Issuer string `json:"issuer"` VerifiedDomain string `json:"verifiedDomain"` IssuerName string `json:"issuerName"` Desc string `json:"desc"` InfoURL string `json:"infoUrl"` } type balance struct { Asset asset `json:"asset"` Amount string `json:"amount"` Limit string `json:"limit"` } type exchangeRate struct { Currency string `json:"currency"` Rate string `json:"rate"` } type WalletResult struct { AccountID string `json:"accountID"` IsPrimary bool `json:"isPrimary"` Name string `json:"name"` Balance []balance `json:"balance"` ExchangeRate exchangeRate `json:"exchangeRate"` AccountMode int `json:"accountMode"` TxID string `json:"txID"` Time int64 `json:"time"` Status string `json:"status"` StatusDetail string `json:"statusDetail"` Amount string `json:"amount"` Asset asset `json:"asset"` DisplayAmount string `json:"displayAmount"` DisplayCurrency string `json:"displayCurrency"` SourceAmountMax string `json:"sourceAmountMax"` SourceAmountActual string `json:"sourceAmountActual"` SourceAsset sourceAsset `json:"sourceAsset"` FromStellar string `json:"fromStellar"` ToStellar string `json:"toStellar"` FromUsername string `json:"fromUsername"` ToUsername string `json:"toUsername"` Note string `json:"note"` NoteErr string `json:"noteErr"` Unread bool `json:"unread"` } // ---- // walletAPIOut() sends JSON requests to the wallet API and returns its response. func walletAPIOut(keybasePath string, w walletOut) (walletOutResult, error) { jsonBytes, _ := json.Marshal(w) cmd := exec.Command(keybasePath, "wallet", "api", "-m", string(jsonBytes)) cmdOut, err := cmd.Output() if err != nil { return walletOutResult{}, err } var r walletOutResult json.Unmarshal(cmdOut, &r) return r, nil } // TxDetail() returns details of a stellar transaction func (k Keybase) TxDetail(txid string) (WalletResult, error) { m := walletOut{} m.Method = "details" m.Params.Options.Txid = txid r, err := walletAPIOut(k.Path, m) return r.Result, err }