diff --git a/src/components/Multisig.tsx b/src/components/Multisig.tsx
index 987b61f..7d31944 100644
--- a/src/components/Multisig.tsx
+++ b/src/components/Multisig.tsx
@@ -41,6 +41,7 @@ import ListItemIcon from "@material-ui/core/ListItemIcon";
import ListItem from "@material-ui/core/ListItem";
import ListItemText from "@material-ui/core/ListItemText";
import CheckCircleIcon from "@material-ui/icons/CheckCircle";
+import FaceIcon from "@material-ui/icons/Face";
import BN from "bn.js";
import {
Account,
@@ -314,7 +315,9 @@ export function NewMultisigDialog({
label="Max Number of Participants (cannot grow the owner set past this)"
value={maxParticipantLength}
type="number"
- onChange={(e) => setMaxParticipantLength(parseInt(e.target.value) as number)}
+ onChange={(e) =>
+ setMaxParticipantLength(parseInt(e.target.value) as number)
+ }
/>
{participants.map((p, idx) => (
);
+ } else if (tx.account.data.equals(setAuthorityData())) {
+ return (
+
+ );
}
}
if (tx.account.programId.equals(multisigClient.programId)) {
@@ -762,12 +772,152 @@ function AddTransactionDialog({
multisig={multisig}
onClose={onClose}
/>
+
);
}
+function SetAuthorityListItem({
+ multisig,
+ onClose,
+ didAddTransaction,
+}: {
+ multisig: PublicKey;
+ onClose: Function;
+ didAddTransaction: (tx: PublicKey) => void;
+}) {
+ const [open, setOpen] = useState(false);
+ return (
+ <>
+ setOpen((open) => !open)}>
+
+
+
+
+ {open ? : }
+
+
+
+
+ >
+ );
+}
+
+function SetAuthorityListItemDetails({
+ multisig,
+ onClose,
+ didAddTransaction,
+}: {
+ multisig: PublicKey;
+ onClose: Function;
+ didAddTransaction: (tx: PublicKey) => void;
+}) {
+ // @ts-ignore
+ const [newAuthority, setNewAuthority] = useState(new PublicKey());
+ // @ts-ignore
+ const [bufferAccount, setBufferAccount] = useState(new PublicKey());
+ const { multisigClient } = useWallet();
+ // @ts-ignore
+ const { enqueueSnackbar } = useSnackbar();
+ const setAuthority = async () => {
+ enqueueSnackbar("Creating set authority transaction", {
+ variant: "info",
+ });
+ const data = setAuthorityData();
+ const [multisigSigner] = await PublicKey.findProgramAddress(
+ [multisig.toBuffer()],
+ multisigClient.programId
+ );
+ const accounts = [
+ {
+ pubkey: bufferAccount,
+ isWritable: true,
+ isSigner: false,
+ },
+ {
+ pubkey: multisigSigner,
+ isWritable: false,
+ isSigner: true,
+ },
+ {
+ pubkey: newAuthority,
+ isWritable: false,
+ isSigner: false,
+ },
+ ];
+ const transaction = new Account();
+ const txSize = 1000; // todo
+ const tx = await multisigClient.rpc.createTransaction(
+ BPF_LOADER_UPGRADEABLE_PID,
+ accounts,
+ data,
+ {
+ accounts: {
+ multisig,
+ transaction: transaction.publicKey,
+ proposer: multisigClient.provider.wallet.publicKey,
+ rent: SYSVAR_RENT_PUBKEY,
+ },
+ signers: [transaction],
+ instructions: [
+ await multisigClient.account.transaction.createInstruction(
+ transaction,
+ // @ts-ignore
+ txSize
+ ),
+ ],
+ }
+ );
+ enqueueSnackbar("Transaction created", {
+ variant: "success",
+ action: ,
+ });
+ didAddTransaction(transaction.publicKey);
+ onClose();
+ };
+ return (
+
+
{
+ setBufferAccount(new PublicKey(e.target.value as string));
+ }}
+ />
+ {
+ setNewAuthority(new PublicKey(e.target.value as string));
+ }}
+ />
+
+
+
+
+ );
+}
+
function ChangeThresholdListItem({
multisig,
onClose,
@@ -1220,7 +1370,7 @@ function UpgradeProgramListItemDetails({
const programAddr = new PublicKey(programId as string);
const bufferAddr = new PublicKey(buffer as string);
// Hard code serialization.
- const data = Buffer.from([3, 0, 0, 0]);
+ const data = upgradeData();
const programAccount = await (async () => {
const programAccount = await multisigClient.provider.connection.getAccountInfo(
@@ -1324,7 +1474,11 @@ function UpgradeProgramListItemDetails({
// @ts-ignore
function icon(tx, multisigClient) {
if (tx.account.programId.equals(BPF_LOADER_UPGRADEABLE_PID)) {
- return ;
+ if (tx.account.data[0] === 3) {
+ return ;
+ } else if (tx.account.data[0] === 4) {
+ return ;
+ }
}
if (tx.account.programId.equals(multisigClient.programId)) {
const setThresholdSighash = multisigClient.coder.sighash(
@@ -1361,3 +1515,11 @@ function setOwnersData(multisigClient, owners) {
owners,
});
}
+
+function setAuthorityData(): Buffer {
+ return Buffer.from([4, 0, 0, 0]);
+}
+
+function upgradeData(): Buffer {
+ return Buffer.from([3, 0, 0, 0]);
+}