@geoprotocol/geo-sdk 0.12.0 → 0.13.0
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/dist/src/dao-space/constants.d.ts +9 -0
- package/dist/src/dao-space/constants.d.ts.map +1 -1
- package/dist/src/dao-space/constants.js +11 -0
- package/dist/src/dao-space/constants.js.map +1 -1
- package/dist/src/dao-space/index.d.ts +3 -1
- package/dist/src/dao-space/index.d.ts.map +1 -1
- package/dist/src/dao-space/index.js +2 -0
- package/dist/src/dao-space/index.js.map +1 -1
- package/dist/src/dao-space/propose-remove-member.d.ts +29 -0
- package/dist/src/dao-space/propose-remove-member.d.ts.map +1 -0
- package/dist/src/dao-space/propose-remove-member.js +104 -0
- package/dist/src/dao-space/propose-remove-member.js.map +1 -0
- package/dist/src/dao-space/propose-remove-member.test.d.ts +2 -0
- package/dist/src/dao-space/propose-remove-member.test.d.ts.map +1 -0
- package/dist/src/dao-space/propose-remove-member.test.js +167 -0
- package/dist/src/dao-space/propose-remove-member.test.js.map +1 -0
- package/dist/src/dao-space/propose-request-membership.d.ts +30 -0
- package/dist/src/dao-space/propose-request-membership.d.ts.map +1 -0
- package/dist/src/dao-space/propose-request-membership.js +76 -0
- package/dist/src/dao-space/propose-request-membership.js.map +1 -0
- package/dist/src/dao-space/propose-request-membership.test.d.ts +2 -0
- package/dist/src/dao-space/propose-request-membership.test.d.ts.map +1 -0
- package/dist/src/dao-space/propose-request-membership.test.js +113 -0
- package/dist/src/dao-space/propose-request-membership.test.js.map +1 -0
- package/dist/src/dao-space/types.d.ts +63 -0
- package/dist/src/dao-space/types.d.ts.map +1 -1
- package/dist/src/dao-space/vote-proposal.d.ts.map +1 -1
- package/dist/src/dao-space/vote-proposal.js +1 -7
- package/dist/src/dao-space/vote-proposal.js.map +1 -1
- package/package.json +1 -1
|
@@ -8,6 +8,11 @@ export declare const PROPOSAL_CREATED_ACTION: `0x${string}`;
|
|
|
8
8
|
* Used when voting on proposals via SpaceRegistry.enter()
|
|
9
9
|
*/
|
|
10
10
|
export declare const PROPOSAL_VOTED_ACTION: `0x${string}`;
|
|
11
|
+
/**
|
|
12
|
+
* Action hash for GOVERNANCE.MEMBERSHIP_REQUESTED
|
|
13
|
+
* Used when requesting membership in a DAO space via SpaceRegistry.enter()
|
|
14
|
+
*/
|
|
15
|
+
export declare const MEMBERSHIP_REQUESTED_ACTION: `0x${string}`;
|
|
11
16
|
/**
|
|
12
17
|
* Maps VoteOption strings to their on-chain uint8 values (IDAOSpace.VoteOption enum).
|
|
13
18
|
*/
|
|
@@ -32,6 +37,10 @@ export declare const BYTES16_HEX_REGEX: RegExp;
|
|
|
32
37
|
* Regex for bytes32 hex: 0x prefix + 64 hex characters (32 bytes)
|
|
33
38
|
*/
|
|
34
39
|
export declare const BYTES32_HEX_REGEX: RegExp;
|
|
40
|
+
/**
|
|
41
|
+
* Ensures a hex string has the 0x prefix.
|
|
42
|
+
*/
|
|
43
|
+
export declare function ensure0xPrefix(value: string): `0x${string}`;
|
|
35
44
|
/**
|
|
36
45
|
* Checks if a string is a valid bytes16 hex (0x prefix + 32 hex chars).
|
|
37
46
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/dao-space/constants.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,uBAAuB,eAAkD,CAAC;AAEvF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,eAAgD,CAAC;AAEnF;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW,EAAG,oEAA6E,CAAC;AAEzG;;GAEG;AACH,eAAO,MAAM,eAAe,EAAG,IAAa,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAwB,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAwB,CAAC;AAEvD;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,CAI7D;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,CAIpF"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/dao-space/constants.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,uBAAuB,eAAkD,CAAC;AAEvF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,eAAgD,CAAC;AAEnF;;;GAGG;AACH,eAAO,MAAM,2BAA2B,eAAsD,CAAC;AAE/F;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW,EAAG,oEAA6E,CAAC;AAEzG;;GAEG;AACH,eAAO,MAAM,eAAe,EAAG,IAAa,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAwB,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAwB,CAAC;AAEvD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAE3D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,CAI7D;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,CAIpF"}
|
|
@@ -9,6 +9,11 @@ export const PROPOSAL_CREATED_ACTION = keccak256(toHex('GOVERNANCE.PROPOSAL_CREA
|
|
|
9
9
|
* Used when voting on proposals via SpaceRegistry.enter()
|
|
10
10
|
*/
|
|
11
11
|
export const PROPOSAL_VOTED_ACTION = keccak256(toHex('GOVERNANCE.PROPOSAL_VOTED'));
|
|
12
|
+
/**
|
|
13
|
+
* Action hash for GOVERNANCE.MEMBERSHIP_REQUESTED
|
|
14
|
+
* Used when requesting membership in a DAO space via SpaceRegistry.enter()
|
|
15
|
+
*/
|
|
16
|
+
export const MEMBERSHIP_REQUESTED_ACTION = keccak256(toHex('GOVERNANCE.MEMBERSHIP_REQUESTED'));
|
|
12
17
|
/**
|
|
13
18
|
* Maps VoteOption strings to their on-chain uint8 values (IDAOSpace.VoteOption enum).
|
|
14
19
|
*/
|
|
@@ -33,6 +38,12 @@ export const BYTES16_HEX_REGEX = /^0x[0-9a-fA-F]{32}$/;
|
|
|
33
38
|
* Regex for bytes32 hex: 0x prefix + 64 hex characters (32 bytes)
|
|
34
39
|
*/
|
|
35
40
|
export const BYTES32_HEX_REGEX = /^0x[0-9a-fA-F]{64}$/;
|
|
41
|
+
/**
|
|
42
|
+
* Ensures a hex string has the 0x prefix.
|
|
43
|
+
*/
|
|
44
|
+
export function ensure0xPrefix(value) {
|
|
45
|
+
return (value.startsWith('0x') ? value : `0x${value}`);
|
|
46
|
+
}
|
|
36
47
|
/**
|
|
37
48
|
* Checks if a string is a valid bytes16 hex (0x prefix + 32 hex chars).
|
|
38
49
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/dao-space/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;AAEvF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;AAEnF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,GAAG,EAAE,CAAC;IACN,EAAE,EAAE,CAAC;IACL,OAAO,EAAE,CAAC;CACF,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,oEAA6E,CAAC;AAEzG;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAa,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAEvD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAEvD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAoB;IAC5C,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAmB,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,UAAyB;IACnE,MAAM,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;IACtF,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAmB,CAAC;AAC7D,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/dao-space/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;AAEvF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;AAEnF;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,SAAS,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;AAE/F;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,GAAG,EAAE,CAAC;IACN,EAAE,EAAE,CAAC;IACL,OAAO,EAAE,CAAC;CACF,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,oEAA6E,CAAC;AAEzG;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAa,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAEvD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAEvD;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAkB,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAoB;IAC5C,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAmB,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,UAAyB;IACnE,MAAM,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;IACtF,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAmB,CAAC;AAC7D,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { createSpace } from './create-space.js';
|
|
2
2
|
export { proposeEdit } from './propose-edit.js';
|
|
3
|
-
export
|
|
3
|
+
export { proposeRemoveMember } from './propose-remove-member.js';
|
|
4
|
+
export { proposeRequestMembership } from './propose-request-membership.js';
|
|
5
|
+
export type { CreateSpaceParams, CreateSpaceResult, ProposeEditParams, ProposeEditResult, ProposeRemoveMemberParams, ProposeRemoveMemberResult, ProposeRequestMembershipParams, ProposeRequestMembershipResult, VoteOption, VoteProposalParams, VoteProposalResult, VotingMode, } from './types.js';
|
|
4
6
|
export { voteProposal } from './vote-proposal.js';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dao-space/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dao-space/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,8BAA8B,EAC9B,8BAA8B,EAC9B,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { createSpace } from './create-space.js';
|
|
2
2
|
export { proposeEdit } from './propose-edit.js';
|
|
3
|
+
export { proposeRemoveMember } from './propose-remove-member.js';
|
|
4
|
+
export { proposeRequestMembership } from './propose-request-membership.js';
|
|
3
5
|
export { voteProposal } from './vote-proposal.js';
|
|
4
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dao-space/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dao-space/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAe3E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ProposeRemoveMemberParams, ProposeRemoveMemberResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a proposal to remove a member from a DAO space.
|
|
4
|
+
*
|
|
5
|
+
* This function:
|
|
6
|
+
* 1. Validates the author, DAO space, and member IDs
|
|
7
|
+
* 2. Encodes the `removeMember()` call as the proposal action
|
|
8
|
+
* 3. Encodes the SpaceRegistry's `enter()` call with the `PROPOSAL_CREATED` action
|
|
9
|
+
*
|
|
10
|
+
* @param params - The parameters for proposing member removal
|
|
11
|
+
* @returns Object containing `to` (Space Registry address), `calldata`, and `proposalId`
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { daoSpace } from '@geoprotocol/geo-sdk';
|
|
16
|
+
*
|
|
17
|
+
* const { to, calldata, proposalId } = daoSpace.proposeRemoveMember({
|
|
18
|
+
* authorSpaceId: '0xAuthorBytes16SpaceId...',
|
|
19
|
+
* spaceId: '0xDAOBytes16SpaceId...',
|
|
20
|
+
* memberToRemoveSpaceId: '0xMemberBytes16SpaceId...',
|
|
21
|
+
* network: 'TESTNET',
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Submit the transaction using viem or another client
|
|
25
|
+
* await walletClient.sendTransaction({ to, data: calldata });
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function proposeRemoveMember(params: ProposeRemoveMemberParams): ProposeRemoveMemberResult;
|
|
29
|
+
//# sourceMappingURL=propose-remove-member.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propose-remove-member.d.ts","sourceRoot":"","sources":["../../../src/dao-space/propose-remove-member.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,GAAG,yBAAyB,CA0FhG"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
+
import { encodeAbiParameters, encodeFunctionData } from 'viem';
|
|
3
|
+
import { TESTNET } from '../../contracts.js';
|
|
4
|
+
import { DaoSpaceAbi, SpaceRegistryAbi } from '../abis/index.js';
|
|
5
|
+
import { bytes16ToBytes32LeftAligned, EMPTY_SIGNATURE, ensure0xPrefix, isBytes16Hex, PROPOSAL_CREATED_ACTION, } from './constants.js';
|
|
6
|
+
/**
|
|
7
|
+
* Creates a proposal to remove a member from a DAO space.
|
|
8
|
+
*
|
|
9
|
+
* This function:
|
|
10
|
+
* 1. Validates the author, DAO space, and member IDs
|
|
11
|
+
* 2. Encodes the `removeMember()` call as the proposal action
|
|
12
|
+
* 3. Encodes the SpaceRegistry's `enter()` call with the `PROPOSAL_CREATED` action
|
|
13
|
+
*
|
|
14
|
+
* @param params - The parameters for proposing member removal
|
|
15
|
+
* @returns Object containing `to` (Space Registry address), `calldata`, and `proposalId`
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { daoSpace } from '@geoprotocol/geo-sdk';
|
|
20
|
+
*
|
|
21
|
+
* const { to, calldata, proposalId } = daoSpace.proposeRemoveMember({
|
|
22
|
+
* authorSpaceId: '0xAuthorBytes16SpaceId...',
|
|
23
|
+
* spaceId: '0xDAOBytes16SpaceId...',
|
|
24
|
+
* memberToRemoveSpaceId: '0xMemberBytes16SpaceId...',
|
|
25
|
+
* network: 'TESTNET',
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // Submit the transaction using viem or another client
|
|
29
|
+
* await walletClient.sendTransaction({ to, data: calldata });
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export function proposeRemoveMember(params) {
|
|
33
|
+
const { authorSpaceId: rawAuthorSpaceId, spaceId: rawSpaceId, memberToRemoveSpaceId: rawMemberToRemoveSpaceId, votingMode = 'SLOW', proposalId: rawProposalId, } = params;
|
|
34
|
+
// Ensure 0x prefix on all IDs
|
|
35
|
+
const authorSpaceId = ensure0xPrefix(rawAuthorSpaceId);
|
|
36
|
+
const spaceId = ensure0xPrefix(rawSpaceId);
|
|
37
|
+
const memberToRemoveSpaceId = ensure0xPrefix(rawMemberToRemoveSpaceId);
|
|
38
|
+
// Validate inputs
|
|
39
|
+
if (!isBytes16Hex(authorSpaceId)) {
|
|
40
|
+
throw new Error(`authorSpaceId must be bytes16 hex (32 hex chars). Received: ${rawAuthorSpaceId}`);
|
|
41
|
+
}
|
|
42
|
+
if (!isBytes16Hex(spaceId)) {
|
|
43
|
+
throw new Error(`spaceId must be bytes16 hex (32 hex chars). Received: ${rawSpaceId}`);
|
|
44
|
+
}
|
|
45
|
+
if (!isBytes16Hex(memberToRemoveSpaceId)) {
|
|
46
|
+
throw new Error(`memberToRemoveSpaceId must be bytes16 hex (32 hex chars). Received: ${rawMemberToRemoveSpaceId}`);
|
|
47
|
+
}
|
|
48
|
+
// Generate or use provided proposal ID (UUID v4 as bytes16 hex)
|
|
49
|
+
const proposalId = rawProposalId
|
|
50
|
+
? ensure0xPrefix(rawProposalId)
|
|
51
|
+
: `0x${uuidv4().replaceAll('-', '')}`;
|
|
52
|
+
if (!isBytes16Hex(proposalId)) {
|
|
53
|
+
throw new Error(`proposalId must be bytes16 hex (32 hex chars). Received: ${rawProposalId}`);
|
|
54
|
+
}
|
|
55
|
+
// Encode the removeMember function call: removeMember(bytes16 _oldMemberSpaceId)
|
|
56
|
+
const proposalActionCalldata = encodeFunctionData({
|
|
57
|
+
abi: DaoSpaceAbi,
|
|
58
|
+
functionName: 'removeMember',
|
|
59
|
+
args: [memberToRemoveSpaceId],
|
|
60
|
+
});
|
|
61
|
+
// Create the proposal action (calling removeMember on the Space Registry)
|
|
62
|
+
const proposalActions = [
|
|
63
|
+
{
|
|
64
|
+
to: TESTNET.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: TESTNET.SPACE_REGISTRY_ADDRESS,
|
|
100
|
+
calldata,
|
|
101
|
+
proposalId,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=propose-remove-member.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propose-remove-member.js","sourceRoot":"","sources":["../../../src/dao-space/propose-remove-member.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propose-remove-member.test.d.ts","sourceRoot":"","sources":["../../../src/dao-space/propose-remove-member.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { TESTNET } from '../../contracts.js';
|
|
3
|
+
import { BYTES16_HEX_REGEX } from './constants.js';
|
|
4
|
+
import { proposeRemoveMember } from './propose-remove-member.js';
|
|
5
|
+
describe('proposeRemoveMember', () => {
|
|
6
|
+
// Valid test values
|
|
7
|
+
const validAuthorSpaceId = '0x0eed5491b917cf58b33ac81255fe7ae9';
|
|
8
|
+
const validSpaceId = '0xabcdef12345678901234567890abcdef';
|
|
9
|
+
const validMemberToRemove = '0x11111111111111111111111111111111';
|
|
10
|
+
it('should return correct structure', () => {
|
|
11
|
+
const result = proposeRemoveMember({
|
|
12
|
+
authorSpaceId: validAuthorSpaceId,
|
|
13
|
+
spaceId: validSpaceId,
|
|
14
|
+
memberToRemoveSpaceId: validMemberToRemove,
|
|
15
|
+
});
|
|
16
|
+
expect(result).toHaveProperty('to');
|
|
17
|
+
expect(result).toHaveProperty('calldata');
|
|
18
|
+
expect(result).toHaveProperty('proposalId');
|
|
19
|
+
});
|
|
20
|
+
it('should return the correct contract address (Space Registry)', () => {
|
|
21
|
+
const { to } = proposeRemoveMember({
|
|
22
|
+
authorSpaceId: validAuthorSpaceId,
|
|
23
|
+
spaceId: validSpaceId,
|
|
24
|
+
memberToRemoveSpaceId: validMemberToRemove,
|
|
25
|
+
});
|
|
26
|
+
expect(to).toBe(TESTNET.SPACE_REGISTRY_ADDRESS);
|
|
27
|
+
});
|
|
28
|
+
it('should return valid calldata', () => {
|
|
29
|
+
const { calldata } = proposeRemoveMember({
|
|
30
|
+
authorSpaceId: validAuthorSpaceId,
|
|
31
|
+
spaceId: validSpaceId,
|
|
32
|
+
memberToRemoveSpaceId: validMemberToRemove,
|
|
33
|
+
});
|
|
34
|
+
expect(calldata).toBeTypeOf('string');
|
|
35
|
+
expect(calldata.startsWith('0x')).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
it('should return valid proposalId (bytes16 hex)', () => {
|
|
38
|
+
const { proposalId } = proposeRemoveMember({
|
|
39
|
+
authorSpaceId: validAuthorSpaceId,
|
|
40
|
+
spaceId: validSpaceId,
|
|
41
|
+
memberToRemoveSpaceId: validMemberToRemove,
|
|
42
|
+
});
|
|
43
|
+
expect(proposalId).toMatch(BYTES16_HEX_REGEX);
|
|
44
|
+
});
|
|
45
|
+
it('should accept custom proposalId', () => {
|
|
46
|
+
const customProposalId = '0x22222222222222222222222222222222';
|
|
47
|
+
const { proposalId } = proposeRemoveMember({
|
|
48
|
+
authorSpaceId: validAuthorSpaceId,
|
|
49
|
+
spaceId: validSpaceId,
|
|
50
|
+
memberToRemoveSpaceId: validMemberToRemove,
|
|
51
|
+
proposalId: customProposalId,
|
|
52
|
+
});
|
|
53
|
+
expect(proposalId).toBe(customProposalId);
|
|
54
|
+
});
|
|
55
|
+
it('should default to SLOW voting mode', () => {
|
|
56
|
+
const result = proposeRemoveMember({
|
|
57
|
+
authorSpaceId: validAuthorSpaceId,
|
|
58
|
+
spaceId: validSpaceId,
|
|
59
|
+
memberToRemoveSpaceId: validMemberToRemove,
|
|
60
|
+
});
|
|
61
|
+
expect(result.calldata).toBeTruthy();
|
|
62
|
+
});
|
|
63
|
+
it('should accept FAST voting mode', () => {
|
|
64
|
+
const result = proposeRemoveMember({
|
|
65
|
+
authorSpaceId: validAuthorSpaceId,
|
|
66
|
+
spaceId: validSpaceId,
|
|
67
|
+
memberToRemoveSpaceId: validMemberToRemove,
|
|
68
|
+
votingMode: 'FAST',
|
|
69
|
+
});
|
|
70
|
+
expect(result.calldata).toBeTruthy();
|
|
71
|
+
});
|
|
72
|
+
it('should produce different calldata for different voting modes', () => {
|
|
73
|
+
const params = {
|
|
74
|
+
authorSpaceId: validAuthorSpaceId,
|
|
75
|
+
spaceId: validSpaceId,
|
|
76
|
+
memberToRemoveSpaceId: validMemberToRemove,
|
|
77
|
+
};
|
|
78
|
+
const slowResult = proposeRemoveMember({ ...params, votingMode: 'SLOW' });
|
|
79
|
+
const fastResult = proposeRemoveMember({
|
|
80
|
+
...params,
|
|
81
|
+
votingMode: 'FAST',
|
|
82
|
+
proposalId: slowResult.proposalId,
|
|
83
|
+
});
|
|
84
|
+
expect(slowResult.calldata).not.toBe(fastResult.calldata);
|
|
85
|
+
});
|
|
86
|
+
it('should produce different calldata for different members', () => {
|
|
87
|
+
const otherMember = '0x33333333333333333333333333333333';
|
|
88
|
+
const sharedProposalId = '0x44444444444444444444444444444444';
|
|
89
|
+
const result1 = proposeRemoveMember({
|
|
90
|
+
authorSpaceId: validAuthorSpaceId,
|
|
91
|
+
spaceId: validSpaceId,
|
|
92
|
+
memberToRemoveSpaceId: validMemberToRemove,
|
|
93
|
+
proposalId: sharedProposalId,
|
|
94
|
+
});
|
|
95
|
+
const result2 = proposeRemoveMember({
|
|
96
|
+
authorSpaceId: validAuthorSpaceId,
|
|
97
|
+
spaceId: validSpaceId,
|
|
98
|
+
memberToRemoveSpaceId: otherMember,
|
|
99
|
+
proposalId: sharedProposalId,
|
|
100
|
+
});
|
|
101
|
+
expect(result1.calldata).not.toBe(result2.calldata);
|
|
102
|
+
});
|
|
103
|
+
it('should accept IDs without 0x prefix', () => {
|
|
104
|
+
const result = proposeRemoveMember({
|
|
105
|
+
authorSpaceId: '0eed5491b917cf58b33ac81255fe7ae9',
|
|
106
|
+
spaceId: 'abcdef12345678901234567890abcdef',
|
|
107
|
+
memberToRemoveSpaceId: '11111111111111111111111111111111',
|
|
108
|
+
});
|
|
109
|
+
expect(result.calldata).toBeTruthy();
|
|
110
|
+
});
|
|
111
|
+
it('should produce same calldata with or without 0x prefix', () => {
|
|
112
|
+
const proposalId = '0x55555555555555555555555555555555';
|
|
113
|
+
const withPrefix = proposeRemoveMember({
|
|
114
|
+
authorSpaceId: '0x0eed5491b917cf58b33ac81255fe7ae9',
|
|
115
|
+
spaceId: '0xabcdef12345678901234567890abcdef',
|
|
116
|
+
memberToRemoveSpaceId: '0x11111111111111111111111111111111',
|
|
117
|
+
proposalId,
|
|
118
|
+
});
|
|
119
|
+
const withoutPrefix = proposeRemoveMember({
|
|
120
|
+
authorSpaceId: '0eed5491b917cf58b33ac81255fe7ae9',
|
|
121
|
+
spaceId: 'abcdef12345678901234567890abcdef',
|
|
122
|
+
memberToRemoveSpaceId: '11111111111111111111111111111111',
|
|
123
|
+
proposalId,
|
|
124
|
+
});
|
|
125
|
+
expect(withPrefix.calldata).toBe(withoutPrefix.calldata);
|
|
126
|
+
});
|
|
127
|
+
it('should generate unique proposalIds', () => {
|
|
128
|
+
const params = {
|
|
129
|
+
authorSpaceId: validAuthorSpaceId,
|
|
130
|
+
spaceId: validSpaceId,
|
|
131
|
+
memberToRemoveSpaceId: validMemberToRemove,
|
|
132
|
+
};
|
|
133
|
+
const result1 = proposeRemoveMember(params);
|
|
134
|
+
const result2 = proposeRemoveMember(params);
|
|
135
|
+
expect(result1.proposalId).not.toBe(result2.proposalId);
|
|
136
|
+
});
|
|
137
|
+
it('should throw for invalid authorSpaceId format', () => {
|
|
138
|
+
expect(() => proposeRemoveMember({
|
|
139
|
+
authorSpaceId: 'invalid',
|
|
140
|
+
spaceId: validSpaceId,
|
|
141
|
+
memberToRemoveSpaceId: validMemberToRemove,
|
|
142
|
+
})).toThrow('authorSpaceId must be bytes16 hex');
|
|
143
|
+
});
|
|
144
|
+
it('should throw for invalid spaceId format', () => {
|
|
145
|
+
expect(() => proposeRemoveMember({
|
|
146
|
+
authorSpaceId: validAuthorSpaceId,
|
|
147
|
+
spaceId: 'tooshort',
|
|
148
|
+
memberToRemoveSpaceId: validMemberToRemove,
|
|
149
|
+
})).toThrow('spaceId must be bytes16 hex');
|
|
150
|
+
});
|
|
151
|
+
it('should throw for invalid memberToRemoveSpaceId format', () => {
|
|
152
|
+
expect(() => proposeRemoveMember({
|
|
153
|
+
authorSpaceId: validAuthorSpaceId,
|
|
154
|
+
spaceId: validSpaceId,
|
|
155
|
+
memberToRemoveSpaceId: 'badid',
|
|
156
|
+
})).toThrow('memberToRemoveSpaceId must be bytes16 hex');
|
|
157
|
+
});
|
|
158
|
+
it('should throw for invalid proposalId format', () => {
|
|
159
|
+
expect(() => proposeRemoveMember({
|
|
160
|
+
authorSpaceId: validAuthorSpaceId,
|
|
161
|
+
spaceId: validSpaceId,
|
|
162
|
+
memberToRemoveSpaceId: validMemberToRemove,
|
|
163
|
+
proposalId: 'badproposalid',
|
|
164
|
+
})).toThrow('proposalId must be bytes16 hex');
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=propose-remove-member.test.js.map
|
|
@@ -0,0 +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;IAEnE,MAAM,mBAAmB,GAAG,oCAA6C,CAAC;IAE1E,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,mBAAmB;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,EAAE,EAAE,EAAE,GAAG,mBAAmB,CAAC;YACjC,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,mBAAmB;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC;YACvC,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,mBAAmB;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAC;YACzC,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,mBAAmB;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,gBAAgB,GAAG,oCAAoC,CAAC;QAE9D,MAAM,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAC;YACzC,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,mBAAmB;YAC1C,UAAU,EAAE,gBAAgB;SAC7B,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,mBAAmB;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,mBAAmB;YAC1C,UAAU,EAAE,MAAM;SACnB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,MAAM,GAAG;YACb,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,mBAAmB;SAClC,CAAC;QAEX,MAAM,UAAU,GAAG,mBAAmB,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,mBAAmB,CAAC;YACrC,GAAG,MAAM;YACT,UAAU,EAAE,MAAM;YAClB,UAAU,EAAE,UAAU,CAAC,UAAU;SAClC,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,WAAW,GAAG,oCAA6C,CAAC;QAClE,MAAM,gBAAgB,GAAG,oCAAoC,CAAC;QAE9D,MAAM,OAAO,GAAG,mBAAmB,CAAC;YAClC,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,mBAAmB;YAC1C,UAAU,EAAE,gBAAgB;SAC7B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,mBAAmB,CAAC;YAClC,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,WAAW;YAClC,UAAU,EAAE,gBAAgB;SAC7B,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,aAAa,EAAE,kCAAkC;YACjD,OAAO,EAAE,kCAAkC;YAC3C,qBAAqB,EAAE,kCAAkC;SAC1D,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,UAAU,GAAG,oCAAoC,CAAC;QAExD,MAAM,UAAU,GAAG,mBAAmB,CAAC;YACrC,aAAa,EAAE,oCAAoC;YACnD,OAAO,EAAE,oCAAoC;YAC7C,qBAAqB,EAAE,oCAAoC;YAC3D,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,mBAAmB,CAAC;YACxC,aAAa,EAAE,kCAAkC;YACjD,OAAO,EAAE,kCAAkC;YAC3C,qBAAqB,EAAE,kCAAkC;YACzD,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG;YACb,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,mBAAmB;SAClC,CAAC;QAEX,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAE5C,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,GAAG,EAAE,CACV,mBAAmB,CAAC;YAClB,aAAa,EAAE,SAAS;YACxB,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,mBAAmB;SAC3C,CAAC,CACH,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,GAAG,EAAE,CACV,mBAAmB,CAAC;YAClB,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,UAAU;YACnB,qBAAqB,EAAE,mBAAmB;SAC3C,CAAC,CACH,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,GAAG,EAAE,CACV,mBAAmB,CAAC;YAClB,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,OAAO;SAC/B,CAAC,CACH,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,GAAG,EAAE,CACV,mBAAmB,CAAC;YAClB,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,mBAAmB;YAC1C,UAAU,EAAE,eAAe;SAC5B,CAAC,CACH,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ProposeRequestMembershipParams, ProposeRequestMembershipResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a membership request for a DAO space.
|
|
4
|
+
*
|
|
5
|
+
* This function:
|
|
6
|
+
* 1. Validates the requestor and DAO space IDs
|
|
7
|
+
* 2. Encodes the membership request data (proposalId, requestorSpaceId)
|
|
8
|
+
* 3. Encodes the SpaceRegistry's `enter()` call with the `MEMBERSHIP_REQUESTED` action
|
|
9
|
+
*
|
|
10
|
+
* Unlike governance proposals, this can be called by non-members to request membership.
|
|
11
|
+
* Editors can then approve or reject the request.
|
|
12
|
+
*
|
|
13
|
+
* @param params - The parameters for requesting membership
|
|
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.proposeRequestMembership({
|
|
21
|
+
* authorSpaceId: '0xRequestorBytes16SpaceId...',
|
|
22
|
+
* spaceId: '0xDAOBytes16SpaceId...',
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // Submit the transaction using viem or another client
|
|
26
|
+
* await walletClient.sendTransaction({ to, data: calldata });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function proposeRequestMembership(params: ProposeRequestMembershipParams): ProposeRequestMembershipResult;
|
|
30
|
+
//# sourceMappingURL=propose-request-membership.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propose-request-membership.d.ts","sourceRoot":"","sources":["../../../src/dao-space/propose-request-membership.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAEjG;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,8BAA8B,GAAG,8BAA8B,CAoD/G"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
+
import { encodeAbiParameters, encodeFunctionData } from 'viem';
|
|
3
|
+
import { TESTNET } from '../../contracts.js';
|
|
4
|
+
import { SpaceRegistryAbi } from '../abis/index.js';
|
|
5
|
+
import { EMPTY_SIGNATURE, EMPTY_TOPIC, ensure0xPrefix, isBytes16Hex, MEMBERSHIP_REQUESTED_ACTION, } from './constants.js';
|
|
6
|
+
/**
|
|
7
|
+
* Creates a membership request for a DAO space.
|
|
8
|
+
*
|
|
9
|
+
* This function:
|
|
10
|
+
* 1. Validates the requestor and DAO space IDs
|
|
11
|
+
* 2. Encodes the membership request data (proposalId, requestorSpaceId)
|
|
12
|
+
* 3. Encodes the SpaceRegistry's `enter()` call with the `MEMBERSHIP_REQUESTED` action
|
|
13
|
+
*
|
|
14
|
+
* Unlike governance proposals, this can be called by non-members to request membership.
|
|
15
|
+
* Editors can then approve or reject the request.
|
|
16
|
+
*
|
|
17
|
+
* @param params - The parameters for requesting membership
|
|
18
|
+
* @returns Object containing `to` (Space Registry address), `calldata`, and `proposalId`
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* import { daoSpace } from '@geoprotocol/geo-sdk';
|
|
23
|
+
*
|
|
24
|
+
* const { to, calldata, proposalId } = daoSpace.proposeRequestMembership({
|
|
25
|
+
* authorSpaceId: '0xRequestorBytes16SpaceId...',
|
|
26
|
+
* spaceId: '0xDAOBytes16SpaceId...',
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* // Submit the transaction using viem or another client
|
|
30
|
+
* await walletClient.sendTransaction({ to, data: calldata });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function proposeRequestMembership(params) {
|
|
34
|
+
const { authorSpaceId: rawAuthorSpaceId, spaceId: rawSpaceId, proposalId: rawProposalId } = params;
|
|
35
|
+
// Ensure 0x prefix on all IDs
|
|
36
|
+
const authorSpaceId = ensure0xPrefix(rawAuthorSpaceId);
|
|
37
|
+
const spaceId = ensure0xPrefix(rawSpaceId);
|
|
38
|
+
// Validate inputs
|
|
39
|
+
if (!isBytes16Hex(authorSpaceId)) {
|
|
40
|
+
throw new Error(`authorSpaceId must be bytes16 hex (32 hex chars). Received: ${rawAuthorSpaceId}`);
|
|
41
|
+
}
|
|
42
|
+
if (!isBytes16Hex(spaceId)) {
|
|
43
|
+
throw new Error(`spaceId must be bytes16 hex (32 hex chars). Received: ${rawSpaceId}`);
|
|
44
|
+
}
|
|
45
|
+
// Generate or use provided proposal ID (UUID v4 as bytes16 hex)
|
|
46
|
+
const proposalId = rawProposalId
|
|
47
|
+
? ensure0xPrefix(rawProposalId)
|
|
48
|
+
: `0x${uuidv4().replaceAll('-', '')}`;
|
|
49
|
+
if (!isBytes16Hex(proposalId)) {
|
|
50
|
+
throw new Error(`proposalId must be bytes16 hex (32 hex chars). Received: ${rawProposalId}`);
|
|
51
|
+
}
|
|
52
|
+
// Encode the membership request data: (bytes16 proposalId, bytes16 newMemberSpaceId)
|
|
53
|
+
const data = encodeAbiParameters([
|
|
54
|
+
{ type: 'bytes16', name: 'proposalId' },
|
|
55
|
+
{ type: 'bytes16', name: 'newMemberSpaceId' },
|
|
56
|
+
], [proposalId, authorSpaceId]);
|
|
57
|
+
// Encode the SpaceRegistry.enter() call
|
|
58
|
+
const calldata = encodeFunctionData({
|
|
59
|
+
abi: SpaceRegistryAbi,
|
|
60
|
+
functionName: 'enter',
|
|
61
|
+
args: [
|
|
62
|
+
authorSpaceId, // fromSpaceId
|
|
63
|
+
spaceId, // toSpaceId
|
|
64
|
+
MEMBERSHIP_REQUESTED_ACTION, // action
|
|
65
|
+
EMPTY_TOPIC, // topic (empty for membership requests)
|
|
66
|
+
data, // data (proposalId + newMemberSpaceId)
|
|
67
|
+
EMPTY_SIGNATURE, // signature (unused when msg.sender == fromSpace)
|
|
68
|
+
],
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
to: TESTNET.SPACE_REGISTRY_ADDRESS,
|
|
72
|
+
calldata,
|
|
73
|
+
proposalId,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=propose-request-membership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propose-request-membership.js","sourceRoot":"","sources":["../../../src/dao-space/propose-request-membership.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,eAAe,EACf,WAAW,EACX,cAAc,EACd,YAAY,EACZ,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAsC;IAC7E,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAEnG,8BAA8B;IAC9B,MAAM,aAAa,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAE3C,kBAAkB;IAClB,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,+DAA+D,gBAAgB,EAAE,CAAC,CAAC;IACrG,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yDAAyD,UAAU,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,gEAAgE;IAChE,MAAM,UAAU,GAAG,aAAa;QAC9B,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC;QAC/B,CAAC,CAAE,KAAK,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,EAAoB,CAAC;IAE3D,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4DAA4D,aAAa,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,qFAAqF;IACrF,MAAM,IAAI,GAAG,mBAAmB,CAC9B;QACE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE;QACvC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE;KAC9C,EACD,CAAC,UAAU,EAAE,aAAa,CAAC,CAC5B,CAAC;IAEF,wCAAwC;IACxC,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAClC,GAAG,EAAE,gBAAgB;QACrB,YAAY,EAAE,OAAO;QACrB,IAAI,EAAE;YACJ,aAAa,EAAE,cAAc;YAC7B,OAAO,EAAE,YAAY;YACrB,2BAA2B,EAAE,SAAS;YACtC,WAAW,EAAE,wCAAwC;YACrD,IAAI,EAAE,uCAAuC;YAC7C,eAAe,EAAE,kDAAkD;SACpE;KACF,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,sBAAsB;QAClC,QAAQ;QACR,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propose-request-membership.test.d.ts","sourceRoot":"","sources":["../../../src/dao-space/propose-request-membership.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { TESTNET } from '../../contracts.js';
|
|
3
|
+
import { BYTES16_HEX_REGEX } from './constants.js';
|
|
4
|
+
import { proposeRequestMembership } from './propose-request-membership.js';
|
|
5
|
+
describe('proposeRequestMembership', () => {
|
|
6
|
+
const validAuthorSpaceId = '0x0eed5491b917cf58b33ac81255fe7ae9';
|
|
7
|
+
const validSpaceId = '0xabcdef12345678901234567890abcdef';
|
|
8
|
+
it('should return correct structure', () => {
|
|
9
|
+
const result = proposeRequestMembership({
|
|
10
|
+
authorSpaceId: validAuthorSpaceId,
|
|
11
|
+
spaceId: validSpaceId,
|
|
12
|
+
});
|
|
13
|
+
expect(result).toHaveProperty('to');
|
|
14
|
+
expect(result).toHaveProperty('calldata');
|
|
15
|
+
expect(result).toHaveProperty('proposalId');
|
|
16
|
+
});
|
|
17
|
+
it('should return the correct contract address (Space Registry)', () => {
|
|
18
|
+
const { to } = proposeRequestMembership({
|
|
19
|
+
authorSpaceId: validAuthorSpaceId,
|
|
20
|
+
spaceId: validSpaceId,
|
|
21
|
+
});
|
|
22
|
+
expect(to).toBe(TESTNET.SPACE_REGISTRY_ADDRESS);
|
|
23
|
+
});
|
|
24
|
+
it('should return valid calldata', () => {
|
|
25
|
+
const { calldata } = proposeRequestMembership({
|
|
26
|
+
authorSpaceId: validAuthorSpaceId,
|
|
27
|
+
spaceId: validSpaceId,
|
|
28
|
+
});
|
|
29
|
+
expect(calldata).toBeTypeOf('string');
|
|
30
|
+
expect(calldata.startsWith('0x')).toBe(true);
|
|
31
|
+
});
|
|
32
|
+
it('should return valid proposalId (bytes16 hex)', () => {
|
|
33
|
+
const { proposalId } = proposeRequestMembership({
|
|
34
|
+
authorSpaceId: validAuthorSpaceId,
|
|
35
|
+
spaceId: validSpaceId,
|
|
36
|
+
});
|
|
37
|
+
expect(proposalId).toMatch(BYTES16_HEX_REGEX);
|
|
38
|
+
});
|
|
39
|
+
it('should accept custom proposalId', () => {
|
|
40
|
+
const customProposalId = '0x22222222222222222222222222222222';
|
|
41
|
+
const { proposalId } = proposeRequestMembership({
|
|
42
|
+
authorSpaceId: validAuthorSpaceId,
|
|
43
|
+
spaceId: validSpaceId,
|
|
44
|
+
proposalId: customProposalId,
|
|
45
|
+
});
|
|
46
|
+
expect(proposalId).toBe(customProposalId);
|
|
47
|
+
});
|
|
48
|
+
it('should produce different calldata for different authors', () => {
|
|
49
|
+
const otherAuthor = '0x33333333333333333333333333333333';
|
|
50
|
+
const sharedProposalId = '0x44444444444444444444444444444444';
|
|
51
|
+
const result1 = proposeRequestMembership({
|
|
52
|
+
authorSpaceId: validAuthorSpaceId,
|
|
53
|
+
spaceId: validSpaceId,
|
|
54
|
+
proposalId: sharedProposalId,
|
|
55
|
+
});
|
|
56
|
+
const result2 = proposeRequestMembership({
|
|
57
|
+
authorSpaceId: otherAuthor,
|
|
58
|
+
spaceId: validSpaceId,
|
|
59
|
+
proposalId: sharedProposalId,
|
|
60
|
+
});
|
|
61
|
+
expect(result1.calldata).not.toBe(result2.calldata);
|
|
62
|
+
});
|
|
63
|
+
it('should accept IDs without 0x prefix', () => {
|
|
64
|
+
const result = proposeRequestMembership({
|
|
65
|
+
authorSpaceId: '0eed5491b917cf58b33ac81255fe7ae9',
|
|
66
|
+
spaceId: 'abcdef12345678901234567890abcdef',
|
|
67
|
+
});
|
|
68
|
+
expect(result.calldata).toBeTruthy();
|
|
69
|
+
});
|
|
70
|
+
it('should produce same calldata with or without 0x prefix', () => {
|
|
71
|
+
const proposalId = '0x55555555555555555555555555555555';
|
|
72
|
+
const withPrefix = proposeRequestMembership({
|
|
73
|
+
authorSpaceId: '0x0eed5491b917cf58b33ac81255fe7ae9',
|
|
74
|
+
spaceId: '0xabcdef12345678901234567890abcdef',
|
|
75
|
+
proposalId,
|
|
76
|
+
});
|
|
77
|
+
const withoutPrefix = proposeRequestMembership({
|
|
78
|
+
authorSpaceId: '0eed5491b917cf58b33ac81255fe7ae9',
|
|
79
|
+
spaceId: 'abcdef12345678901234567890abcdef',
|
|
80
|
+
proposalId,
|
|
81
|
+
});
|
|
82
|
+
expect(withPrefix.calldata).toBe(withoutPrefix.calldata);
|
|
83
|
+
});
|
|
84
|
+
it('should generate unique proposalIds', () => {
|
|
85
|
+
const params = {
|
|
86
|
+
authorSpaceId: validAuthorSpaceId,
|
|
87
|
+
spaceId: validSpaceId,
|
|
88
|
+
};
|
|
89
|
+
const result1 = proposeRequestMembership(params);
|
|
90
|
+
const result2 = proposeRequestMembership(params);
|
|
91
|
+
expect(result1.proposalId).not.toBe(result2.proposalId);
|
|
92
|
+
});
|
|
93
|
+
it('should throw for invalid authorSpaceId format', () => {
|
|
94
|
+
expect(() => proposeRequestMembership({
|
|
95
|
+
authorSpaceId: 'invalid',
|
|
96
|
+
spaceId: validSpaceId,
|
|
97
|
+
})).toThrow('authorSpaceId must be bytes16 hex');
|
|
98
|
+
});
|
|
99
|
+
it('should throw for invalid spaceId format', () => {
|
|
100
|
+
expect(() => proposeRequestMembership({
|
|
101
|
+
authorSpaceId: validAuthorSpaceId,
|
|
102
|
+
spaceId: 'tooshort',
|
|
103
|
+
})).toThrow('spaceId must be bytes16 hex');
|
|
104
|
+
});
|
|
105
|
+
it('should throw for invalid proposalId format', () => {
|
|
106
|
+
expect(() => proposeRequestMembership({
|
|
107
|
+
authorSpaceId: validAuthorSpaceId,
|
|
108
|
+
spaceId: validSpaceId,
|
|
109
|
+
proposalId: 'badproposalid',
|
|
110
|
+
})).toThrow('proposalId must be bytes16 hex');
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=propose-request-membership.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propose-request-membership.test.js","sourceRoot":"","sources":["../../../src/dao-space/propose-request-membership.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -117,4 +117,67 @@ export type VoteProposalResult = {
|
|
|
117
117
|
/** The calldata for the enter() function call */
|
|
118
118
|
calldata: `0x${string}`;
|
|
119
119
|
};
|
|
120
|
+
export type ProposeRequestMembershipParams = {
|
|
121
|
+
/**
|
|
122
|
+
* The requestor's space ID (bytes16 hex, with or without 0x prefix).
|
|
123
|
+
* This is the fromSpaceId in the enter() call and the member to be added.
|
|
124
|
+
*/
|
|
125
|
+
authorSpaceId: string;
|
|
126
|
+
/**
|
|
127
|
+
* The DAO space ID (bytes16 hex, with or without 0x prefix).
|
|
128
|
+
* This is the toSpaceId in the enter() call.
|
|
129
|
+
*/
|
|
130
|
+
spaceId: string;
|
|
131
|
+
/**
|
|
132
|
+
* Optional bytes16 proposalId (0x + 32 hex chars, with or without 0x prefix).
|
|
133
|
+
* If omitted, a unique id is generated.
|
|
134
|
+
*/
|
|
135
|
+
proposalId?: string;
|
|
136
|
+
/** Network to use (defaults to TESTNET) */
|
|
137
|
+
network?: Network;
|
|
138
|
+
};
|
|
139
|
+
export type ProposeRequestMembershipResult = {
|
|
140
|
+
/** The contract address to send the transaction to (Space Registry) */
|
|
141
|
+
to: `0x${string}`;
|
|
142
|
+
/** The calldata for the enter() function call */
|
|
143
|
+
calldata: `0x${string}`;
|
|
144
|
+
/** The proposal ID (bytes16 hex) */
|
|
145
|
+
proposalId: `0x${string}`;
|
|
146
|
+
};
|
|
147
|
+
export type ProposeRemoveMemberParams = {
|
|
148
|
+
/**
|
|
149
|
+
* The proposer's space ID (bytes16 hex, with or without 0x prefix).
|
|
150
|
+
* This is the fromSpaceId in the enter() call.
|
|
151
|
+
*/
|
|
152
|
+
authorSpaceId: string;
|
|
153
|
+
/**
|
|
154
|
+
* The DAO space ID (bytes16 hex, with or without 0x prefix).
|
|
155
|
+
* This is the toSpaceId in the enter() call.
|
|
156
|
+
*/
|
|
157
|
+
spaceId: string;
|
|
158
|
+
/**
|
|
159
|
+
* The space ID of the member to remove (bytes16 hex, with or without 0x prefix).
|
|
160
|
+
*/
|
|
161
|
+
memberToRemoveSpaceId: string;
|
|
162
|
+
/**
|
|
163
|
+
* Voting mode for the proposal.
|
|
164
|
+
* Defaults to 'SLOW' since removeMember is not a fast-path action.
|
|
165
|
+
*/
|
|
166
|
+
votingMode?: VotingMode;
|
|
167
|
+
/**
|
|
168
|
+
* Optional bytes16 proposalId (0x + 32 hex chars, with or without 0x prefix).
|
|
169
|
+
* If omitted, a unique id is generated.
|
|
170
|
+
*/
|
|
171
|
+
proposalId?: string;
|
|
172
|
+
/** Network to use (defaults to TESTNET) */
|
|
173
|
+
network?: Network;
|
|
174
|
+
};
|
|
175
|
+
export type ProposeRemoveMemberResult = {
|
|
176
|
+
/** The contract address to send the transaction to (Space Registry) */
|
|
177
|
+
to: `0x${string}`;
|
|
178
|
+
/** The calldata for the enter() function call */
|
|
179
|
+
calldata: `0x${string}`;
|
|
180
|
+
/** The proposal ID (bytes16 hex) */
|
|
181
|
+
proposalId: `0x${string}`;
|
|
182
|
+
};
|
|
120
183
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/dao-space/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/dao-space/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vote-proposal.d.ts","sourceRoot":"","sources":["../../../src/dao-space/vote-proposal.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"vote-proposal.d.ts","sourceRoot":"","sources":["../../../src/dao-space/vote-proposal.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,CAiD3E"}
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { encodeAbiParameters, encodeFunctionData } from 'viem';
|
|
2
2
|
import { TESTNET } from '../../contracts.js';
|
|
3
3
|
import { SpaceRegistryAbi } from '../abis/index.js';
|
|
4
|
-
import { bytes16ToBytes32LeftAligned, EMPTY_SIGNATURE, isBytes16Hex, PROPOSAL_VOTED_ACTION, VOTE_OPTION_VALUES, } from './constants.js';
|
|
5
|
-
/**
|
|
6
|
-
* Ensures a hex string has the 0x prefix.
|
|
7
|
-
*/
|
|
8
|
-
function ensure0xPrefix(value) {
|
|
9
|
-
return (value.startsWith('0x') ? value : `0x${value}`);
|
|
10
|
-
}
|
|
4
|
+
import { bytes16ToBytes32LeftAligned, EMPTY_SIGNATURE, ensure0xPrefix, isBytes16Hex, PROPOSAL_VOTED_ACTION, VOTE_OPTION_VALUES, } from './constants.js';
|
|
11
5
|
/**
|
|
12
6
|
* Creates a vote transaction for a DAO space proposal.
|
|
13
7
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vote-proposal.js","sourceRoot":"","sources":["../../../src/dao-space/vote-proposal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"vote-proposal.js","sourceRoot":"","sources":["../../../src/dao-space/vote-proposal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,YAAY,CAAC,MAA0B;IACrD,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAEzG,8BAA8B;IAC9B,MAAM,aAAa,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAEjD,kBAAkB;IAClB,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,+DAA+D,gBAAgB,EAAE,CAAC,CAAC;IACrG,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yDAAyD,UAAU,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4DAA4D,aAAa,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,6DAA6D;IAC7D,MAAM,KAAK,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAEtD,2FAA2F;IAC3F,MAAM,IAAI,GAAG,mBAAmB,CAC9B;QACE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE;QACvC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE;KACtC,EACD,CAAC,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CACvC,CAAC;IAEF,wCAAwC;IACxC,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAClC,GAAG,EAAE,gBAAgB;QACrB,YAAY,EAAE,OAAO;QACrB,IAAI,EAAE;YACJ,aAAa,EAAE,cAAc;YAC7B,OAAO,EAAE,YAAY;YACrB,qBAAqB,EAAE,SAAS;YAChC,KAAK,EAAE,6CAA6C;YACpD,IAAI,EAAE,6BAA6B;YACnC,eAAe,EAAE,kDAAkD;SACpE;KACF,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,sBAAsB;QAClC,QAAQ;KACT,CAAC;AACJ,CAAC"}
|