mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-11-08 01:11:06 +00:00
Add multisig pending-operations UI, fix broken multisig address calc, new signing portal
- calculateMultisigAddress was completely broken (hex-decoded an SS58 string and never hashed the preimage) - fixed via @pezkuwi/util-crypto's real encodeMultiAddress/createKeyMulti, verified against the actual known multisig address on-chain. - ReservesDashboardPage had stale Noter/Berdevk addresses that don't match the real signers - centralized as BRIDGE_MULTISIG_SPECIFIC_ADDRESSES. - USDTBridge withdrawal called assets.burn directly as a single-signer extrinsic (always fails - only the multisig is Admin) while only checking status.isFinalized (a failed dispatch is still finalized, so it silently did nothing) - replaced with the correct transfer-to-custody flow the relayer actually watches for. - New MultisigOperationsPage (/multisig/pending) lists pending calls from real Multisig.Multisigs storage and lets any of the 5 signers approve/reject with their own wallet extension. - New standalone sign/ app (deployed separately at pezbridge-sign.pex.mom) - a dedicated, gated signing portal for the same operations, so signing isn't dependent on this app alone.
This commit is contained in:
1 parent
fe3c65a706
commit
dd58fe9164
24 files changed
+5662
-64
No files matched your search
@@ -0,0 +1,30 @@
|
||||
import React from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { ArrowLeft } from 'lucide-react';
|
||||
import { MultisigOperations } from '@/components/MultisigOperations';
|
||||
|
||||
const MultisigOperationsPage = () => {
|
||||
const navigate = useNavigate();
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className="min-h-screen bg-gray-950 pt-24 pb-12">
|
||||
<div className="container mx-auto px-4 py-8 relative max-w-3xl">
|
||||
<button
|
||||
onClick={() => navigate('/wallet')}
|
||||
className="absolute top-4 left-4 text-gray-400 hover:text-white transition-colors flex items-center gap-2"
|
||||
>
|
||||
<ArrowLeft className="w-5 h-5" />
|
||||
<span>{t('multisigOps.backToWallet')}</span>
|
||||
</button>
|
||||
|
||||
<div className="pt-16">
|
||||
<MultisigOperations />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default MultisigOperationsPage;
|
||||
@@ -4,13 +4,7 @@ import { ArrowLeft, Plus } from 'lucide-react';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { ReservesDashboard } from '@/components/ReservesDashboard';
|
||||
import { USDTBridge } from '@/components/USDTBridge';
|
||||
|
||||
// USDT Treasury Multisig Member Addresses
|
||||
const SPECIFIC_ADDRESSES = {
|
||||
// Non-unique roles - manually specified
|
||||
Noter: '5DFwqK698vL4gXHEcanaewnAqhxJ2rjhAogpSTHw3iwGDwd3',
|
||||
Berdevk: '5F4V6dzpe72dE2C7YN3y7VGznMTWPFeSKL3ANhp4XasXjfvj',
|
||||
};
|
||||
import { BRIDGE_MULTISIG_SPECIFIC_ADDRESSES } from '@pezkuwi/lib/multisig';
|
||||
|
||||
const ReservesDashboardPage = () => {
|
||||
const navigate = useNavigate();
|
||||
@@ -42,7 +36,7 @@ const ReservesDashboardPage = () => {
|
||||
|
||||
{/* Main Content */}
|
||||
<ReservesDashboard
|
||||
specificAddresses={SPECIFIC_ADDRESSES}
|
||||
specificAddresses={BRIDGE_MULTISIG_SPECIFIC_ADDRESSES}
|
||||
offChainReserveAmount={offChainReserve}
|
||||
/>
|
||||
|
||||
@@ -50,7 +44,7 @@ const ReservesDashboardPage = () => {
|
||||
<USDTBridge
|
||||
isOpen={isBridgeOpen}
|
||||
onClose={() => setIsBridgeOpen(false)}
|
||||
specificAddresses={SPECIFIC_ADDRESSES}
|
||||
specificAddresses={BRIDGE_MULTISIG_SPECIFIC_ADDRESSES}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in new issue
Block a user