forked from juice-shop/juice-shop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathweb3Wallet.ts
32 lines (31 loc) · 1.37 KB
/
web3Wallet.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { type Request, type Response } from 'express'
import challengeUtils = require('../lib/challengeUtils')
import * as utils from '../lib/utils'
import { challenges } from '../data/datacache'
const web3WalletABI = require('../data/static/contractABIs').web3WalletABI
const ethers = require('ethers')
const web3WalletAddress = '0x413744D59d31AFDC2889aeE602636177805Bd7b0'
const walletsConnected = new Set()
let isEventListenerCreated = false
module.exports.contractExploitListener = function contractExploitListener () {
return (req: Request, res: Response) => {
const metamaskAddress = req.body.walletAddress
walletsConnected.add(metamaskAddress)
try {
const provider = new ethers.WebSocketProvider('wss://eth-sepolia.g.alchemy.com/v2/FZDapFZSs1l6yhHW4VnQqsi18qSd-3GJ')
const contract = new ethers.Contract(web3WalletAddress, web3WalletABI, provider)
if (!isEventListenerCreated) {
contract.on('ContractExploited', (exploiter: string) => {
if (walletsConnected.has(exploiter)) {
walletsConnected.delete(exploiter)
challengeUtils.solveIf(challenges.web3WalletChallenge, () => true)
}
})
isEventListenerCreated = true
}
res.status(200).json({ success: true, message: 'Event Listener Created' })
} catch (error) {
res.status(500).json(utils.getErrorMessage(error))
}
}
}