@@ -14,7 +14,7 @@ import { useStateProvider } from '../state/StateProvider'
14
14
import { signatureToVRS , packSignatures } from '../utils/signatures'
15
15
import { getSuccessExecutionData } from '../utils/getFinalizationEvent'
16
16
import { TransactionReceipt } from 'web3-eth'
17
- import { useValidatorContract } from '../hooks/useValidatorContract '
17
+ import { ConfirmationParam } from '../hooks/useMessageConfirmations '
18
18
19
19
const ActionButton = styled . button `
20
20
color: var(--button-color);
@@ -31,18 +31,22 @@ interface ManualExecutionButtonParams {
31
31
safeExecutionAvailable : boolean
32
32
messageData : string
33
33
setExecutionData : Function
34
- signatureCollected : string [ ]
34
+ confirmations : ConfirmationParam [ ]
35
35
setPendingExecution : Function
36
36
setError : Function
37
+ requiredSignatures : number
38
+ validatorList : string [ ]
37
39
}
38
40
39
41
export const ManualExecutionButton = ( {
40
42
safeExecutionAvailable,
41
43
messageData,
42
44
setExecutionData,
43
- signatureCollected ,
45
+ confirmations ,
44
46
setPendingExecution,
45
- setError
47
+ setError,
48
+ requiredSignatures,
49
+ validatorList
46
50
} : ManualExecutionButtonParams ) => {
47
51
const { foreign } = useStateProvider ( )
48
52
const { library, activate, account, active } = useWeb3React ( )
@@ -52,55 +56,34 @@ export const ManualExecutionButton = ({
52
56
const [ title , setTitle ] = useState ( 'Loading' )
53
57
const [ validSignatures , setValidSignatures ] = useState < string [ ] > ( [ ] )
54
58
55
- const { requiredSignatures, validatorList } = useValidatorContract ( false , 'latest' )
56
-
57
59
useEffect (
58
60
( ) => {
59
61
if (
60
62
! foreign . bridgeContract ||
61
63
! foreign . web3 ||
62
- ! signatureCollected ||
63
- ! signatureCollected . length ||
64
+ ! confirmations ||
65
+ ! confirmations . length ||
64
66
! requiredSignatures ||
65
67
! validatorList ||
66
68
! validatorList . length
67
69
)
68
70
return
69
71
70
72
const signatures = [ ]
71
- const remainingValidators = Object . fromEntries ( validatorList . map ( validator => [ validator , true ] ) )
72
- for ( let i = 0 ; i < signatureCollected . length && signatures . length < requiredSignatures ; i ++ ) {
73
- const { v, r, s } = signatureToVRS ( signatureCollected [ i ] )
73
+ for ( let i = 0 ; i < confirmations . length && signatures . length < requiredSignatures ; i ++ ) {
74
+ const sig = confirmations [ i ] . signature
75
+ if ( ! sig ) {
76
+ continue
77
+ }
78
+ const { v, r, s } = signatureToVRS ( sig )
74
79
const signer = foreign . web3 . eth . accounts . recover ( messageData , `0x${ v } ` , `0x${ r } ` , `0x${ s } ` )
75
80
if ( validatorList . includes ( signer ) ) {
76
- delete remainingValidators [ signer ]
77
- signatures . push ( signatureCollected [ i ] )
78
- }
79
- }
80
-
81
- if ( signatures . length < requiredSignatures ) {
82
- console . log ( 'On-chain collected signatures are not enough for message execution' )
83
- const manualValidators = Object . keys ( remainingValidators )
84
- const msgHash = foreign . web3 . utils . sha3 ( messageData ) !
85
- for ( let i = 0 ; i < manualValidators . length && signatures . length < requiredSignatures ; i ++ ) {
86
- try {
87
- const overrideSignatures : {
88
- [ key : string ] : string
89
- } = require ( `../snapshots/signatures_${ manualValidators [ i ] } .json` )
90
- if ( overrideSignatures [ msgHash ] ) {
91
- console . log ( `Adding manual signature from ${ manualValidators [ i ] } ` )
92
- signatures . push ( overrideSignatures [ msgHash ] )
93
- } else {
94
- console . log ( `No manual signature from ${ manualValidators [ i ] } was found` )
95
- }
96
- } catch ( e ) {
97
- console . log ( `Signatures overrides are not present for ${ manualValidators [ i ] } ` )
98
- }
81
+ signatures . push ( sig )
99
82
}
100
83
}
101
84
102
85
if ( signatures . length >= requiredSignatures ) {
103
- setValidSignatures ( signatures )
86
+ setValidSignatures ( signatures . slice ( 0 , requiredSignatures ) )
104
87
setTitle ( 'Execute' )
105
88
setReady ( true )
106
89
} else {
@@ -110,11 +93,11 @@ export const ManualExecutionButton = ({
110
93
[
111
94
foreign . bridgeContract ,
112
95
foreign . web3 ,
113
- signatureCollected ,
114
96
validatorList ,
115
97
requiredSignatures ,
116
98
messageData ,
117
- setValidSignatures
99
+ setValidSignatures ,
100
+ confirmations
118
101
]
119
102
)
120
103
0 commit comments