From 3481c31668be72ff1c3a36ea9a0ac86d10c3ad4f Mon Sep 17 00:00:00 2001 From: Ivo Georgiev Date: Wed, 15 Jan 2020 19:25:57 +0200 Subject: [PATCH 1/2] ethereum adapter: support counterfactual accounts: do not call the contract directly to check auth - call the relayer instead --- adapters/ethereum/index.js | 12 ++++++++---- cfg/dev.js | 1 + cfg/prod.js | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/adapters/ethereum/index.js b/adapters/ethereum/index.js index 0d53cb07..b5957aa3 100644 --- a/adapters/ethereum/index.js +++ b/adapters/ethereum/index.js @@ -1,8 +1,8 @@ const { MerkleTree, Channel, ChannelState } = require('adex-protocol-eth/js') const { Wallet, Contract, utils, getDefaultProvider } = require('ethers') const coreABI = require('adex-protocol-eth/abi/AdExCore') -const identityABI = require('adex-protocol-eth/abi/Identity') const formatAddress = require('ethers').utils.getAddress +const fetch = require('node-fetch') const util = require('util') const assert = require('assert') const fs = require('fs') @@ -98,9 +98,13 @@ function Adapter(opts, cfg, ethProvider) { // @TODO: validate era here too let sess = { era: payload.era } if (typeof payload.identity === 'string' && payload.identity.length === 42) { - const id = new Contract(payload.identity, identityABI, provider) - const privLevel = await id.privileges(from) - if (privLevel === 0) return Promise.reject(new Error('insufficient privilege')) + const identitiesOwned = await fetch( + `${cfg.ETHEREUM_ADAPTER_RELAYER}/identity/by-owner/${from}` + ).then(r => r.json()) + const privEntry = Object.entries(identitiesOwned || {}).find( + ([k, v]) => k.toLowerCase() === payload.identity.toLowerCase() && v + ) + if (!privEntry) return Promise.reject(new Error('insufficient privilege')) sess = { uid: payload.identity, ...sess } } else { sess = { uid: from, ...sess } diff --git a/cfg/dev.js b/cfg/dev.js index be4446b3..375b2333 100644 --- a/cfg/dev.js +++ b/cfg/dev.js @@ -19,5 +19,6 @@ module.exports = { MINIMAL_FEE: 0, ETHEREUM_CORE_ADDR: '0x333420fc6a897356e69b62417cd17ff012177d2b', ETHEREUM_NETWORK: 'goerli', + ETHEREUM_ADAPTER_RELAYER: 'https://goerli-relayer.adex.network', VALIDATORS_WHITELIST: [] } diff --git a/cfg/prod.js b/cfg/prod.js index a7150008..8128d03e 100644 --- a/cfg/prod.js +++ b/cfg/prod.js @@ -22,5 +22,6 @@ module.exports = { ], ETHEREUM_CORE_ADDR: '0x333420fc6a897356e69b62417cd17ff012177d2b', ETHEREUM_NETWORK: 'homestead', + ETHEREUM_ADAPTER_RELAYER: 'https://relayer.adex.network', VALIDATORS_WHITELIST: [] } From 4cc39d702accb74ae9152fb7d36a6198beb8bb1a Mon Sep 17 00:00:00 2001 From: Ivo Georgiev Date: Wed, 15 Jan 2020 19:28:29 +0200 Subject: [PATCH 2/2] ethereum adapter: try to beautify the code --- adapters/ethereum/index.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/adapters/ethereum/index.js b/adapters/ethereum/index.js index b5957aa3..ea34c71e 100644 --- a/adapters/ethereum/index.js +++ b/adapters/ethereum/index.js @@ -98,10 +98,9 @@ function Adapter(opts, cfg, ethProvider) { // @TODO: validate era here too let sess = { era: payload.era } if (typeof payload.identity === 'string' && payload.identity.length === 42) { - const identitiesOwned = await fetch( - `${cfg.ETHEREUM_ADAPTER_RELAYER}/identity/by-owner/${from}` - ).then(r => r.json()) - const privEntry = Object.entries(identitiesOwned || {}).find( + const relayerUrl = `${cfg.ETHEREUM_ADAPTER_RELAYER}/identity/by-owner/${from}` + const identitiesOwned = await fetch(relayerUrl).then(r => r.json()) + const privEntry = Object.entries(identitiesOwned).find( ([k, v]) => k.toLowerCase() === payload.identity.toLowerCase() && v ) if (!privEntry) return Promise.reject(new Error('insufficient privilege'))