status-go/services/wallet/on_ramp.go

165 lines
50 KiB
Go
Raw Normal View History

2021-01-26 13:00:32 +00:00
package wallet
import (
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"net/http"
"time"
)
const (
cryptoOnRampsData = "https://raw.githubusercontent.com/status-im/crypto-on-ramps/master/ramps.json"
DataSourceHTTP DataSourceType = iota + 1
DataSourceStatic
)
type CryptoOnRamp struct {
Name string `json:"name"`
Description string `json:"description"`
Fees string `json:"fees"`
LogoURL string `json:"logoUrl"`
SiteURL string `json:"siteUrl"`
Hostname string `json:"hostname"`
}
type DataSourceType int
type CryptoOnRampOptions struct {
dataSource string
dataSourceType DataSourceType
}
type CryptoOnRampManager struct {
options *CryptoOnRampOptions
ramps []CryptoOnRamp
LastCalled time.Time
}
func NewCryptoOnRampManager(options *CryptoOnRampOptions) *CryptoOnRampManager {
return &CryptoOnRampManager{
options: options,
}
}
func (c *CryptoOnRampManager) Get() ([]CryptoOnRamp, error) {
var data []byte
var err error
switch c.options.dataSourceType {
case DataSourceHTTP:
if !c.hasCacheExpired(time.Now()) {
return c.ramps, nil
}
data, err = c.getFromHTTPDataSource()
c.LastCalled = time.Now()
case DataSourceStatic:
data, err = c.getFromStaticDataSource()
default:
return nil, fmt.Errorf("unsupported CryptoOnRampManager.dataSourceType '%d'", c.options.dataSourceType)
}
if err != nil {
return nil, err
}
err = json.Unmarshal(data, &c.ramps)
if err != nil {
return nil, err
}
return c.ramps, nil
}
func (c *CryptoOnRampManager) hasCacheExpired(t time.Time) bool {
// If LastCalled + 1 hour is before the given time, then 1 hour hasn't passed yet
return c.LastCalled.Add(time.Hour).Before(t)
}
func (c *CryptoOnRampManager) getFromHTTPDataSource() ([]byte, error) {
if c.options.dataSource == "" {
return nil, errors.New("data source is not set for CryptoOnRampManager")
}
sgc := http.Client{
Timeout: time.Second * 5,
}
req, err := http.NewRequest(http.MethodGet, c.options.dataSource, nil)
if err != nil {
return nil, err
}
req.Header.Set("User-Agent", "status-go")
res, err := sgc.Do(req)
if err != nil {
return nil, err
}
if res.Body != nil {
defer res.Body.Close()
}
body, err := ioutil.ReadAll(res.Body)
if err != nil {
return nil, err
}
return body, nil
}
func (c *CryptoOnRampManager) getFromStaticDataSource() ([]byte, error) {
logoMoonPay := "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gKgSUNDX1BST0ZJTEUAAQEAAAKQbGNtcwQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtkZXNjAAABCAAAADhjcHJ0AAABQAAAAE53dHB0AAABkAAAABRjaGFkAAABpAAAACxyWFlaAAAB0AAAABRiWFlaAAAB5AAAABRnWFlaAAAB+AAAABRyVFJDAAACDAAAACBnVFJDAAACLAAAACBiVFJDAAACTAAAACBjaHJtAAACbAAAACRtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABwAAAAcAHMAUgBHAEIAIABiAHUAaQBsAHQALQBpAG4AAG1sdWMAAAAAAAAAAQAAAAxlblVTAAAAMgAAABwATgBvACAAYwBvAHAAeQByAGkAZwBoAHQALAAgAHUAcwBlACAAZgByAGUAZQBsAHkAAAAAWFlaIAAAAAAAAPbWAAEAAAAA0y1zZjMyAAAAAAABDEoAAAXj///zKgAAB5sAAP2H///7ov///aMAAAPYAADAlFhZWiAAAAAAAABvlAAAOO4AAAOQWFlaIAAAAAAAACSdAAAPgwAAtr5YWVogAAAAAAAAYqUAALeQAAAY3nBhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbcGFyYQAAAAAAAwAAAAJmZgAA8qcAAA1ZAAAT0AAACltwYXJhAAAAAAADAAAAAmZmAADypwAADVkAABPQAAAKW2Nocm0AAAAAAAMAAAAAo9cAAFR7AABMzQAAmZoAACZmAAAPXP/bAEMABQMEBAQDBQQEBAUFBQYHDAgHBwcHDwsLCQwRDxISEQ8RERMWHBcTFBoVEREYIRgaHR0fHx8TFyIkIh4kHB4fHv/bAEMBBQUFBwYHDggIDh4UERQeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHv/CABEIAZABkAMBIgACEQEDEQH/xAAcAAEAAwEAAwEAAAAAAAAAAAAABgcIBQIDBAH/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAG5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHyQgsJWMsJEAAAAAAAAAAAAAAAAAAAAABH5Bm04/LB+/guC3shaYJKAAAAAAAAAAAAAAAAAAAADwyLr3KZzQALrpS/yfgAAAAAAAAAAAAAHFO1HKbhBbsXhQkf7GxOJZTY1J2sh2GXy5vSFXWiMgr7rMiCRy4iGl/l+8AAAAAAAAAAAAAEXPjoD1+gAAAAA6mhsy9A1c4/YAAAAAAAAAAAAAAAAPTmK1aPAAAAAAAJfo/IOiSagAAAAAAAAAAAAAAHpM4xXz8AAAAAAABYdedc1OAAAAAAAAAAAAAAByOvyTK4AAAAAAAHl4+Zrr9/P0AAAAAAAAAAAAAAer2jI3ql8QAAAAAAAHa4tkF7AAAAAAAAAAAAAAAArmh9dZoI4AAAAAABpCqNCgAAAAAAAAAAAAAAACPyAZN+PSufDmgAAAAdf3aGPp6QAAAAAAAAAAAAAAAAAOb0hRFd675RlZdsXK6TDyIasqVFJWdbX3ny/UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/8QAJRAAAgICAgEFAAMBAAAAAAAABAUCAwEGQFAAEhMUIDAHEJAR/9oACAEBAAEFAv8AEgkikaonbVdcq9yBzla5XH9c8aUqw2R5TAj+sZzjOp7FOdnWbWdI1x9daOyen6qef+QznOc/X+O5yyF1bMbIjD66IPmlLz2LpcB4buefL9ocW5k9by8g+bx8H2pvV4FuUM+L2gJ/13ZPImP0Qq7WhtVcKqua1ZCLaXGynnZ+8c5jlNtJY2QDBjqP7d6uMbInW3FEq0beeVmoETkEKOGPzdje1K6yyby7/wAlp5K8hE2oaj9HsbWCoK+2y+79F5l4JSg+lkF0NtkKqnbCbJh+2qNMrWPQ78f7IXA04/5qfoNrK+U94GhFey35908VUzlmc+AluzQ257rPpT8GOfTLnucepRwYR9U+fZHFldsM128BHT77joNwF+K+4GgC+606DewPkLuBqgHwFHQTjGcNhWzWMf209Vk8/oniypoCYNcIT+ilfeyMXB0gCdG/TUNaGIJIBH5J1RTS9QtHWC9KeEMdQ41QobycZQl9qarb7E2pWzyNRSNT1By8I7Bemizzbp7OPktZdYzDWHUs0acwlILTwavAwxg4f6a//8QAFBEBAAAAAAAAAAAAAAAAAAAAkP/aAAgBAwEBPwEcf//EABQRAQAAAAAAAAAAAAAAAAAAAJD/2gAIAQIBAT8BHH//xAA8EAACAQEDBwgIBQUBAAAAAAABAgMEABEhEyIxQVBRcRIgMDJAUmHRIyRCcoGhscEUYpCR4QUQFTRT8P/aAAgBAQAGPwL9EgyzyrGg1sbFYxPN4qtw+dvSUtQvC42CwVA5fcbBtnZZ85zhGneNstVSFjqGpeH97xgbLQ178onCOU/Q7Nlx9HEcmnw50UzG+QZj8RssncLXnSedVR+ysgI+I/jZk9MRdk3IHDVzsowxmkLDho2ARPUAuPYTFrEUdGPBpT9h52zZ1iG5EH3tjXzfA3Wwr5fjjbOljm99PKwFZSMu9ojf8jb1apR27uhv25v+QplvlQXSKPaG/miNQREuMj7hZYoxciC4Dw7dlKmS6/qoOs1ikR/DQ91DieJ6AMpII1iwjrb6mHf7Y87CamlDr9OY09K34eY6Rdmt5WI/C5Ud6Nr7XCgm+IusGr5REncTFvKwgp4wiDt2TS6Sqbqr3fE2aeokMkjaSejE9NJyTrGpuNuXHmSr1492xOXg0z4RL97NNM5eRzeSelSpp25Lr8/CyVMOvBl7p3bCaWRuSiC9jZ6lsF0Iu5enHLPq8ubJ4bjsJKFDnTYv7o/98uwqrm+WD0bfbYNQb71jOTX4fzf2E05ObOl13iMfPYDyHQqk2Z20sbz2GllGqVb+F+wKw7oH+nYgw1bArF3wP9OxBRrN2wGRtDC42aNtKm49hpIt8ov4bBmwuWX0i/HT87+wyVRGbAmHvH+L9grVoM+nOPunT2GNXF0snpH2CUYXqRcRZocck2dE28dPl5V9XgN5/MdQ2GYHwcYxv3TZ6edOTIunpVp4B7zalG+yU0AuVfmd+xM7MnXqSfY+FjBUxlW1bjw6PJwLcg68h0LbIQDH2nOljsYw1MQkXVvHCxkofWIu77Y87FXUqw0g88RwxtI50BRfYS/1Jsmv/JTieJ1WEMEaxxjQBsm6qpkk8df72vpaqSHwYcqx5ElPINWcQfpb/Tv4SL52xpAvGRfOwys9PGuu4kmwNTNLUHd1RbkU0CRD8o/U2//EACsQAQAABAMHBAMBAQAAAAAAAAEAESExQVGBQFBhcZGhsSAwwdGQ4fAQ8f/aAAgBAQABPyH8JFytkoRJxtir1D2iWgc/vkIzPP1zfSe7mcu5NfoMWFWBXQshh/oBEGYmEXPxSq4Z/B3bLZrgwkqurPt6RRmMki8ub3tSTruti6qMM2mk19Th7hSHw3ZreiMTpL1SfzMKWQ8PXcH65KqltZRQ8rfacYk+8HF5MMTF/C0J1PMeRFi
logoTransak := "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gKgSUNDX1BST0ZJTEUAAQEAAAKQbGNtcwQwAABtbnRyUkdCIFhZWiAH5AAEABEAEQAkADFhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtkZXNjAAABCAAAADhjcHJ0AAABQAAAAE53dHB0AAABkAAAABRjaGFkAAABpAAAACxyWFlaAAAB0AAAABRiWFlaAAAB5AAAABRnWFlaAAAB+AAAABRyVFJDAAACDAAAACBnVFJDAAACLAAAACBiVFJDAAACTAAAACBjaHJtAAACbAAAACRtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABwAAAAcAHMAUgBHAEIAIABiAHUAaQBsAHQALQBpAG4AAG1sdWMAAAAAAAAAAQAAAAxlblVTAAAAMgAAABwATgBvACAAYwBvAHAAeQByAGkAZwBoAHQALAAgAHUAcwBlACAAZgByAGUAZQBsAHkAAAAAWFlaIAAAAAAAAPbWAAEAAAAA0y1zZjMyAAAAAAABDEoAAAXj///zKgAAB5sAAP2H///7ov///aMAAAPYAADAlFhZWiAAAAAAAABvlAAAOO4AAAOQWFlaIAAAAAAAACSdAAAPgwAAtr5YWVogAAAAAAAAYqUAALeQAAAY3nBhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbcGFyYQAAAAAAAwAAAAJmZgAA8qcAAA1ZAAAT0AAACltwYXJhAAAAAAADAAAAAmZmAADypwAADVkAABPQAAAKW2Nocm0AAAAAAAMAAAAAo9cAAFR7AABMzQAAmZoAACZmAAAPXP/bAEMABQMEBAQDBQQEBAUFBQYHDAgHBwcHDwsLCQwRDxISEQ8RERMWHBcTFBoVEREYIRgaHR0fHx8TFyIkIh4kHB4fHv/bAEMBBQUFBwYHDggIDh4UERQeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHv/CABEIAZABkAMBIgACEQEDEQH/xAAcAAEBAAMBAQEBAAAAAAAAAAAAAQUGBwMCBAj/xAAaAQEBAAMBAQAAAAAAAAAAAAAAAQQFBgMC/9oADAMBAAIQAxAAAAHsoAAAAAAAAD82D9fDZWg43Mw+nuQ+GR4dmcRenx228X9/P77C5Zk/DI6BNZzuFmfqHl7AAAAAAAAAAAAAASz8j5/X4aRqe21G+axhJutNYmdhJZQlCKgqFq/KXObXziYOd3L34Zt+k2/RZ+P9mo2lD6AAAAAAAAAAnx+DnGbr9m0nynTczBmYiIoLAIWoiiKJQioKgvvvfPZiZXefvjfUOX6LKjBzQAAAAAAAGtfj0Lc6P08To+bSz6glqAlipZaIIKhagqIoipYJZa9vGfP31baeB9G5nfbsNLtwAAAAAGm/s5vutFIdJzQihUIoLAQWwiiKllJYqCwLBbJYqvuSCTou7cF6hzXQ7WNJuAAAAJisjyjO134vE67kIPr5QVLLUBBUstSwgWC2BZLFSxUsELZ9PqBJ8iWvXyk++y5ni3Y+O6f2GBngAEx9+NV0v7+O04lDJxhFCoRRFAgtksVLFSy1LCBYFhLVfcIk+QtRFAb3on1i5Pe2NyXE9ZRPsBzjeeQ7nR/BOl5kBBUstgEsVC1LFgILYFksVLFQC/QJIgolIKIoht/UOBdu5joMgNLtwNG0r934Oy4iDMxBFEpLFEUQyO/fG0ct1GjaP2jnGT4azLOi0KCoEI+rsX7OlaPcaDq3acTgZvHZlcV03OInp8BbJYoECoK37QchiZXcBxPWMVldOyMXQZZ23DgIWoLAqWCFvV89gc9w3beHO+ic7y8bUidfygioK210vQ7q/RznQAYjmPZcPn4HG7lcT1vMJZ6/MAlipYCWoL2rL6NvPDda5r0rkeZr8YOp5VLFEpLFSxRKEXrGewGf4btvDnfROdZeNqcOv5VEVtrpeh3V+jnN+SqPk+gYfmHZ8PsMHjUy+I63mA9PiBYFRLQNr6txPtnKdE4p2bi3vgwdBz0FqCwLc3su46De8a/B3DmGR469E3Gq6znsDnuG7Xw510XnWXjakTr+VbY6Xod3fo5zfsY5rnYee3/knW/TyYrK4nX5+o9D4Lu2903RRoN5h+X9owewweOvf8/YcullCUgqWL699/n3vnO7r8/Huw8euKlm90QlqAli9fyvMOmcZ2P35erDzeVa73Ll3Tc3vGewGf0G98OddF51l42pbW6Xsdffo5zoGNc0zsNg7Ot5XO9b5J1vm+huJy2J1ez4yTveK3nofA9z0G76Tj/y6jqtlreOjsuWg9PmEUCBXcuGdy0G3/Rxnt/EfPz+R0HPoigsA2jVnjkdy++Z9J4/rfvy9WNk/i/bCeeC2Kffz8/Z8fbGua52HMInW8qh6+ee63yTrfLdLcTlsTq9nxmJ3vFhYgqCpZSCoKJV7vwf+g+d3TjvY+W4twEs6jmEBBUstSxW1arPD37p9c06Tx/WfYxsoBjXNs3CmDOt5VE9vMRc91zkfXOW6S4nLYnV7PjEO94sShALZLFEUBC3Idz5B1/ld+0Te8Bg+/LSdpxgigQWyWKlits1OeHv3b75n0fj+r9cd8c49fNgzrOWhPXzQpEXO9e4R13nN/m8NkNB1my0gdvyCCoKllQKgqWUEu/dG1rZOI6m+XqxMnifjtOq9vxCGR4IWpYsBBbK+oe3i+L6+JSFiJaIqCrIv6fyk+hPqCAlqWKIoEFr38Nwxvbp/qcL1gLg+Udy5Lvufww6HQQlqWKlil+kQkQURRFQpEULYRQIFQVC2AQVLKCV2Tm3aOd3VHP7kCa9sL78uGTYde7fi0PbzgJX0F+ZBFBUCEtSxUFSy2ASxRAS1BUsUCC0bJ4+m87MvC9WHx6AAY3kPcNQ2up5xDq+YL9Ak+UFQVLFSxYKksULZLFAgWBUS0CBULQj27Xr258n0NGp2QAAAHNtS7lzHo+c10bvRpfm0RQWAkstSxYFSy2ASxUsUSkFSxRAFbn+PrOh23oOb3oAAAADx9icr1/uHOOj5zVZZvNKgqWKllsA+bFEtSxQIFgthFAgVC1sv6uo6HbfHuc1vAUAAAAAADS9A7litvp+PM1hek5+E9PhLKSxYLURQEFSxUspBUsUZzz9MN0bYsvzO8o0+0AAAAAAAAAA+dT216+PGMd3bWN5peXtgwG51XyPbyhLUFEUQC2EU+tg8vXXcj0TadLtNR3CtDt6PL1AAAAAAAAAAAAAn4/2V86dr/ULn4fFcb3vzzsPgztf4sjw5DOvPuchnYP2/H1xPI9p9Mf35ZsO5zBzPxftMDLofQAAAAAAH//EACsQAAEEAAQGAwACAwEAAAAAAAIBAwQFAAYQMBEUIDVAUBITMxUhIjE0YP/aAAgBAQABBQL/AMI6800jt1CDDt+fB25nHhyxmuY5uVhXnVwjzqY5uVhuxnN4aupwYazAfBq7gnhp9l5PQuuttDJvGAxItJr2FVVXcRVRY1tNZxFvmDwy826PmSJDUcJl2ZYddcdPwmXXGThXxjiNIZkh5BEgpYXKDh5xx4/GZdcZcrbxCwBIQ+LNmMxG589+WvlV1jIhFAmsTW/DtLMYuHXDdc8xl1xlyntgmeFb2n1YVVVfOHii0tt9q791ZfD0dFa/ZvXNhywr/fpKKySUG3ZSxiR3DN1zzk6mnDacq5oTY2y4SNhYyilyPOTYrJhwpLZi43sZil8V85NrLE3gvXPkJFjGSmfqAIgOtlJMidWYZP2yfVZZl/TK6ZryR4pKpF6oVUSgSElROjMz+9AiuTH2qaGITalrg4BNns11TIli7QiIzIbsVd/KcjpnvcxM3ctsoEDEhOLd+2gu7FJV8wqJwTEuOJhYQziub1a/y07W0d+mBvUHacPflmHYpKvmFRERNZccTCxhnFc3qh7mK3TM7nBneoO
logoRamp := "data:image/png;base64,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"
logoLocalCryptos := "data:image/jpeg;base64,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
logoLatamex := "data:image/png;base64,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
2021-01-26 13:00:32 +00:00
data := fmt.Sprintf(`
[
{
"name": "MoonPay",
"description": "The new standard for fiat to crypto",
"fees": "1%%-4.5%%",
"logoUrl": "%s",
"siteUrl": "https://buy.moonpay.com",
"hostname": "moonpay.com"
},
{
"name": "Transak",
"description": "Global fiat <-> crypto payment gateway",
"fees": "1%%-4.5%%",
"logoUrl": "%s",
"siteUrl": "https://global.transak.com",
"hostname": "transak.com"
},
{
"name": "Ramp",
"description": "Global crypto to fiat flow",
"fees": "0.49%% - 2.9%%",
2021-01-26 13:00:32 +00:00
"logoUrl": "%s",
"siteUrl": "https://ramp.network/buy/",
"hostname": "ramp.network"
},
{
"name": "LocalCryptos",
"description": "Non-custodial crypto marketplace",
"fees": "1.5%%",
"logoUrl": "%s",
"siteUrl": "https://localcryptos.com",
"hostname": "localcryptos.com"
},
{
"name": "Latamex",
"description": "Easily buy crypto in Argentina, Mexico, and Brazil",
"fees": "1%% - 1.7%%",
"logoUrl": "%s",
"siteUrl": "https://latamex.com/",
"hostname": "latamex.com"
2021-01-26 13:00:32 +00:00
}
]`, logoMoonPay, logoTransak, logoRamp, logoLocalCryptos, logoLatamex)
2021-01-26 13:00:32 +00:00
return []byte(data), nil
}