-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Expand file tree
/
Copy pathindex.js
More file actions
76 lines (60 loc) · 2.26 KB
/
Copy pathindex.js
File metadata and controls
76 lines (60 loc) · 2.26 KB
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
const Web3 = require('web3');
const contractFile = require('./compile');
const config = require('./config');
const ContractDeployer = require('./modules/deployer');
const ContractInteractor = require('./modules/interactor');
const EventListener = require('./modules/eventListener');
const { ErrorHandler } = require('./modules/errorHandler');
require('dotenv').config();
// Receiver address
const receiver = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
// Create Web3 instance
const web3 = new Web3(
new Web3.providers.HttpProvider(config.networks.development.provider)
);
// Create account
const account = web3.eth.accounts.privateKeyToAccount(process.env.PRIVATE_KEY);
const account_from = {
privateKey: account.privateKey,
accountaddress: account.address,
};
// Get contract bytecode and ABI
const bytecode = contractFile.evm.bytecode.object;
const abi = contractFile.abi;
const main = async () => {
try {
// 1. Deploy contract
const deployer = new ContractDeployer(web3, account_from);
const contract = await deployer.deploy(abi, bytecode);
// 2. Create contract interaction instance
const interactor = new ContractInteractor(web3, contract);
// 3. Transfer tokens
await interactor.transfer(account_from, receiver, 100000);
// 4. Query receiver balance
await interactor.balanceOf(receiver);
// 5. Create WebSocket connection for event listening
const web3Socket = new Web3(
`wss://sepolia.infura.io/ws/v3/${process.env.INFURA_ID}`
);
const socketContract = new web3Socket.eth.Contract(abi, contract.options.address);
// 6. Setup event listener
const eventListener = new EventListener(web3Socket, socketContract);
await eventListener.subscribeToTransfers();
// Wait for a while to receive events
console.log('Waiting for events...');
await new Promise(resolve => setTimeout(resolve, 10000));
// 7. Get historical transfer events
const deployBlock = await web3.eth.getBlockNumber();
await eventListener.getPastTransfers(deployBlock);
// 8. Cleanup event subscriptions
eventListener.unsubscribeAll();
} catch (error) {
await ErrorHandler.handle(error, web3);
}
};
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});