69 lines
2.2 KiB
JavaScript
69 lines
2.2 KiB
JavaScript
.import StatusQ.Core.Utils 0.1 as SQUtils
|
|
|
|
function chainIdFromEip155(chain) {
|
|
return parseInt(chain.split(':').pop().trim(), 10)
|
|
}
|
|
|
|
function isHex(str) {
|
|
return str.startsWith('0x') && str.length % 2 === 0 && /^[0-9a-fA-F]*$/.test(str.slice(2))
|
|
}
|
|
|
|
function hexToString(hex) {
|
|
if (hex.startsWith("0x")) {
|
|
hex = hex.substring(2);
|
|
}
|
|
|
|
var str = '';
|
|
for (var i = 0; i < hex.length; i += 2) {
|
|
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
|
|
}
|
|
return str;
|
|
}
|
|
|
|
function strToHex(str) {
|
|
var hex = '';
|
|
for (var i = 0; i < str.length; i++) {
|
|
var byte = str.charCodeAt(i).toString(16);
|
|
hex += (byte.length < 2 ? '0' : '') + byte;
|
|
}
|
|
return '0x' + hex;
|
|
}
|
|
|
|
function extractChainsAndAccountsFromApprovedNamespaces(approvedNamespaces) {
|
|
const eip155Data = approvedNamespaces.eip155;
|
|
const chains = eip155Data.chains.map(chainIdFromEip155);
|
|
const accountSet = new Set(
|
|
eip155Data.accounts.map(account => account.split(':').pop().trim())
|
|
);
|
|
const uniqueAccounts = Array.from(accountSet);
|
|
return { chains, accounts: uniqueAccounts };
|
|
}
|
|
|
|
function buildSupportedNamespacesFromModels(chainsModel, accountsModel, methods) {
|
|
var chainIds = []
|
|
var addresses = []
|
|
for (let i = 0; i < chainsModel.count; i++) {
|
|
let entry = SQUtils.ModelUtils.get(chainsModel, i)
|
|
chainIds.push(parseInt(entry.chainId))
|
|
}
|
|
for (let i = 0; i < accountsModel.count; i++) {
|
|
let entry = SQUtils.ModelUtils.get(accountsModel, i)
|
|
addresses.push(entry.address)
|
|
}
|
|
return buildSupportedNamespaces(chainIds, addresses, methods)
|
|
}
|
|
|
|
function buildSupportedNamespaces(chainIds, addresses, methods) {
|
|
var eipChainIds = []
|
|
var eipAddresses = []
|
|
for (let i = 0; i < chainIds.length; i++) {
|
|
let chainId = chainIds[i]
|
|
eipChainIds.push(`"eip155:${chainId}"`)
|
|
for (let i = 0; i < addresses.length; i++) {
|
|
eipAddresses.push(`"eip155:${chainId}:${addresses[i]}"`)
|
|
}
|
|
}
|
|
let methodsStr = methods.map(method => `"${method}"`).join(',')
|
|
return `{
|
|
"eip155":{"chains": [${eipChainIds.join(',')}],"methods": [${methodsStr}],"events": ["accountsChanged", "chainChanged"],"accounts": [${eipAddresses.join(',')}]}}`
|
|
} |