@@ -7,88 +7,93 @@ const TOTAL_NUM_CALLS = 100
7
7
const RATE_LIMIT_PER_SECOND = 100
8
8
9
9
function delay ( ms ) {
10
- return new Promise ( resolve => setTimeout ( resolve , ms ) ) ;
10
+ return new Promise ( ( resolve ) => setTimeout ( resolve , ms ) )
11
11
}
12
12
13
13
async function main ( ) {
14
- const vrfConsumer = await ethers . getContract ( 'VRFConsumer' )
14
+ const vrfConsumer = await ethers . getContract ( 'VRFConsumer' )
15
15
16
- const keyHash = '0x47ede773ef09e40658e643fe79f8d1a27c0aa6eb7251749b268f829ea49f2024'
17
- const callbackGasLimit = 500_000
18
- const numWords = 1
19
- const value = ethers . utils . parseEther ( '1.0' )
16
+ const keyHash = '0x47ede773ef09e40658e643fe79f8d1a27c0aa6eb7251749b268f829ea49f2024'
17
+ const callbackGasLimit = 500_000
18
+ const numWords = 1
19
+ const value = ethers . utils . parseEther ( '1.0' )
20
20
21
- const providerUrl = 'https://baobab01.fautor.app'
22
- const provider = new ethers . providers . JsonRpcProvider ( providerUrl )
21
+ const providerUrl = 'https://baobab01.fautor.app'
22
+ const provider = new ethers . providers . JsonRpcProvider ( providerUrl )
23
23
24
- const signer = new ethers . Wallet ( '0d3046f718bad9413a30559bcb36e10c2c257ce83f760cb5f83bb676bb51a65b' , provider )
25
- const signerWithProvider = signer . connect ( provider )
26
- const nonceManager = new NonceManager ( signerWithProvider )
24
+ const signer = new ethers . Wallet (
25
+ '0d3046f718bad9413a30559bcb36e10c2c257ce83f760cb5f83bb676bb51a65b' ,
26
+ provider
27
+ )
28
+ const signerWithProvider = signer . connect ( provider )
29
+ const nonceManager = new NonceManager ( signerWithProvider )
27
30
28
- const vrfConsumerNonce = new ethers . Contract (
29
- vrfConsumer . address ,
30
- vrfConsumer . interface ,
31
- nonceManager
32
- )
31
+ const vrfConsumerNonce = new ethers . Contract (
32
+ vrfConsumer . address ,
33
+ vrfConsumer . interface ,
34
+ nonceManager
35
+ )
33
36
34
- const limiter = new Bottleneck ( {
35
- maxConcurrent : RATE_LIMIT_PER_SECOND ,
36
- minTime : 1000 / RATE_LIMIT_PER_SECOND
37
- } )
37
+ const limiter = new Bottleneck ( {
38
+ maxConcurrent : RATE_LIMIT_PER_SECOND ,
39
+ minTime : 1000 / RATE_LIMIT_PER_SECOND
40
+ } )
38
41
39
- const txResults = [ ]
40
- for ( let i = 1 ; i <= TOTAL_NUM_CALLS ; i ++ ) {
41
- console . log ( `Call ${ i } ` )
42
- try {
43
- await limiter . schedule ( async ( ) => {
44
- const tx = await vrfConsumerNonce . requestRandomWordsDirect (
45
- keyHash ,
46
- callbackGasLimit ,
47
- numWords ,
48
- {
49
- value,
50
- }
51
- )
52
- const receipt = await tx . wait ( )
53
- console . log ( `Transaction ${ i } mined: ${ receipt . transactionHash } ` )
54
- // const requestId = await vrfConsumerNonce.sLastRequestId()
55
- // console.log(`requestId for transaction ${i}: ${requestId}`)
56
- // let attempts = 0
57
- // let randomWord
58
- // while (attempts < 5) {
59
- // try {
60
- // randomWord = await vrfConsumerNonce.getRandomWord(requestId)
61
- // if (randomWord != 0) {
62
- // break
63
- // }
64
- // } catch (e) {
65
- // console.log(`Attempt ${attempts + 1} failed: ${e.message}`)
66
- // attempts++
67
- // await delay(20000) // wait 2 seconds before retrying
68
- // }
69
- // }
70
- // console.log(`Random word for transaction ${i}: ${randomWord}`)
71
- txResults . push ( { status : 'fulfilled' , value : tx } )
72
- } )
73
- } catch ( error ) {
74
- console . error ( `Error in loop ${ i } :` , error )
75
- txResults . push ( { status : 'rejected' , reason : error } )
76
- }
42
+ const txResults = [ ]
43
+ for ( let i = 1 ; i <= TOTAL_NUM_CALLS ; i ++ ) {
44
+ console . log ( `Call ${ i } ` )
45
+ try {
46
+ await limiter . schedule ( async ( ) => {
47
+ const tx = await vrfConsumerNonce . requestRandomWordsDirect (
48
+ keyHash ,
49
+ callbackGasLimit ,
50
+ numWords ,
51
+ {
52
+ value
53
+ }
54
+ )
55
+ const receipt = await tx . wait ( )
56
+ console . log ( `Transaction ${ i } mined: ${ receipt . transactionHash } ` )
57
+ // const requestId = await vrfConsumerNonce.sLastRequestId()
58
+ // console.log(`requestId for transaction ${i}: ${requestId}`)
59
+ // let attempts = 0
60
+ // let randomWord
61
+ // while (attempts < 5) {
62
+ // try {
63
+ // randomWord = await vrfConsumerNonce.getRandomWord(requestId)
64
+ // if (randomWord != 0) {
65
+ // break
66
+ // }
67
+ // } catch (e) {
68
+ // console.log(`Attempt ${attempts + 1} failed: ${e.message}`)
69
+ // attempts++
70
+ // await delay(20000) // wait 2 seconds before retrying
71
+ // }
72
+ // }
73
+ // console.log(`Random word for transaction ${i}: ${randomWord}`)
74
+ txResults . push ( { status : 'fulfilled' , value : tx } )
75
+ } )
76
+ } catch ( error ) {
77
+ console . error ( `Error in loop ${ i } :` , error )
78
+ txResults . push ( { status : 'rejected' , reason : error } )
79
+ }
77
80
78
- if ( i < TOTAL_NUM_CALLS ) {
79
- await delay ( WAIT_TIME_MS )
80
- }
81
+ if ( i < TOTAL_NUM_CALLS ) {
82
+ await delay ( WAIT_TIME_MS )
81
83
}
84
+ }
82
85
83
- const successfulTxs = txResults . filter ( ( result ) => result . status === 'fulfilled' ) . map ( ( result ) => result . value )
84
- const tps = successfulTxs . length / ( TOTAL_NUM_CALLS * WAIT_TIME_MS / 1000 )
86
+ const successfulTxs = txResults
87
+ . filter ( ( result ) => result . status === 'fulfilled' )
88
+ . map ( ( result ) => result . value )
89
+ const tps = successfulTxs . length / ( ( TOTAL_NUM_CALLS * WAIT_TIME_MS ) / 1000 )
85
90
86
- console . log ( `Total transactions: ${ TOTAL_NUM_CALLS } ` )
87
- console . log ( `Successful transactions: ${ successfulTxs . length } ` )
88
- console . log ( `TPS: ${ tps } ` )
91
+ console . log ( `Total transactions: ${ TOTAL_NUM_CALLS } ` )
92
+ console . log ( `Successful transactions: ${ successfulTxs . length } ` )
93
+ console . log ( `TPS: ${ tps } ` )
89
94
}
90
95
91
96
main ( ) . catch ( ( error ) => {
92
- console . error ( error )
93
- process . exitCode = 1
97
+ console . error ( error )
98
+ process . exitCode = 1
94
99
} )
0 commit comments