The Scriptorium
Smart Assembly code templates and tools for on-chain development in Eve Frontier.
← Back to Example Code
Tribe-Only Gate Access
Gate MechanicsA Smart Gate that restricts passage to members of an allowlist. The owner can add or remove addresses. Useful for tribe-controlled gates where only known pilots should pass.
gateallowlisttribeaccess-control
tribe-only-gate-access.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import { SmartGateBase } from "@eveworld/smart-gate/SmartGateBase.sol";
/**
* @title TribeGate
* @notice Gate restricted to an allowlist of tribe member addresses.
*/
contract TribeGate is SmartGateBase {
address public owner;
mapping(address => bool) public allowed;
uint256 public memberCount;
event MemberAdded(address indexed member);
event MemberRemoved(address indexed member);
constructor() {
owner = msg.sender;
allowed[msg.sender] = true;
memberCount = 1;
}
modifier onlyOwner() {
require(msg.sender == owner, "Not gate owner");
_;
}
function addMember(address _member) external onlyOwner {
require(!allowed[_member], "Already a member");
allowed[_member] = true;
memberCount++;
emit MemberAdded(_member);
}
function removeMember(address _member) external onlyOwner {
require(_member != owner, "Cannot remove owner");
require(allowed[_member], "Not a member");
allowed[_member] = false;
memberCount--;
emit MemberRemoved(_member);
}
function addMembers(address[] calldata _members) external onlyOwner {
for (uint256 i = 0; i < _members.length; i++) {
if (!allowed[_members[i]]) {
allowed[_members[i]] = true;
memberCount++;
emit MemberAdded(_members[i]);
}
}
}
function canJump(
address caller,
uint256 /* shipId */
) external view override returns (bool) {
return allowed[caller];
}
}