diff --git a/backend/src/contracts.js b/backend/src/contracts.js new file mode 100644 index 0000000..7795181 --- /dev/null +++ b/backend/src/contracts.js @@ -0,0 +1,34 @@ +const ethers = require('ethers'); + +const { getContractAddressByNetworkName } = require('./contract-config'); +const DAOArtifact = require('../contractArtifacts/DAO.json'); + +const network = process.env.ETH_NETWORK; + +console.log('network:', network); + +const getProvider = () => { + switch (network) { + case 'localhost': + return ethers.getDefaultProvider('http://localhost:8545'); + case 'sepolia': + return new ethers.InfuraProvider( + network, + process.env.INFURA_API_KEY, + ); + default: + throw new Error('Unknown network'); + } +}; + +const wallet = new ethers.Wallet(process.env.ETH_PRIVATE_KEY, getProvider()); + +const getContract = (name) => new ethers.Contract( + getContractAddressByNetworkName(process.env.ETH_NETWORK, name), + DAOArtifact.abi, + wallet, +); + +module.exports = { + dao: getContract('DAO'), +}; diff --git a/backend/src/import-from-ss.js b/backend/src/import-from-ss.js index af450d6..39040fe 100644 --- a/backend/src/import-from-ss.js +++ b/backend/src/import-from-ss.js @@ -4,39 +4,13 @@ const crypto = require('crypto'); const objectHash = require('object-hash'); const Promise = require('bluebird'); -require('dotenv').config(); - const verifySignature = require('./verify-signature'); -const { getContractAddressByNetworkName } = require('./contract-config'); const { authorAddresses, authorPrivKeys, forum } = require('./db'); -const DAOArtifact = require('../contractArtifacts/DAO.json'); +const { dao } = require('./contracts'); // Each post allocates 30% of its reputation to citations const PPM_TO_CITATIONS = 300000; -const network = process.env.ETH_NETWORK; -console.log('network:', network); -const getProvider = () => { - switch (network) { - case 'localhost': - return ethers.getDefaultProvider('http://localhost:8545'); - case 'sepolia': - return new ethers.InfuraProvider( - network, - process.env.INFURA_API_KEY, - ); - default: - throw new Error('Unknown network'); - } -}; -const signer = new ethers.Wallet(process.env.ETH_PRIVATE_KEY, getProvider()); -const getContract = (name) => new ethers.Contract( - getContractAddressByNetworkName(process.env.ETH_NETWORK, name), - DAOArtifact.abi, - signer, -); -const dao = getContract('DAO'); - const fetchWithRetry = async (url, retryDelay = 5000) => { let retry = false; let responseData; diff --git a/backend/src/index.js b/backend/src/index.js index 22225b3..55e58ab 100644 --- a/backend/src/index.js +++ b/backend/src/index.js @@ -32,3 +32,9 @@ app.use((err, req, res, next) => { app.listen(port, () => { console.log(`Listening on port ${port}`); }); + +// TODO: Subscribe to contract events + +// TODO: Send matrix room events for proposal events + +// TODO: Send matrix room event on SS import