refactor: remove nimbaser and nim-base32 dependencies, use stew modules in their place (#58)
Closes issue #56.
This commit is contained in:
parent
da366ae1cf
commit
b2ecbda9e7
|
@ -76,12 +76,6 @@
|
||||||
[submodule "vendor/nim-task-runner"]
|
[submodule "vendor/nim-task-runner"]
|
||||||
path = vendor/nim-task-runner
|
path = vendor/nim-task-runner
|
||||||
url = https://github.com/status-im/nim-task-runner.git
|
url = https://github.com/status-im/nim-task-runner.git
|
||||||
[submodule "vendor/nbaser"]
|
|
||||||
path = vendor/nbaser
|
|
||||||
url = https://github.com/D-Nice/nbaser/
|
|
||||||
[submodule "vendor/nim-base32"]
|
|
||||||
path = vendor/nim-base32
|
|
||||||
url = https://github.com/elktree/nim-base32
|
|
||||||
[submodule "vendor/edn.nim"]
|
[submodule "vendor/edn.nim"]
|
||||||
path = vendor/edn.nim
|
path = vendor/edn.nim
|
||||||
url = https://github.com/status-im/edn.nim
|
url = https://github.com/status-im/edn.nim
|
||||||
|
|
|
@ -5,7 +5,6 @@ import # std libs
|
||||||
json, json_serialization, chronicles, web3/ethtypes,
|
json, json_serialization, chronicles, web3/ethtypes,
|
||||||
stint, strutils
|
stint, strutils
|
||||||
from strutils import parseHexInt, parseInt
|
from strutils import parseHexInt, parseInt
|
||||||
import nbaser
|
|
||||||
|
|
||||||
import # vendor libs
|
import # vendor libs
|
||||||
json_serialization, chronicles, libp2p/[multihash, multicodec, cid], stint,
|
json_serialization, chronicles, libp2p/[multihash, multicodec, cid], stint,
|
||||||
|
@ -13,10 +12,10 @@ import # vendor libs
|
||||||
from nimcrypto import fromHex
|
from nimcrypto import fromHex
|
||||||
|
|
||||||
import # status-desktop libs
|
import # status-desktop libs
|
||||||
../types/[sticker, setting, rpc_response, network_type],
|
../types/[sticker, setting, rpc_response, network_type],
|
||||||
../statusgo_backend/[edn_helpers, settings],
|
../statusgo_backend/[edn_helpers, settings],
|
||||||
../utils,
|
../utils,
|
||||||
./transactions as transactions,
|
./transactions as transactions,
|
||||||
./contracts
|
./contracts
|
||||||
|
|
||||||
# Retrieves number of sticker packs owned by user
|
# Retrieves number of sticker packs owned by user
|
||||||
|
|
|
@ -7,16 +7,14 @@ import statusgo_backend/core
|
||||||
import statusgo_backend/settings as status_settings
|
import statusgo_backend/settings as status_settings
|
||||||
import json, json_serialization, sets, strutils
|
import json, json_serialization, sets, strutils
|
||||||
import chronicles
|
import chronicles
|
||||||
import nbaser
|
|
||||||
import stew/byteutils
|
import stew/byteutils
|
||||||
from base32 import nil
|
from stew/base32 import nil
|
||||||
|
from stew/base58 import nil
|
||||||
|
|
||||||
const HTTPS_SCHEME* = "https"
|
const HTTPS_SCHEME* = "https"
|
||||||
const IPFS_GATEWAY* = ".infura.status.im"
|
const IPFS_GATEWAY* = ".infura.status.im"
|
||||||
const SWARM_GATEWAY* = "swarm-gateways.net"
|
const SWARM_GATEWAY* = "swarm-gateways.net"
|
||||||
|
|
||||||
const base58* = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
|
|
||||||
|
|
||||||
logScope:
|
logScope:
|
||||||
topics = "provider-model"
|
topics = "provider-model"
|
||||||
|
|
||||||
|
@ -64,7 +62,7 @@ proc newProviderModel*(events: EventEmitter, permissions: PermissionsModel, wall
|
||||||
result.permissions = permissions
|
result.permissions = permissions
|
||||||
result.wallet = wallet
|
result.wallet = wallet
|
||||||
|
|
||||||
proc requestType(message: string): RequestTypes =
|
proc requestType(message: string): RequestTypes =
|
||||||
let data = message.parseJson
|
let data = message.parseJson
|
||||||
result = RequestTypes.Unknown
|
result = RequestTypes.Unknown
|
||||||
try:
|
try:
|
||||||
|
@ -84,7 +82,7 @@ proc toWeb3SendAsyncReadOnly(message: string): Web3SendAsyncReadOnly =
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
proc toAPIRequest(message: string): APIRequest =
|
proc toAPIRequest(message: string): APIRequest =
|
||||||
let data = message.parseJson
|
let data = message.parseJson
|
||||||
|
|
||||||
result = APIRequest(
|
result = APIRequest(
|
||||||
|
@ -103,7 +101,7 @@ proc process(self: ProviderModel, data: Web3SendAsyncReadOnly): string =
|
||||||
"code": 4100
|
"code": 4100
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if data.payload.rpcMethod == "eth_sendTransaction":
|
if data.payload.rpcMethod == "eth_sendTransaction":
|
||||||
try:
|
try:
|
||||||
let request = data.request.parseJson
|
let request = data.request.parseJson
|
||||||
|
@ -170,7 +168,7 @@ proc process(self: ProviderModel, data: Web3SendAsyncReadOnly): string =
|
||||||
}
|
}
|
||||||
|
|
||||||
if SIGN_METHODS.contains(data.payload.rpcMethod):
|
if SIGN_METHODS.contains(data.payload.rpcMethod):
|
||||||
try:
|
try:
|
||||||
let request = data.request.parseJson
|
let request = data.request.parseJson
|
||||||
var params = request["params"]
|
var params = request["params"]
|
||||||
let password = hashPassword(request["password"].getStr())
|
let password = hashPassword(request["password"].getStr())
|
||||||
|
@ -186,7 +184,7 @@ proc process(self: ProviderModel, data: Web3SendAsyncReadOnly): string =
|
||||||
"password": password,
|
"password": password,
|
||||||
"account": dappAddress
|
"account": dappAddress
|
||||||
})
|
})
|
||||||
|
|
||||||
let jsonRpcResult = rpcResult.parseJson
|
let jsonRpcResult = rpcResult.parseJson
|
||||||
let success: bool = not jsonRpcResult.hasKey("error")
|
let success: bool = not jsonRpcResult.hasKey("error")
|
||||||
let errorMessage = if success: "" else: jsonRpcResult["error"]{"message"}.getStr()
|
let errorMessage = if success: "" else: jsonRpcResult["error"]{"message"}.getStr()
|
||||||
|
@ -215,7 +213,7 @@ proc process(self: ProviderModel, data: Web3SendAsyncReadOnly): string =
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ACC_METHODS.contains(data.payload.rpcMethod):
|
if ACC_METHODS.contains(data.payload.rpcMethod):
|
||||||
let dappAddress = status_settings.getSetting[string](Setting.DappsAddress)
|
let dappAddress = status_settings.getSetting[string](Setting.DappsAddress)
|
||||||
return $ %* {
|
return $ %* {
|
||||||
|
@ -227,7 +225,7 @@ proc process(self: ProviderModel, data: Web3SendAsyncReadOnly): string =
|
||||||
"result": if data.payload.rpcMethod == "eth_coinbase": newJString(dappAddress) else: %*[dappAddress]
|
"result": if data.payload.rpcMethod == "eth_coinbase": newJString(dappAddress) else: %*[dappAddress]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let rpcResult = callRPC(data.request)
|
let rpcResult = callRPC(data.request)
|
||||||
|
|
||||||
return $ %* {
|
return $ %* {
|
||||||
|
@ -237,7 +235,7 @@ proc process(self: ProviderModel, data: Web3SendAsyncReadOnly): string =
|
||||||
"result": rpcResult.parseJson
|
"result": rpcResult.parseJson
|
||||||
}
|
}
|
||||||
|
|
||||||
proc process*(self: ProviderModel, data: APIRequest): string =
|
proc process*(self: ProviderModel, data: APIRequest): string =
|
||||||
var value:JsonNode = case data.permission
|
var value:JsonNode = case data.permission
|
||||||
of Permission.Web3: %* [status_settings.getSetting[string](Setting.DappsAddress, "0x0000000000000000000000000000000000000000")]
|
of Permission.Web3: %* [status_settings.getSetting[string](Setting.DappsAddress, "0x0000000000000000000000000000000000000000")]
|
||||||
of Permission.ContactCode: %* status_settings.getSetting[string](Setting.PublicKey, "0x0")
|
of Permission.ContactCode: %* status_settings.getSetting[string](Setting.PublicKey, "0x0")
|
||||||
|
@ -264,19 +262,29 @@ proc postMessage*(self: ProviderModel, message: string): string =
|
||||||
of RequestTypes.APIRequest: self.process(message.toAPIRequest())
|
of RequestTypes.APIRequest: self.process(message.toAPIRequest())
|
||||||
else: """{"type":"TODO-IMPLEMENT-THIS"}""" ##################### TODO:
|
else: """{"type":"TODO-IMPLEMENT-THIS"}""" ##################### TODO:
|
||||||
|
|
||||||
proc ensResourceURL*(self: ProviderModel, ens: string, url: string): (string, string, string, string, bool) =
|
proc ensResourceURL*(self: ProviderModel, ens: string, url: string):
|
||||||
let contentHash = contenthash(ens)
|
(string, string, string, string, bool) =
|
||||||
if contentHash == "": # ENS does not have a content hash
|
|
||||||
return (url, url, HTTPS_SCHEME, "", false)
|
|
||||||
|
|
||||||
let decodedHash = contentHash.decodeENSContentHash()
|
let contentHash = contenthash(ens)
|
||||||
case decodedHash[0]:
|
if contentHash == "": # ENS does not have a content hash
|
||||||
|
return (url, url, HTTPS_SCHEME, "", false)
|
||||||
|
|
||||||
|
let decodedHash = contentHash.decodeENSContentHash()
|
||||||
|
|
||||||
|
case decodedHash[0]:
|
||||||
of ENSType.IPFS:
|
of ENSType.IPFS:
|
||||||
let base32Hash = base32.encode(string.fromBytes(base58.decode(decodedHash[1]))).toLowerAscii().replace("=", "")
|
let
|
||||||
|
base58bytes = base58.decode(base58.BTCBase58, decodedHash[1])
|
||||||
|
base32Hash = base32.encode(base32.Base32Lower, base58bytes)
|
||||||
|
|
||||||
result = (url, base32Hash & IPFS_GATEWAY, HTTPS_SCHEME, "", true)
|
result = (url, base32Hash & IPFS_GATEWAY, HTTPS_SCHEME, "", true)
|
||||||
|
|
||||||
of ENSType.SWARM:
|
of ENSType.SWARM:
|
||||||
result = (url, SWARM_GATEWAY, HTTPS_SCHEME, "/bzz:/" & decodedHash[1] & "/", true)
|
result = (url, SWARM_GATEWAY, HTTPS_SCHEME,
|
||||||
|
"/bzz:/" & decodedHash[1] & "/", true)
|
||||||
|
|
||||||
of ENSType.IPNS:
|
of ENSType.IPNS:
|
||||||
result = (url, decodedHash[1], HTTPS_SCHEME, "", true)
|
result = (url, decodedHash[1], HTTPS_SCHEME, "", true)
|
||||||
else:
|
|
||||||
|
else:
|
||||||
warn "Unknown content for", ens, contentHash
|
warn "Unknown content for", ens, contentHash
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
import ens, provider
|
import ens, provider
|
||||||
import stew/byteutils
|
import stew/byteutils
|
||||||
from base32 import nil
|
from stew/base32 import nil
|
||||||
|
from stew/base58 import nil
|
||||||
import chronicles, httpclient, net
|
import chronicles, httpclient, net
|
||||||
import nbaser, strutils
|
import strutils
|
||||||
import semver
|
import semver
|
||||||
import constants
|
import constants
|
||||||
|
|
||||||
|
@ -13,30 +14,37 @@ type
|
||||||
url*: string
|
url*: string
|
||||||
|
|
||||||
proc getLatestVersion*(): VersionInfo =
|
proc getLatestVersion*(): VersionInfo =
|
||||||
let contentHash = contenthash(APP_UPDATES_ENS)
|
let contentHash = contenthash(APP_UPDATES_ENS)
|
||||||
if contentHash == "":
|
if contentHash == "":
|
||||||
raise newException(ValueError, "ENS does not have a content hash")
|
raise newException(ValueError, "ENS does not have a content hash")
|
||||||
|
|
||||||
var url: string = ""
|
var url: string = ""
|
||||||
|
|
||||||
let decodedHash = contentHash.decodeENSContentHash()
|
let decodedHash = contentHash.decodeENSContentHash()
|
||||||
case decodedHash[0]:
|
|
||||||
|
case decodedHash[0]:
|
||||||
of ENSType.IPFS:
|
of ENSType.IPFS:
|
||||||
let base32Hash = base32.encode(string.fromBytes(base58.decode(decodedHash[1]))).toLowerAscii().replace("=", "")
|
let
|
||||||
|
base58bytes = base58.decode(base58.BTCBase58, decodedHash[1])
|
||||||
|
base32Hash = base32.encode(base32.Base32Lower, base58bytes)
|
||||||
|
|
||||||
url = "https://" & base32Hash & IPFS_GATEWAY
|
url = "https://" & base32Hash & IPFS_GATEWAY
|
||||||
|
|
||||||
of ENSType.SWARM:
|
of ENSType.SWARM:
|
||||||
url = "https://" & SWARM_GATEWAY & "/bzz:/" & decodedHash[1]
|
url = "https://" & SWARM_GATEWAY & "/bzz:/" & decodedHash[1]
|
||||||
|
|
||||||
of ENSType.IPNS:
|
of ENSType.IPNS:
|
||||||
url = "https://" & decodedHash[1]
|
url = "https://" & decodedHash[1]
|
||||||
else:
|
|
||||||
|
else:
|
||||||
warn "Unknown content for", contentHash
|
warn "Unknown content for", contentHash
|
||||||
raise newException(ValueError, "Unknown content for " & contentHash)
|
raise newException(ValueError, "Unknown content for " & contentHash)
|
||||||
|
|
||||||
# Read version from folder
|
# Read version from folder
|
||||||
let secureSSLContext = newContext()
|
let secureSSLContext = newContext()
|
||||||
let client = newHttpClient(sslContext = secureSSLContext, timeout = CHECK_VERSION_TIMEOUT_MS)
|
let client = newHttpClient(sslContext = secureSSLContext, timeout = CHECK_VERSION_TIMEOUT_MS)
|
||||||
result.version = client.getContent(url & "/VERSION").strip()
|
result.version = client.getContent(url & "/VERSION").strip()
|
||||||
result.url = url
|
result.url = url
|
||||||
|
|
||||||
proc isNewer*(currentVersion, versionToCheck: string): bool =
|
proc isNewer*(currentVersion, versionToCheck: string): bool =
|
||||||
let lastVersion = parseVersion(versionToCheck)
|
let lastVersion = parseVersion(versionToCheck)
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 0c989e0d9580b4a6c14e11976dba3a0d503ecfcd
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 660680c1cbdf6b1294b669fdb8b6e9c89794cb5b
|
|
Loading…
Reference in New Issue