HSG & MHSG Handlers
The following section describes a different way of interacting with HSG and MHSG instances, than documented in the previous sections. In particular, in the previous sections, for each operation on the HSG and MHSG contracts, there's a matching function in the SDK.
In addition to these individual functions, the SDK also includes a single handler for calling the write operations of both HSG and MHSG instances. This enables HSG/MHSG interactions to be optionally handled in a similar way to Hats Modules interactions, by working with the HSG and MHSG metadata objects and the single write functions handler.
Handlers
callInstanceWriteFunction
Call a HSG/MHSG instance's write function.
const res = await hatsSignerGateClient.callInstanceWriteFunction({
account,
type,
instance,
func,
args,
});
Arguments:
{
account: Account | Address;
type: HsgType;
instance: Address;
func: WriteFunction;
args: unknown[];
}
account
- Viem account (Address for JSON-RPC accounts or Account for other types).type
- 'HSG' or 'MHSG'.instance
- The MHSG/HSG instance address.func
- The write function to call, provided as an object of type WriteFunction.args
- The arguments with which to call the function, as objects of type WriteFunctionArg.
Response:
{
status: "success" | "reverted";
transactionHash: `0x${string}`;
}
status
- "success" if transaction was successful, "reverted" if transaction reverted.transactionHash
- transaction's hash.
getInstanceParameters
Get a HSG or MHSG instance live parameters:
Safe address
Min threshold
Target threshold
Max signers
Owner Hat
const params = await hatsSignerGateClient.getInstanceParameters(instance);
Arguments:
instance: `0x${string}`
instance
- Instance's address.
Response:
{
label: string;
value: unknown;
solidityType: string;
displayType: string;
}[]
An array of objects, each containing a parameter's information:
label
- The parameter's name/description.value
- The parameter's value, as was returned from the instance contract.solidityType
- The parameter's Solidity type.displayType
- The parameter's display type. Its purpose is for UIs to be able to render an appropriate component for the parameter
Metadata
Both the HSG and MHSG metadata objects include their ABIs, all their write functions together with the metadata of each function and the custom roles that are associated with them.
getMetadata
Get the metadata object of HSG or MHSG.
const metadata = await hatsSignerGateClient.getMetadata(type);
Arguments:
HsgType
"HSG" or "MHSG"
Response:
HsgMetadata
An object of type HsgMetadata.
Types
HsgMetadata
Represents a HSG or MHSG metadata object.
{
customRoles: Role[]; // HSG/MHSG custom roles
writeFunctions: WriteFunction[]; // HSG/MHSG write functions
abi: Abi; // HSG/MHSG ABI
}
Role
A custom HSG/MHSG role. Each role is associated with a hat and grants permissions to the hat's wearer(s) to call certain functions on the contract.
There are two special roles with a reserved ID:
public
role, associated with functions that are permitted to any caller.hatAdmins
role, associated with functions that are permitted to the target hat's admins.
{
id: string; // role's ID
name: string; // role's name
criteria: string; // The name of the contract function which can be used to retrieve the role's hat
hatAdminsFallback?: boolean; // 'true' indicates that the role is granted to the target hat's admin(s) if/when the role's criteria function returns zero.
}
WriteFunction
The HSG/MHSG write functions. Each write function is associated with a role that grants permissions to the role's wearer(s) to call the function on the contract.
{
roles: string[]; // IDs of the roles that have the authority to call the function
functionName: string; // the name of the function in the contract
label: string; // the name to be displayed to end users
description: string; // a description of the function to be displayed to end users
primary?: boolean; // 'true' indicates that this function is the primary function of the roles it is associated with. Front ends can use this information to display the function more prominently for each role
args: WriteFunctionArg[]; // the arguments of the function
}
WriteFunctionArg
HSG/MHSG write function argument.
{
name: string; // arg's name
description: string; // arg's description
type: string; // arg's solidity type, e.g. 'uint256'
displayType: string; // a free-text field that tells front ends how to generate a proper UI component for the parameter
optional?: boolean; // setting to 'true' indicates that this input is optional
}
Last updated