Skip to content

Commit 7f38b4d

Browse files
committed
fix UI when a proxy call was made from a multisig account
1 parent 138d941 commit 7f38b4d

1 file changed

Lines changed: 11 additions & 10 deletions

File tree

packages/react-signer/src/Address.tsx

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,13 @@ function filterProxies (allAccounts: string[], tx: Call | SubmittableExtrinsic<'
143143
}
144144

145145
// This function shouldn't depend on proxyAddress, it can fetch multisig info based on source multisig account.
146-
async function queryForMultisig (api: ApiPromise, requestAddress: string | null, tx: SubmittableExtrinsic<'promise'>): Promise<MultiState | null> {
146+
async function queryForMultisig (api: ApiPromise, requestAddress: string | null, isProxyActive: boolean, proxyAddress: string | null, tx: SubmittableExtrinsic<'promise'>): Promise<MultiState | null> {
147147
const multiModule = api.tx.multisig ? 'multisig' : 'utility';
148148

149149
if (isFunction(api.query[multiModule]?.multisigs)) {
150-
const address = requestAddress;
150+
const address = (proxyAddress && isProxyActive) ? proxyAddress : requestAddress;
151151
const { threshold, who } = extractExternal(address);
152-
const hash = (address ? api.tx.proxy.proxy(requestAddress || '', null, tx) : tx).method.hash;
152+
const hash = (proxyAddress && isProxyActive ? api.tx.proxy.proxy(requestAddress || '', null, tx) : tx).method.hash;
153153

154154
const optMulti = await api.query[multiModule].multisigs<Option<Multisig>>(address, hash);
155155
const multi = optMulti.unwrapOr(null);
@@ -206,8 +206,9 @@ function Address ({ currentItem, onChange, onEnter, passwordError, requestAddres
206206
(): [string | null, AddressFlags] => {
207207
// If certain conditions are met, then proxyAddress would have higher priority over multisig signatories.
208208
// proxyAddress would be used to sign tx in that scenario.
209-
const signAddress = (isProxyActive && proxyInfo && proxyAddress) ||
210-
(multiInfo && multiAddress) ||
209+
// Avail: Above seems wrong, I let it for further upstream updates, but I switched the order back
210+
const signAddress = (multiInfo && multiAddress) ||
211+
(isProxyActive && proxyInfo && proxyAddress) ||
211212
requestAddress;
212213

213214
try {
@@ -242,22 +243,22 @@ function Address ({ currentItem, onChange, onEnter, passwordError, requestAddres
242243
useEffect((): void => {
243244
setMultInfo(null);
244245

245-
currentItem.extrinsic && extractExternal(requestAddress).isMultisig &&
246-
queryForMultisig(api, requestAddress, currentItem.extrinsic)
246+
currentItem.extrinsic && extractExternal(proxyAddress && isProxyActive ? proxyAddress : requestAddress).isMultisig &&
247+
queryForMultisig(api, requestAddress, isProxyActive, proxyAddress, currentItem.extrinsic)
247248
.then((info): void => {
248249
if (mountedRef.current) {
249250
setMultInfo(info);
250251
setIsMultiCall(info?.isMultiCall || false);
251252
}
252253
})
253254
.catch(console.error);
254-
}, [api, currentItem.extrinsic, mountedRef, requestAddress]);
255+
}, [api, currentItem.extrinsic, isProxyActive, mountedRef, proxyAddress, requestAddress]);
255256

256257
useEffect((): void => {
257258
onChange({
258259
isMultiCall,
259260
isUnlockCached,
260-
multiRoot: multiInfo && (!isProxyActive || !proxyInfo) ? multiInfo.address : null,
261+
multiRoot: multiInfo ? multiInfo.address : null,
261262
proxyRoot: (proxyInfo && isProxyActive) ? proxyInfo.address : null,
262263
signAddress,
263264
signPassword
@@ -286,7 +287,7 @@ function Address ({ currentItem, onChange, onEnter, passwordError, requestAddres
286287
/>
287288
</Modal.Columns>
288289
)}
289-
{multiInfo && (!isProxyActive || !proxyInfo) && (
290+
{multiInfo && (
290291
<Modal.Columns hint={t('The signatory is one of the allowed accounts on the multisig, making a recorded approval for the transaction.')}>
291292
<InputAddress
292293
filter={multiInfo.whoFilter}

0 commit comments

Comments
 (0)