diff --git a/src/base/orgs/Create.svelte b/src/base/orgs/Create.svelte index be03eb733..912e1f6a3 100644 --- a/src/base/orgs/Create.svelte +++ b/src/base/orgs/Create.svelte @@ -18,22 +18,30 @@ Success, } + enum Governance { + BDFL = "bdfl", + Quorum = "quorum", + } + const orgTypes = [ - { label: "Single signer", value: "bdfl" }, - { label: "Quorum", value: "dao" }, + { label: "Single signer", value: Governance.BDFL }, + { label: "Quorum", value: Governance.Quorum }, ]; let state = State.Idle; let error: Err | null = null; let org: Org | null = null; - let governance: string = "bdfl"; + let governance = Governance.BDFL; const dispatch = createEventDispatcher(); const createOrg = async () => { state = State.Signing; try { - let tx = await Org.create(owner, config); + let tx = governance === Governance.Quorum + ? await Org.createMultiSig([owner], 1, config) + : await Org.create(owner, config); + state = State.Pending; let receipt = await tx.wait(); @@ -48,7 +56,10 @@ }; const onGovernanceChanged = (event: { detail: string }) => { - governance = event.detail; + switch (event.detail) { + case "bdfl": governance = Governance.BDFL; break; + case "quorum": governance = Governance.Quorum; break; + } }; @@ -90,7 +101,7 @@ {:else if state === State.Signing}
Confirm transaction in your wallet
{:else if state === State.Pending} -
Waiting for transaction to be processed
+
Waiting for transaction to be processed...
{/if} diff --git a/src/base/orgs/Org.ts b/src/base/orgs/Org.ts index d3d44ffc4..4cfb8128b 100644 --- a/src/base/orgs/Org.ts +++ b/src/base/orgs/Org.ts @@ -6,6 +6,7 @@ import { assert } from '@app/error'; import type { Config } from '@app/config'; const orgFactoryAbi = [ + "function createOrg(address) returns (address)", "function createOrg(address[], uint256) returns (address)", "event OrgCreated(address, address)", ]; @@ -59,6 +60,22 @@ export class Org { } } + static async createMultiSig( + owners: [string], + threshold: number, + config: Config, + ): Promise { + const orgFactory = new ethers.Contract( + config.orgFactory.address, + orgFactoryAbi, + config.signer + ); + + return orgFactory['createOrg(address[],uint256)'](owners, threshold, { + gasLimit: config.gasLimits.createOrg + }); + } + static async create( owner: string, config: Config, @@ -69,7 +86,7 @@ export class Org { config.signer ); - return orgFactory.createOrg([owner], 1, { + return orgFactory['createOrg(address)'](owner, { gasLimit: config.gasLimits.createOrg }); } diff --git a/src/config.json b/src/config.json index 0e0598745..dbd976a27 100644 --- a/src/config.json +++ b/src/config.json @@ -20,7 +20,7 @@ "address": "0x59b5eee36f5fa52400A136Fd4630Ee2bF126a4C0" }, "orgFactory": { - "address": "0x2007bcEf1247CD03Bb4262eF420D6487368f473B" + "address": "0xe1814B14430CF14f0950A29FF26217115B815676" } } }