Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions src/MultiSigContractV2.sol
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,73 @@ contract MultiSigContractV2 is Ownable, ReentrancyGuard, Pausable {
error MultiSigContract__SignerNotFound();
error MultiSigContract__InsufficientSignatures();
error MultiSigContract__InvalidAddress();
error MultiSigContract__TimelockActive();
error MultiSigContract__EmergencyModeActive();
error MultiSigContract__InvalidThreshold();
error MultiSigContract__DuplicateSigner();

////////////////////
// Constants //
//////////////////
uint256 public constant MAX_SIGNERS = 20;
uint256 public constant MIN_SIGNERS = 2;
uint256 public constant MAX_SIGNATURE_THRESHOLD = 100; // 100%
uint256 public constant DEFAULT_TX_EXPIRY = 7 days;
uint256 public constant TIMELOCK_DURATION = 2 days;
uint256 public constant EMERGENCY_TIMELOCK = 24 hours;

////////////////////
// State Variables //
////////////////////

/// @notice Factory token contract reference
FactoryTokenContract public factoryTokenContract;

/// @notice Sign Protocol instance
ISP public spInstance;

/// @notice Schema IDs for different attestation types
uint64 public signatureSchemaId;
uint64 public revocationSchemaId;
uint64 public executionSchemaId;

/// @notice Global signature threshold (percentage * 100, e.g., 6000 = 60%)
uint256 public signatureThreshold = 6000; // 60% by default

/// @notice Transaction expiry duration
//uint256 public transactionExpiry = DEFAULT_TX_EXPIRY;

/// @notice Emergency mode status
bool public emergencyMode;

/// @notice Emergency admin (can pause/unpause in emergencies)
address public emergencyAdmin;

////////////////////
// Constructor //
////////////////////

constructor(
address _spInstance,
uint64 _signatureSchemaId,
uint64 _revocationSchemaId,
uint64 _executionSchemaId,
address _emergencyAdmin,
address _initialOwner
)
Ownable(_initialOwner)
{
if (_spInstance == address(0) || _emergencyAdmin == address(0)) {
revert MultiSigContract__InvalidAddress();
}

spInstance = ISP(_spInstance);
signatureSchemaId = _signatureSchemaId;
revocationSchemaId = _revocationSchemaId;
executionSchemaId = _executionSchemaId;
emergencyAdmin = _emergencyAdmin;

// Add owner as initial signer with admin role
//_addSigner(_initialOwner, "admin");
}
}
Loading