@geoprotocol/geo-sdk 0.19.2 → 0.20.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -45
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/src/abis/dao-space-factory.d.ts +43 -6
- package/dist/src/abis/dao-space-factory.d.ts.map +1 -1
- package/dist/src/abis/dao-space-factory.js +38 -27
- package/dist/src/abis/dao-space-factory.js.map +1 -1
- package/dist/src/abis/dao-space-v2.test.d.ts +2 -0
- package/dist/src/abis/dao-space-v2.test.d.ts.map +1 -0
- package/dist/src/abis/dao-space-v2.test.js +67 -0
- package/dist/src/abis/dao-space-v2.test.js.map +1 -0
- package/dist/src/abis/dao-space.d.ts +98 -7
- package/dist/src/abis/dao-space.d.ts.map +1 -1
- package/dist/src/abis/dao-space.js +61 -99
- package/dist/src/abis/dao-space.js.map +1 -1
- package/dist/src/abis/index.d.ts +2 -2
- package/dist/src/abis/index.d.ts.map +1 -1
- package/dist/src/abis/index.js +2 -2
- package/dist/src/abis/index.js.map +1 -1
- package/dist/src/api-surface.e2e.test.d.ts +2 -0
- package/dist/src/api-surface.e2e.test.d.ts.map +1 -0
- package/dist/src/{e2e-api-surface.test.js → api-surface.e2e.test.js} +86 -100
- package/dist/src/api-surface.e2e.test.js.map +1 -0
- package/dist/src/client/dao-spaces.d.ts +65 -33
- package/dist/src/client/dao-spaces.d.ts.map +1 -1
- package/dist/src/client/dao-spaces.js +133 -42
- package/dist/src/client/dao-spaces.js.map +1 -1
- package/dist/src/client/dao-spaces.test.js +277 -79
- package/dist/src/client/dao-spaces.test.js.map +1 -1
- package/dist/src/client/personal-spaces.js +2 -2
- package/dist/src/client/personal-spaces.js.map +1 -1
- package/dist/src/client/spaces.test.js +9 -7
- package/dist/src/client/spaces.test.js.map +1 -1
- package/dist/src/client.d.ts +14 -14
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +48 -59
- package/dist/src/client.js.map +1 -1
- package/dist/src/client.test.js +8 -3
- package/dist/src/client.test.js.map +1 -1
- package/dist/src/contracts-v2/local-geobrowser.e2e.test.d.ts +2 -0
- package/dist/src/contracts-v2/local-geobrowser.e2e.test.d.ts.map +1 -0
- package/dist/src/contracts-v2/local-geobrowser.e2e.test.js +239 -0
- package/dist/src/contracts-v2/local-geobrowser.e2e.test.js.map +1 -0
- package/dist/src/dao-space/constants.d.ts +10 -0
- package/dist/src/dao-space/constants.d.ts.map +1 -1
- package/dist/src/dao-space/constants.js +10 -0
- package/dist/src/dao-space/constants.js.map +1 -1
- package/dist/src/dao-space/execute-proposal.d.ts +1 -1
- package/dist/src/dao-space/execute-proposal.js +2 -2
- package/dist/src/dao-space/execute-proposal.js.map +1 -1
- package/dist/src/dao-space/index.d.ts +2 -1
- package/dist/src/dao-space/index.d.ts.map +1 -1
- package/dist/src/dao-space/index.js +1 -0
- package/dist/src/dao-space/index.js.map +1 -1
- package/dist/src/dao-space/propose-add-editor.d.ts +1 -20
- package/dist/src/dao-space/propose-add-editor.d.ts.map +1 -1
- package/dist/src/dao-space/propose-add-editor.js +12 -87
- package/dist/src/dao-space/propose-add-editor.js.map +1 -1
- package/dist/src/dao-space/propose-add-editor.test.js +16 -4
- package/dist/src/dao-space/propose-add-editor.test.js.map +1 -1
- package/dist/src/dao-space/propose-add-member.d.ts +1 -20
- package/dist/src/dao-space/propose-add-member.d.ts.map +1 -1
- package/dist/src/dao-space/propose-add-member.js +12 -87
- package/dist/src/dao-space/propose-add-member.js.map +1 -1
- package/dist/src/dao-space/propose-add-member.test.js +13 -0
- package/dist/src/dao-space/propose-add-member.test.js.map +1 -1
- package/dist/src/dao-space/propose-edit.test.js +45 -0
- package/dist/src/dao-space/propose-edit.test.js.map +1 -1
- package/dist/src/dao-space/propose-remove-editor.d.ts +1 -22
- package/dist/src/dao-space/propose-remove-editor.d.ts.map +1 -1
- package/dist/src/dao-space/propose-remove-editor.js +12 -94
- package/dist/src/dao-space/propose-remove-editor.js.map +1 -1
- package/dist/src/dao-space/propose-remove-editor.test.js +22 -4
- package/dist/src/dao-space/propose-remove-editor.test.js.map +1 -1
- package/dist/src/dao-space/propose-remove-member.d.ts +1 -22
- package/dist/src/dao-space/propose-remove-member.d.ts.map +1 -1
- package/dist/src/dao-space/propose-remove-member.js +12 -94
- package/dist/src/dao-space/propose-remove-member.js.map +1 -1
- package/dist/src/dao-space/propose-remove-member.test.js +19 -0
- package/dist/src/dao-space/propose-remove-member.test.js.map +1 -1
- package/dist/src/dao-space/propose-update-voting-settings.d.ts +8 -0
- package/dist/src/dao-space/propose-update-voting-settings.d.ts.map +1 -0
- package/dist/src/dao-space/propose-update-voting-settings.js +19 -0
- package/dist/src/dao-space/propose-update-voting-settings.js.map +1 -0
- package/dist/src/dao-space/propose-update-voting-settings.test.d.ts +2 -0
- package/dist/src/dao-space/propose-update-voting-settings.test.d.ts.map +1 -0
- package/dist/src/dao-space/propose-update-voting-settings.test.js +118 -0
- package/dist/src/dao-space/propose-update-voting-settings.test.js.map +1 -0
- package/dist/src/dao-space/types.d.ts +72 -11
- package/dist/src/dao-space/types.d.ts.map +1 -1
- package/dist/src/dao-space/vote-proposal.d.ts +1 -1
- package/dist/src/dao-space/vote-proposal.js +2 -2
- package/dist/src/dao-space/vote-proposal.js.map +1 -1
- package/dist/src/dao-space/vote-proposal.test.js +54 -0
- package/dist/src/dao-space/vote-proposal.test.js.map +1 -1
- package/dist/src/e2e-test-environment.d.ts +26 -0
- package/dist/src/e2e-test-environment.d.ts.map +1 -0
- package/dist/src/e2e-test-environment.js +150 -0
- package/dist/src/e2e-test-environment.js.map +1 -0
- package/dist/src/encodings/get-create-dao-space-calldata.d.ts +31 -8
- package/dist/src/encodings/get-create-dao-space-calldata.d.ts.map +1 -1
- package/dist/src/encodings/get-create-dao-space-calldata.js +66 -17
- package/dist/src/encodings/get-create-dao-space-calldata.js.map +1 -1
- package/dist/src/encodings/get-create-dao-space-calldata.test.js +117 -34
- package/dist/src/encodings/get-create-dao-space-calldata.test.js.map +1 -1
- package/dist/src/full-flow-test.test.js +5 -2
- package/dist/src/full-flow-test.test.js.map +1 -1
- package/dist/src/legacy-api-surface.e2e.test.d.ts +2 -0
- package/dist/src/legacy-api-surface.e2e.test.d.ts.map +1 -0
- package/dist/src/{e2e-legacy-api-surface.test.js → legacy-api-surface.e2e.test.js} +90 -70
- package/dist/src/legacy-api-surface.e2e.test.js.map +1 -0
- package/dist/src/personal-space/constants.d.ts +1 -1
- package/dist/src/personal-space/constants.d.ts.map +1 -1
- package/dist/src/personal-space/constants.js +1 -1
- package/dist/src/personal-space/constants.js.map +1 -1
- package/dist/src/personal-space/create-space.d.ts +2 -2
- package/dist/src/personal-space/create-space.d.ts.map +1 -1
- package/dist/src/personal-space/create-space.js +4 -3
- package/dist/src/personal-space/create-space.js.map +1 -1
- package/dist/src/personal-space/types.d.ts +4 -1
- package/dist/src/personal-space/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/dist/src/e2e-api-surface.test.d.ts +0 -2
- package/dist/src/e2e-api-surface.test.d.ts.map +0 -1
- package/dist/src/e2e-api-surface.test.js.map +0 -1
- package/dist/src/e2e-legacy-api-surface.test.d.ts +0 -2
- package/dist/src/e2e-legacy-api-surface.test.d.ts.map +0 -1
- package/dist/src/e2e-legacy-api-surface.test.js.map +0 -1
|
@@ -1,104 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { bytes16ToBytes32LeftAligned, EMPTY_SIGNATURE, ensure0xPrefix, getContractAddressesBasedOnNetwork, isBytes16Hex, PROPOSAL_CREATED_ACTION, } from './constants.js';
|
|
1
|
+
import { createGeoClient } from '../client.js';
|
|
2
|
+
import { resolveGeoNetwork } from '../networks.js';
|
|
3
|
+
import { ensure0xPrefix, isBytes16Hex } from './constants.js';
|
|
5
4
|
/**
|
|
6
5
|
* Creates a proposal to remove a member from a DAO space.
|
|
7
6
|
*
|
|
8
|
-
*
|
|
9
|
-
* 1. Validates the author, DAO space, and member IDs
|
|
10
|
-
* 2. Encodes the `removeMember()` call as the proposal action
|
|
11
|
-
* 3. Encodes the SpaceRegistry's `enter()` call with the `PROPOSAL_CREATED` action
|
|
12
|
-
*
|
|
13
|
-
* @param params - The parameters for proposing member removal
|
|
14
|
-
* @returns Object containing `to` (Space Registry address), `calldata`, and `proposalId`
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```ts
|
|
18
|
-
* import { daoSpace } from '@geoprotocol/geo-sdk';
|
|
19
|
-
*
|
|
20
|
-
* const { to, calldata, proposalId } = daoSpace.proposeRemoveMember({
|
|
21
|
-
* authorSpaceId: '0xAuthorBytes16SpaceId...',
|
|
22
|
-
* spaceId: '0xDAOBytes16SpaceId...',
|
|
23
|
-
* memberToRemoveSpaceId: '0xMemberBytes16SpaceId...',
|
|
24
|
-
* network: 'TESTNET',
|
|
25
|
-
* });
|
|
26
|
-
*
|
|
27
|
-
* // Submit the transaction using viem or another client
|
|
28
|
-
* await walletClient.sendTransaction({ to, data: calldata });
|
|
29
|
-
* ```
|
|
7
|
+
* @deprecated Use `createGeoClient({ network }).daoSpaces.proposeRemoveMember(...)`.
|
|
30
8
|
*/
|
|
31
9
|
export function proposeRemoveMember(params) {
|
|
32
|
-
const {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const spaceId = ensure0xPrefix(rawSpaceId);
|
|
36
|
-
const memberToRemoveSpaceId = ensure0xPrefix(rawMemberToRemoveSpaceId);
|
|
37
|
-
// Validate inputs
|
|
38
|
-
if (!isBytes16Hex(authorSpaceId)) {
|
|
39
|
-
throw new Error(`authorSpaceId must be bytes16 hex (32 hex chars). Received: ${rawAuthorSpaceId}`);
|
|
40
|
-
}
|
|
41
|
-
if (!isBytes16Hex(spaceId)) {
|
|
42
|
-
throw new Error(`spaceId must be bytes16 hex (32 hex chars). Received: ${rawSpaceId}`);
|
|
10
|
+
const { network = 'TESTNET', ...args } = params;
|
|
11
|
+
if (!isBytes16Hex(ensure0xPrefix(args.authorSpaceId))) {
|
|
12
|
+
throw new Error(`authorSpaceId must be bytes16 hex (32 hex chars). Received: ${args.authorSpaceId}`);
|
|
43
13
|
}
|
|
44
|
-
if (!isBytes16Hex(
|
|
45
|
-
throw new Error(`
|
|
14
|
+
if (!isBytes16Hex(ensure0xPrefix(args.spaceId))) {
|
|
15
|
+
throw new Error(`spaceId must be bytes16 hex (32 hex chars). Received: ${args.spaceId}`);
|
|
46
16
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
? ensure0xPrefix(rawProposalId)
|
|
50
|
-
: `0x${uuidv4().replaceAll('-', '')}`;
|
|
51
|
-
if (!isBytes16Hex(proposalId)) {
|
|
52
|
-
throw new Error(`proposalId must be bytes16 hex (32 hex chars). Received: ${rawProposalId}`);
|
|
17
|
+
if (!isBytes16Hex(ensure0xPrefix(args.memberToRemoveSpaceId))) {
|
|
18
|
+
throw new Error(`memberToRemoveSpaceId must be bytes16 hex (32 hex chars). Received: ${args.memberToRemoveSpaceId}`);
|
|
53
19
|
}
|
|
54
|
-
|
|
55
|
-
const proposalActionCalldata = encodeFunctionData({
|
|
56
|
-
abi: DaoSpaceAbi,
|
|
57
|
-
functionName: 'removeMember',
|
|
58
|
-
args: [memberToRemoveSpaceId],
|
|
59
|
-
});
|
|
60
|
-
const contracts = getContractAddressesBasedOnNetwork(network);
|
|
61
|
-
// Create the proposal action (calling removeMember on the Space Registry)
|
|
62
|
-
const proposalActions = [
|
|
63
|
-
{
|
|
64
|
-
to: contracts.SPACE_REGISTRY_ADDRESS,
|
|
65
|
-
value: 0n,
|
|
66
|
-
data: proposalActionCalldata,
|
|
67
|
-
},
|
|
68
|
-
];
|
|
69
|
-
// Encode the proposal data: abi.encode(bytes16 proposalId, VotingMode votingMode, Action[] actions)
|
|
70
|
-
const data = encodeAbiParameters([
|
|
71
|
-
{ type: 'bytes16', name: 'proposalId' },
|
|
72
|
-
{ type: 'uint8', name: 'votingMode' },
|
|
73
|
-
{
|
|
74
|
-
type: 'tuple[]',
|
|
75
|
-
name: 'actions',
|
|
76
|
-
components: [
|
|
77
|
-
{ type: 'address', name: 'to' },
|
|
78
|
-
{ type: 'uint256', name: 'value' },
|
|
79
|
-
{ type: 'bytes', name: 'data' },
|
|
80
|
-
],
|
|
81
|
-
},
|
|
82
|
-
], [proposalId, votingMode === 'FAST' ? 1 : 0, proposalActions]);
|
|
83
|
-
// Convert proposalId to bytes32 for the topic (left-aligned)
|
|
84
|
-
const topic = bytes16ToBytes32LeftAligned(proposalId);
|
|
85
|
-
// Encode the SpaceRegistry.enter() call
|
|
86
|
-
const calldata = encodeFunctionData({
|
|
87
|
-
abi: SpaceRegistryAbi,
|
|
88
|
-
functionName: 'enter',
|
|
89
|
-
args: [
|
|
90
|
-
authorSpaceId, // fromSpaceId
|
|
91
|
-
spaceId, // toSpaceId
|
|
92
|
-
PROPOSAL_CREATED_ACTION, // action
|
|
93
|
-
topic, // topic (proposalId left-aligned to bytes32)
|
|
94
|
-
data, // data (encoded proposal)
|
|
95
|
-
EMPTY_SIGNATURE, // signature (unused when msg.sender == fromSpace)
|
|
96
|
-
],
|
|
97
|
-
});
|
|
98
|
-
return {
|
|
99
|
-
to: contracts.SPACE_REGISTRY_ADDRESS,
|
|
100
|
-
calldata,
|
|
101
|
-
proposalId,
|
|
102
|
-
};
|
|
20
|
+
return createGeoClient({ network: resolveGeoNetwork(network) }).daoSpaces.proposeRemoveMember(args);
|
|
103
21
|
}
|
|
104
22
|
//# sourceMappingURL=propose-remove-member.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"propose-remove-member.js","sourceRoot":"","sources":["../../../src/dao-space/propose-remove-member.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"propose-remove-member.js","sourceRoot":"","sources":["../../../src/dao-space/propose-remove-member.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9D;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAiC;IACnE,MAAM,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAChD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,+DAA+D,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,yDAAyD,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CACb,uEAAuE,IAAI,CAAC,qBAAqB,EAAE,CACpG,CAAC;IACJ,CAAC;IAED,OAAO,eAAe,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACtG,CAAC"}
|
|
@@ -6,11 +6,13 @@ describe('proposeRemoveMember', () => {
|
|
|
6
6
|
// Valid test values
|
|
7
7
|
const validAuthorSpaceId = '0x0eed5491b917cf58b33ac81255fe7ae9';
|
|
8
8
|
const validSpaceId = '0xabcdef12345678901234567890abcdef';
|
|
9
|
+
const validDaoSpaceAddress = '0x1234567890123456789012345678901234567890';
|
|
9
10
|
const validMemberToRemove = '0x11111111111111111111111111111111';
|
|
10
11
|
it('should return correct structure', () => {
|
|
11
12
|
const result = proposeRemoveMember({
|
|
12
13
|
authorSpaceId: validAuthorSpaceId,
|
|
13
14
|
spaceId: validSpaceId,
|
|
15
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
14
16
|
memberToRemoveSpaceId: validMemberToRemove,
|
|
15
17
|
});
|
|
16
18
|
expect(result).toHaveProperty('to');
|
|
@@ -21,6 +23,7 @@ describe('proposeRemoveMember', () => {
|
|
|
21
23
|
const { to } = proposeRemoveMember({
|
|
22
24
|
authorSpaceId: validAuthorSpaceId,
|
|
23
25
|
spaceId: validSpaceId,
|
|
26
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
24
27
|
memberToRemoveSpaceId: validMemberToRemove,
|
|
25
28
|
});
|
|
26
29
|
expect(to).toBe(TESTNET.SPACE_REGISTRY_ADDRESS);
|
|
@@ -29,6 +32,7 @@ describe('proposeRemoveMember', () => {
|
|
|
29
32
|
const { calldata } = proposeRemoveMember({
|
|
30
33
|
authorSpaceId: validAuthorSpaceId,
|
|
31
34
|
spaceId: validSpaceId,
|
|
35
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
32
36
|
memberToRemoveSpaceId: validMemberToRemove,
|
|
33
37
|
});
|
|
34
38
|
expect(calldata).toBeTypeOf('string');
|
|
@@ -38,6 +42,7 @@ describe('proposeRemoveMember', () => {
|
|
|
38
42
|
const { proposalId } = proposeRemoveMember({
|
|
39
43
|
authorSpaceId: validAuthorSpaceId,
|
|
40
44
|
spaceId: validSpaceId,
|
|
45
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
41
46
|
memberToRemoveSpaceId: validMemberToRemove,
|
|
42
47
|
});
|
|
43
48
|
expect(proposalId).toMatch(BYTES16_HEX_REGEX);
|
|
@@ -47,6 +52,7 @@ describe('proposeRemoveMember', () => {
|
|
|
47
52
|
const { proposalId } = proposeRemoveMember({
|
|
48
53
|
authorSpaceId: validAuthorSpaceId,
|
|
49
54
|
spaceId: validSpaceId,
|
|
55
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
50
56
|
memberToRemoveSpaceId: validMemberToRemove,
|
|
51
57
|
proposalId: customProposalId,
|
|
52
58
|
});
|
|
@@ -56,6 +62,7 @@ describe('proposeRemoveMember', () => {
|
|
|
56
62
|
const result = proposeRemoveMember({
|
|
57
63
|
authorSpaceId: validAuthorSpaceId,
|
|
58
64
|
spaceId: validSpaceId,
|
|
65
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
59
66
|
memberToRemoveSpaceId: validMemberToRemove,
|
|
60
67
|
});
|
|
61
68
|
expect(result.calldata).toBeTruthy();
|
|
@@ -64,6 +71,7 @@ describe('proposeRemoveMember', () => {
|
|
|
64
71
|
const result = proposeRemoveMember({
|
|
65
72
|
authorSpaceId: validAuthorSpaceId,
|
|
66
73
|
spaceId: validSpaceId,
|
|
74
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
67
75
|
memberToRemoveSpaceId: validMemberToRemove,
|
|
68
76
|
votingMode: 'FAST',
|
|
69
77
|
});
|
|
@@ -73,6 +81,7 @@ describe('proposeRemoveMember', () => {
|
|
|
73
81
|
const params = {
|
|
74
82
|
authorSpaceId: validAuthorSpaceId,
|
|
75
83
|
spaceId: validSpaceId,
|
|
84
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
76
85
|
memberToRemoveSpaceId: validMemberToRemove,
|
|
77
86
|
};
|
|
78
87
|
const slowResult = proposeRemoveMember({ ...params, votingMode: 'SLOW' });
|
|
@@ -89,12 +98,14 @@ describe('proposeRemoveMember', () => {
|
|
|
89
98
|
const result1 = proposeRemoveMember({
|
|
90
99
|
authorSpaceId: validAuthorSpaceId,
|
|
91
100
|
spaceId: validSpaceId,
|
|
101
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
92
102
|
memberToRemoveSpaceId: validMemberToRemove,
|
|
93
103
|
proposalId: sharedProposalId,
|
|
94
104
|
});
|
|
95
105
|
const result2 = proposeRemoveMember({
|
|
96
106
|
authorSpaceId: validAuthorSpaceId,
|
|
97
107
|
spaceId: validSpaceId,
|
|
108
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
98
109
|
memberToRemoveSpaceId: otherMember,
|
|
99
110
|
proposalId: sharedProposalId,
|
|
100
111
|
});
|
|
@@ -104,6 +115,7 @@ describe('proposeRemoveMember', () => {
|
|
|
104
115
|
const result = proposeRemoveMember({
|
|
105
116
|
authorSpaceId: '0eed5491b917cf58b33ac81255fe7ae9',
|
|
106
117
|
spaceId: 'abcdef12345678901234567890abcdef',
|
|
118
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
107
119
|
memberToRemoveSpaceId: '11111111111111111111111111111111',
|
|
108
120
|
});
|
|
109
121
|
expect(result.calldata).toBeTruthy();
|
|
@@ -113,12 +125,14 @@ describe('proposeRemoveMember', () => {
|
|
|
113
125
|
const withPrefix = proposeRemoveMember({
|
|
114
126
|
authorSpaceId: '0x0eed5491b917cf58b33ac81255fe7ae9',
|
|
115
127
|
spaceId: '0xabcdef12345678901234567890abcdef',
|
|
128
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
116
129
|
memberToRemoveSpaceId: '0x11111111111111111111111111111111',
|
|
117
130
|
proposalId,
|
|
118
131
|
});
|
|
119
132
|
const withoutPrefix = proposeRemoveMember({
|
|
120
133
|
authorSpaceId: '0eed5491b917cf58b33ac81255fe7ae9',
|
|
121
134
|
spaceId: 'abcdef12345678901234567890abcdef',
|
|
135
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
122
136
|
memberToRemoveSpaceId: '11111111111111111111111111111111',
|
|
123
137
|
proposalId,
|
|
124
138
|
});
|
|
@@ -128,6 +142,7 @@ describe('proposeRemoveMember', () => {
|
|
|
128
142
|
const params = {
|
|
129
143
|
authorSpaceId: validAuthorSpaceId,
|
|
130
144
|
spaceId: validSpaceId,
|
|
145
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
131
146
|
memberToRemoveSpaceId: validMemberToRemove,
|
|
132
147
|
};
|
|
133
148
|
const result1 = proposeRemoveMember(params);
|
|
@@ -138,6 +153,7 @@ describe('proposeRemoveMember', () => {
|
|
|
138
153
|
expect(() => proposeRemoveMember({
|
|
139
154
|
authorSpaceId: 'invalid',
|
|
140
155
|
spaceId: validSpaceId,
|
|
156
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
141
157
|
memberToRemoveSpaceId: validMemberToRemove,
|
|
142
158
|
})).toThrow('authorSpaceId must be bytes16 hex');
|
|
143
159
|
});
|
|
@@ -145,6 +161,7 @@ describe('proposeRemoveMember', () => {
|
|
|
145
161
|
expect(() => proposeRemoveMember({
|
|
146
162
|
authorSpaceId: validAuthorSpaceId,
|
|
147
163
|
spaceId: 'tooshort',
|
|
164
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
148
165
|
memberToRemoveSpaceId: validMemberToRemove,
|
|
149
166
|
})).toThrow('spaceId must be bytes16 hex');
|
|
150
167
|
});
|
|
@@ -152,6 +169,7 @@ describe('proposeRemoveMember', () => {
|
|
|
152
169
|
expect(() => proposeRemoveMember({
|
|
153
170
|
authorSpaceId: validAuthorSpaceId,
|
|
154
171
|
spaceId: validSpaceId,
|
|
172
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
155
173
|
memberToRemoveSpaceId: 'badid',
|
|
156
174
|
})).toThrow('memberToRemoveSpaceId must be bytes16 hex');
|
|
157
175
|
});
|
|
@@ -159,6 +177,7 @@ describe('proposeRemoveMember', () => {
|
|
|
159
177
|
expect(() => proposeRemoveMember({
|
|
160
178
|
authorSpaceId: validAuthorSpaceId,
|
|
161
179
|
spaceId: validSpaceId,
|
|
180
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
162
181
|
memberToRemoveSpaceId: validMemberToRemove,
|
|
163
182
|
proposalId: 'badproposalid',
|
|
164
183
|
})).toThrow('proposalId must be bytes16 hex');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"propose-remove-member.test.js","sourceRoot":"","sources":["../../../src/dao-space/propose-remove-member.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,oBAAoB;IACpB,MAAM,kBAAkB,GAAG,oCAA6C,CAAC;IACzE,MAAM,YAAY,GAAG,oCAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"propose-remove-member.test.js","sourceRoot":"","sources":["../../../src/dao-space/propose-remove-member.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ProposeUpdateVotingSettingsParams, ProposeUpdateVotingSettingsResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a proposal to update DAO voting settings.
|
|
4
|
+
*
|
|
5
|
+
* @deprecated Use `createGeoClient({ network }).daoSpaces.proposeUpdateVotingSettings(...)`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function proposeUpdateVotingSettings(params: ProposeUpdateVotingSettingsParams): ProposeUpdateVotingSettingsResult;
|
|
8
|
+
//# sourceMappingURL=propose-update-voting-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propose-update-voting-settings.d.ts","sourceRoot":"","sources":["../../../src/dao-space/propose-update-voting-settings.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iCAAiC,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAEvG;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,iCAAiC,GACxC,iCAAiC,CAUnC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createGeoClient } from '../client.js';
|
|
2
|
+
import { resolveGeoNetwork } from '../networks.js';
|
|
3
|
+
import { ensure0xPrefix, isBytes16Hex } from './constants.js';
|
|
4
|
+
/**
|
|
5
|
+
* Creates a proposal to update DAO voting settings.
|
|
6
|
+
*
|
|
7
|
+
* @deprecated Use `createGeoClient({ network }).daoSpaces.proposeUpdateVotingSettings(...)`.
|
|
8
|
+
*/
|
|
9
|
+
export function proposeUpdateVotingSettings(params) {
|
|
10
|
+
const { network = 'TESTNET', ...args } = params;
|
|
11
|
+
if (!isBytes16Hex(ensure0xPrefix(args.authorSpaceId))) {
|
|
12
|
+
throw new Error(`authorSpaceId must be bytes16 hex (32 hex chars). Received: ${args.authorSpaceId}`);
|
|
13
|
+
}
|
|
14
|
+
if (!isBytes16Hex(ensure0xPrefix(args.spaceId))) {
|
|
15
|
+
throw new Error(`spaceId must be bytes16 hex (32 hex chars). Received: ${args.spaceId}`);
|
|
16
|
+
}
|
|
17
|
+
return createGeoClient({ network: resolveGeoNetwork(network) }).daoSpaces.proposeUpdateVotingSettings(args);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=propose-update-voting-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propose-update-voting-settings.js","sourceRoot":"","sources":["../../../src/dao-space/propose-update-voting-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9D;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAAyC;IAEzC,MAAM,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAChD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,+DAA+D,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,yDAAyD,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,eAAe,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAC9G,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propose-update-voting-settings.test.d.ts","sourceRoot":"","sources":["../../../src/dao-space/propose-update-voting-settings.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { decodeAbiParameters, decodeFunctionData } from 'viem';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { TESTNET } from '../../contracts.js';
|
|
4
|
+
import { DaoSpaceAbi, SpaceRegistryAbi } from '../abis/index.js';
|
|
5
|
+
import { PROPOSAL_CREATED_ACTION } from './constants.js';
|
|
6
|
+
import { proposeUpdateVotingSettings } from './propose-update-voting-settings.js';
|
|
7
|
+
describe('proposeUpdateVotingSettings', () => {
|
|
8
|
+
const validAuthorSpaceId = '0x0eed5491b917cf58b33ac81255fe7ae9';
|
|
9
|
+
const validSpaceId = '0xabcdef12345678901234567890abcdef';
|
|
10
|
+
const validDaoSpaceAddress = '0x1234567890123456789012345678901234567890';
|
|
11
|
+
const validVotingSettings = {
|
|
12
|
+
partialPercentageSupportThreshold: 60,
|
|
13
|
+
universalPercentageSupportThreshold: 90,
|
|
14
|
+
flatSupportThreshold: 2,
|
|
15
|
+
quorum: 1,
|
|
16
|
+
durationInDays: 3,
|
|
17
|
+
disableFastPathAccessForNewMembers: true,
|
|
18
|
+
executionGracePeriodInDays: 14,
|
|
19
|
+
};
|
|
20
|
+
it('should return correct structure', () => {
|
|
21
|
+
const result = proposeUpdateVotingSettings({
|
|
22
|
+
authorSpaceId: validAuthorSpaceId,
|
|
23
|
+
spaceId: validSpaceId,
|
|
24
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
25
|
+
votingSettings: validVotingSettings,
|
|
26
|
+
});
|
|
27
|
+
expect(result).toHaveProperty('to');
|
|
28
|
+
expect(result).toHaveProperty('calldata');
|
|
29
|
+
expect(result).toHaveProperty('proposalId');
|
|
30
|
+
});
|
|
31
|
+
it('should return the correct contract address (Space Registry)', () => {
|
|
32
|
+
const { to } = proposeUpdateVotingSettings({
|
|
33
|
+
authorSpaceId: validAuthorSpaceId,
|
|
34
|
+
spaceId: validSpaceId,
|
|
35
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
36
|
+
votingSettings: validVotingSettings,
|
|
37
|
+
});
|
|
38
|
+
expect(to).toBe(TESTNET.SPACE_REGISTRY_ADDRESS);
|
|
39
|
+
});
|
|
40
|
+
it('should encode a v2 updateVotingSettings DAO action', () => {
|
|
41
|
+
const result = proposeUpdateVotingSettings({
|
|
42
|
+
authorSpaceId: validAuthorSpaceId,
|
|
43
|
+
spaceId: validSpaceId,
|
|
44
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
45
|
+
votingSettings: validVotingSettings,
|
|
46
|
+
});
|
|
47
|
+
const decodedEnter = decodeFunctionData({
|
|
48
|
+
abi: SpaceRegistryAbi,
|
|
49
|
+
data: result.calldata,
|
|
50
|
+
});
|
|
51
|
+
const [, , action, , data] = decodedEnter.args;
|
|
52
|
+
const [, votingMode, actions] = decodeAbiParameters([
|
|
53
|
+
{ type: 'bytes16', name: 'proposalId' },
|
|
54
|
+
{ type: 'uint8', name: 'votingMode' },
|
|
55
|
+
{
|
|
56
|
+
type: 'tuple[]',
|
|
57
|
+
name: 'actions',
|
|
58
|
+
components: [
|
|
59
|
+
{ type: 'address', name: 'to' },
|
|
60
|
+
{ type: 'uint256', name: 'value' },
|
|
61
|
+
{ type: 'bytes', name: 'data' },
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
], data);
|
|
65
|
+
const updateSettingsAction = actions[0];
|
|
66
|
+
expect(updateSettingsAction).toBeDefined();
|
|
67
|
+
if (!updateSettingsAction) {
|
|
68
|
+
throw new Error('Expected updateVotingSettings action');
|
|
69
|
+
}
|
|
70
|
+
const decodedAction = decodeFunctionData({
|
|
71
|
+
abi: DaoSpaceAbi,
|
|
72
|
+
data: updateSettingsAction.data,
|
|
73
|
+
});
|
|
74
|
+
expect(action).toBe(PROPOSAL_CREATED_ACTION);
|
|
75
|
+
expect(votingMode).toBe(0);
|
|
76
|
+
expect(updateSettingsAction.to).toBe(validDaoSpaceAddress);
|
|
77
|
+
expect(decodedAction.functionName).toBe('updateVotingSettings');
|
|
78
|
+
expect(decodedAction.args?.[0]).toEqual({
|
|
79
|
+
partialPercentageSupportThreshold: 6000000n,
|
|
80
|
+
universalPercentageSupportThreshold: 9000000n,
|
|
81
|
+
flatSupportThreshold: 2n,
|
|
82
|
+
quorum: 1n,
|
|
83
|
+
duration: 259200n,
|
|
84
|
+
disableFastPathAccessForNewMembers: true,
|
|
85
|
+
executionGracePeriod: 1209600n,
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
it('should reject FAST voting mode', () => {
|
|
89
|
+
expect(() => proposeUpdateVotingSettings({
|
|
90
|
+
authorSpaceId: validAuthorSpaceId,
|
|
91
|
+
spaceId: validSpaceId,
|
|
92
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
93
|
+
votingSettings: validVotingSettings,
|
|
94
|
+
votingMode: 'FAST',
|
|
95
|
+
})).toThrow('proposeUpdateVotingSettings only supports SLOW voting mode');
|
|
96
|
+
});
|
|
97
|
+
it('should validate voting settings before encoding calldata', () => {
|
|
98
|
+
expect(() => proposeUpdateVotingSettings({
|
|
99
|
+
authorSpaceId: validAuthorSpaceId,
|
|
100
|
+
spaceId: validSpaceId,
|
|
101
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
102
|
+
votingSettings: {
|
|
103
|
+
...validVotingSettings,
|
|
104
|
+
universalPercentageSupportThreshold: 101,
|
|
105
|
+
},
|
|
106
|
+
})).toThrow('universalPercentageSupportThreshold must be between 0 and 100');
|
|
107
|
+
expect(() => proposeUpdateVotingSettings({
|
|
108
|
+
authorSpaceId: validAuthorSpaceId,
|
|
109
|
+
spaceId: validSpaceId,
|
|
110
|
+
daoSpaceAddress: validDaoSpaceAddress,
|
|
111
|
+
votingSettings: {
|
|
112
|
+
...validVotingSettings,
|
|
113
|
+
quorum: -1,
|
|
114
|
+
},
|
|
115
|
+
})).toThrow('quorum must be a non-negative integer');
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=propose-update-voting-settings.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propose-update-voting-settings.test.js","sourceRoot":"","sources":["../../../src/dao-space/propose-update-voting-settings.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,7 +43,7 @@ export type ProposeEditParams = {
|
|
|
43
43
|
author: Id | string;
|
|
44
44
|
/**
|
|
45
45
|
* The DAO space contract address.
|
|
46
|
-
* This is the target of the
|
|
46
|
+
* This is the target of the ping() call in the proposal.
|
|
47
47
|
*/
|
|
48
48
|
daoSpaceAddress: `0x${string}`;
|
|
49
49
|
/**
|
|
@@ -58,7 +58,7 @@ export type ProposeEditParams = {
|
|
|
58
58
|
daoSpaceId: `0x${string}`;
|
|
59
59
|
/**
|
|
60
60
|
* Voting mode for the proposal.
|
|
61
|
-
* Defaults to 'FAST' since
|
|
61
|
+
* Defaults to 'FAST' since edit publishing uses a valid fast-path ping action.
|
|
62
62
|
*/
|
|
63
63
|
votingMode?: VotingMode;
|
|
64
64
|
/**
|
|
@@ -66,6 +66,16 @@ export type ProposeEditParams = {
|
|
|
66
66
|
* If omitted, a unique id is generated.
|
|
67
67
|
*/
|
|
68
68
|
proposalId?: `0x${string}`;
|
|
69
|
+
/**
|
|
70
|
+
* Set to true when publishing a new version of an existing proposal.
|
|
71
|
+
*/
|
|
72
|
+
updateProposal?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Proposal version to create. Only valid for update flows. Required for
|
|
75
|
+
* update flows unless the client can resolve the next version from the
|
|
76
|
+
* configured network RPC.
|
|
77
|
+
*/
|
|
78
|
+
versionId?: number;
|
|
69
79
|
/** Network to use (defaults to TESTNET) */
|
|
70
80
|
network?: Network;
|
|
71
81
|
};
|
|
@@ -80,6 +90,8 @@ export type ProposeEditResult = {
|
|
|
80
90
|
calldata: `0x${string}`;
|
|
81
91
|
/** The proposal ID (bytes16 hex) */
|
|
82
92
|
proposalId: `0x${string}`;
|
|
93
|
+
/** The proposal version ID */
|
|
94
|
+
versionId: number;
|
|
83
95
|
};
|
|
84
96
|
/**
|
|
85
97
|
* Vote option for a DAO proposal.
|
|
@@ -104,6 +116,10 @@ export type VoteProposalParams = {
|
|
|
104
116
|
* The proposal to vote on (bytes16 hex, with or without 0x prefix).
|
|
105
117
|
*/
|
|
106
118
|
proposalId: string;
|
|
119
|
+
/**
|
|
120
|
+
* The proposal version to vote on. Defaults to 1 for first-version proposals.
|
|
121
|
+
*/
|
|
122
|
+
versionId?: number;
|
|
107
123
|
/**
|
|
108
124
|
* The vote option: 'YES', 'NO', or 'ABSTAIN'.
|
|
109
125
|
*/
|
|
@@ -179,6 +195,10 @@ export type ProposeRemoveMemberParams = {
|
|
|
179
195
|
* This is the toSpaceId in the enter() call.
|
|
180
196
|
*/
|
|
181
197
|
spaceId: string;
|
|
198
|
+
/**
|
|
199
|
+
* The DAO space contract address. This is the target of the role action.
|
|
200
|
+
*/
|
|
201
|
+
daoSpaceAddress: `0x${string}`;
|
|
182
202
|
/**
|
|
183
203
|
* The space ID of the member to remove (bytes16 hex, with or without 0x prefix).
|
|
184
204
|
*/
|
|
@@ -215,6 +235,10 @@ export type ProposeAddMemberParams = {
|
|
|
215
235
|
* This is the toSpaceId in the enter() call.
|
|
216
236
|
*/
|
|
217
237
|
spaceId: string;
|
|
238
|
+
/**
|
|
239
|
+
* The DAO space contract address. This is the target of the role action.
|
|
240
|
+
*/
|
|
241
|
+
daoSpaceAddress: `0x${string}`;
|
|
218
242
|
/**
|
|
219
243
|
* The space ID of the new member to add (bytes16 hex).
|
|
220
244
|
*/
|
|
@@ -252,14 +276,15 @@ export type ProposeRemoveEditorParams = {
|
|
|
252
276
|
*/
|
|
253
277
|
spaceId: string;
|
|
254
278
|
/**
|
|
255
|
-
* The space
|
|
279
|
+
* The DAO space contract address. This is the target of the role action.
|
|
256
280
|
*/
|
|
257
|
-
|
|
281
|
+
daoSpaceAddress: `0x${string}`;
|
|
258
282
|
/**
|
|
259
|
-
*
|
|
260
|
-
* Defaults to 'SLOW' since removeEditor is not a fast-path action.
|
|
283
|
+
* The space ID of the editor to remove (bytes16 hex, with or without 0x prefix).
|
|
261
284
|
*/
|
|
262
|
-
|
|
285
|
+
editorToRemoveSpaceId: string;
|
|
286
|
+
/** Editor changes only support SLOW voting. */
|
|
287
|
+
votingMode?: 'SLOW';
|
|
263
288
|
/**
|
|
264
289
|
* Optional bytes16 proposalId (0x + 32 hex chars, with or without 0x prefix).
|
|
265
290
|
* If omitted, a unique id is generated.
|
|
@@ -287,15 +312,51 @@ export type ProposeAddEditorParams = {
|
|
|
287
312
|
* This is the toSpaceId in the enter() call.
|
|
288
313
|
*/
|
|
289
314
|
spaceId: string;
|
|
315
|
+
/**
|
|
316
|
+
* The DAO space contract address. This is the target of the role action.
|
|
317
|
+
*/
|
|
318
|
+
daoSpaceAddress: `0x${string}`;
|
|
290
319
|
/**
|
|
291
320
|
* The space ID of the new editor to add (bytes16 hex).
|
|
292
321
|
*/
|
|
293
322
|
newEditorSpaceId: string;
|
|
323
|
+
/** Editor changes only support SLOW voting. */
|
|
324
|
+
votingMode?: 'SLOW';
|
|
294
325
|
/**
|
|
295
|
-
*
|
|
296
|
-
*
|
|
326
|
+
* Optional bytes16 proposalId (0x + 32 hex chars).
|
|
327
|
+
* If omitted, a unique id is generated.
|
|
297
328
|
*/
|
|
298
|
-
|
|
329
|
+
proposalId?: string;
|
|
330
|
+
/** Network to use (defaults to TESTNET) */
|
|
331
|
+
network?: Network;
|
|
332
|
+
};
|
|
333
|
+
export type ProposeAddEditorResult = {
|
|
334
|
+
/** The contract address to send the transaction to (Space Registry) */
|
|
335
|
+
to: `0x${string}`;
|
|
336
|
+
/** The calldata for the enter() function call */
|
|
337
|
+
calldata: `0x${string}`;
|
|
338
|
+
/** The proposal ID (bytes16 hex) */
|
|
339
|
+
proposalId: `0x${string}`;
|
|
340
|
+
};
|
|
341
|
+
export type ProposeUpdateVotingSettingsParams = {
|
|
342
|
+
/**
|
|
343
|
+
* The proposer's space ID (bytes16 hex).
|
|
344
|
+
* This is the fromSpaceId in the enter() call.
|
|
345
|
+
*/
|
|
346
|
+
authorSpaceId: string;
|
|
347
|
+
/**
|
|
348
|
+
* The DAO space ID (bytes16 hex).
|
|
349
|
+
* This is the toSpaceId in the enter() call.
|
|
350
|
+
*/
|
|
351
|
+
spaceId: string;
|
|
352
|
+
/**
|
|
353
|
+
* The DAO space contract address. This is the target of the updateVotingSettings action.
|
|
354
|
+
*/
|
|
355
|
+
daoSpaceAddress: `0x${string}`;
|
|
356
|
+
/** New voting settings for the DAO space. */
|
|
357
|
+
votingSettings: VotingSettingsInput;
|
|
358
|
+
/** Updating voting settings only supports SLOW voting. */
|
|
359
|
+
votingMode?: 'SLOW';
|
|
299
360
|
/**
|
|
300
361
|
* Optional bytes16 proposalId (0x + 32 hex chars).
|
|
301
362
|
* If omitted, a unique id is generated.
|
|
@@ -304,7 +365,7 @@ export type ProposeAddEditorParams = {
|
|
|
304
365
|
/** Network to use (defaults to TESTNET) */
|
|
305
366
|
network?: Network;
|
|
306
367
|
};
|
|
307
|
-
export type
|
|
368
|
+
export type ProposeUpdateVotingSettingsResult = {
|
|
308
369
|
/** The contract address to send the transaction to (Space Registry) */
|
|
309
370
|
to: `0x${string}`;
|
|
310
371
|
/** The calldata for the enter() function call */
|