Skip to content
Merged
Show file tree
Hide file tree
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
1 change: 1 addition & 0 deletions helpers/SeamlessAddressBook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ library SeamlessAddressBook {
address constant SEAM_EMISSION_MANAGER_2 = 0x785c979EE8709060b3f71aEf4f2C09229DB90778;

address constant GUARDIAN_MULTISIG = 0xA1b5f2cc9B407177CD8a4ACF1699fa0b99955A22;
address constant SEAMLESS_CONTRIBUTOR_MULTISIG = 0x783Cbb9387eE592E08125dCDb3e59ddFA73a6113;

address constant SEAMLESS_AERA_VAULT_ADMIN = 0x0ec9a61BD923CBaF519b1bAEF839617f012344E2;

Expand Down
30 changes: 30 additions & 0 deletions proposals/sip_46/DeployProposal.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.25;

import { Script, console } from "forge-std/Script.sol";
import { Proposal } from "./Proposal.sol";
import { IGovernor } from "@openzeppelin/contracts/governance/IGovernor.sol";
import { SeamlessAddressBook } from "../../helpers/SeamlessAddressBook.sol";

contract DeployProposal is Script {
function setUp() public { }

function run(string memory descriptionPath) public {
Proposal proposal = new Proposal();

// Change this to GOVERNOR_LONG if you want to make proposal on the long governor
IGovernor governance = IGovernor(SeamlessAddressBook.GOVERNOR_SHORT);

string memory description = vm.readFile(descriptionPath);

address proposerAddress = vm.envAddress("PROPOSER_ADDRESS");
vm.startBroadcast(proposerAddress);
governance.propose(
proposal.getTargets(),
proposal.getValues(),
proposal.getCalldatas(),
description
);
vm.stopBroadcast();
}
}
39 changes: 39 additions & 0 deletions proposals/sip_46/Proposal.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.21;

import {
SeamlessGovProposal,
SeamlessAddressBook
} from "../../helpers/SeamlessGovProposal.sol";
import { ISeamEmissionManager } from
"@seamless-governance/interfaces/ISeamEmissionManager.sol";
import { IERC20 } from "@openzeppelin/contracts/interfaces/IERC20.sol";

contract Proposal is SeamlessGovProposal {
uint256 public constant budgetAmount = 11_000_000 * 1e18;

constructor() {
_makeProposal();
}

/// @dev This contract is not deployed onchain, do not make transactions to other contracts
/// or deploy a contract. Only the view/pure functions of deployed contracts can be called.
function _makeProposal() internal virtual override {
_addAction(
SeamlessAddressBook.SEAM_EMISSION_MANAGER_2,
abi.encodeWithSelector(
ISeamEmissionManager.claim.selector,
SeamlessAddressBook.TIMELOCK_SHORT
)
);

_addAction(
SeamlessAddressBook.SEAM,
abi.encodeWithSelector(
IERC20.transfer.selector,
SeamlessAddressBook.SEAMLESS_CONTRIBUTOR_MULTISIG,
budgetAmount
)
);
}
}
78 changes: 78 additions & 0 deletions proposals/sip_46/TestProposal.t.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.25;

import { GovTestHelper } from "../../helpers/GovTestHelper.sol";
import { Proposal } from "./Proposal.sol";
import { SeamlessAddressBook } from "../../helpers/SeamlessGovProposal.sol";
import { ISeamEmissionManager } from
"@seamless-governance/interfaces/ISeamEmissionManager.sol";
import { IERC20 } from "@openzeppelin/contracts/interfaces/IERC20.sol";

contract TestProposal is GovTestHelper {
Proposal public proposal;

function setUp() public {
vm.rollFork(29282991);
proposal = new Proposal();
}

function test_seamClaimedAndTransferedToGuardian_afterPassingProposal()
public
{
IERC20 seam = IERC20(SeamlessAddressBook.SEAM);

uint256 contributorBalanceBefore =
seam.balanceOf(SeamlessAddressBook.SEAMLESS_CONTRIBUTOR_MULTISIG);
uint256 timelockBalanceBefore =
seam.balanceOf(SeamlessAddressBook.TIMELOCK_SHORT);
uint256 emissionManagerBalanceBefore2 =
seam.balanceOf(SeamlessAddressBook.SEAM_EMISSION_MANAGER_2);

uint256 expectedEmissionClaimAmount2 =
_expectedEmissionManagerClaimAmount(
ISeamEmissionManager(SeamlessAddressBook.SEAM_EMISSION_MANAGER_2)
);

_passProposalShortGov(proposal);

uint256 contributorBalanceAfter =
seam.balanceOf(SeamlessAddressBook.SEAMLESS_CONTRIBUTOR_MULTISIG);
uint256 timelockBalanceAfter =
seam.balanceOf(SeamlessAddressBook.TIMELOCK_SHORT);
uint256 emissionManagerBalanceAfter2 =
seam.balanceOf(SeamlessAddressBook.SEAM_EMISSION_MANAGER_2);

assertEq(
contributorBalanceAfter,
contributorBalanceBefore + (11_000_000 * 1e18)
);
assertEq(
timelockBalanceAfter,
timelockBalanceBefore + expectedEmissionClaimAmount2
- (11_000_000 * 1e18)
);
assertEq(
emissionManagerBalanceBefore2 - emissionManagerBalanceAfter2,
expectedEmissionClaimAmount2
);
}

function _expectedEmissionManagerClaimAmount(
ISeamEmissionManager emissionManager
) internal returns (uint256) {
uint256 snapshotId = vm.snapshot();

_passProposalShortGov(proposal);

uint64 currentTimestamp = uint64(block.timestamp);

require(
vm.revertToAndDelete(snapshotId), "Failed to revert to snapshot"
);

uint256 emissionPerSecond = emissionManager.getEmissionPerSecond();
uint64 lastClaimedTimestamp = emissionManager.getLastClaimedTimestamp();

return (currentTimestamp - lastClaimedTimestamp) * emissionPerSecond;
}
}
56 changes: 56 additions & 0 deletions proposals/sip_46/description.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# [SIP-46] From Bootstrap to Growth: Continuing Seamless DAO’s Support of Core Contributors

## Summary
This proposal seeks the DAO’s approval to allocate an additional 11% in SEAM tokens to core contributors to support the long-term development, strategic hiring, security efforts, and other alignment grants for Seamless Protocol over the next 2–4 years. This allocation will bring the total contributor allocation to 22%, aligning with industry norms while maintaining strong DAO ownership of the token supply and positioning Seamless for long-term success in an increasingly competitive DeFi landscape.

## Context and motivation
Since June 2023, the core contributors of Seamless Protocol have operated as a bootstrapped team, delivering significant value with limited resources. From the outset, Seamless was [launched as a fair launch project](https://docs.seamlessprotocol.com/governance/seam-tokenomics), allocating only 11% of the token supply to the team and advisors (8% to the core team and 3% to advisors) — well below industry benchmarks.

Despite these lean conditions, the team has delivered several major milestones:

- The **legacy lending/borrowing platform** achieved over **$100M TVL**
- Release of **Integrated Liquidity Markets (ILMs) v1**
- Successful integration with **Morpho vaults**, driving over **$75M TVL**
- **Tokenomics** update and [launch of staking (stkSEAM)](https://www.tally.xyz/gov/seamless-protocol/proposal/92522935634842794439797309771367244712332370162121897616517014635998973064164)
- Upcoming release of **Leverage Tokens** (currently under audit from Spearbit, targeting a May release)
- Ongoing execution across roadmap and master plan initiatives

This track record reflects both strong contributor performance and growing ecosystem traction. To sustain this momentum, the DAO must evolve its support model — shifting from lean startup conditions to resourcing a high-performing team of professionals.

To remain competitive, attract and retain talent, and scale effectively, the DAO should invest in its contributors. Providing the necessary resources will enable Seamless to mature into a strategically aligned, long-term team capable of delivering on the protocol’s [mission/vision](https://seamlessprotocol.discourse.group/t/gp-what-drives-seamless-core-beliefs-vision-future/584) and navigating the demands of future growth. For reference, over the course of development, an estimated $3.25 million USD has been operationally utilized across salaries, audits, infrastructure, legal, BD, marketing, and more.

### Goals & Objectives
This proposal seeks to increase the core contributor allocation from 11% to 22%. This amount remains below the industry averages of ~23-24% and is intended to ensure that contributors are rewarded fairly and supported sustainably.

The additional SEAM allocation will support several high-priority initiatives:

- **Strategic hiring and team expansion**
- One new full-time contributor and one contractor have already been onboarded
- Future hiring plans include:
- Full-stack engineers with individual all-in compensations in the range of $102k-$193k USD per year (note: strong full stack engineers command average all-in costs of ~$152k USD depending on experience and geography)
- DeFi-native generalists with individual all-in compensations in the range of $117k-$167k USD per year (note: DeFi-experienced non-technical contributors command average all-in costs of ~$147k a year, based on experience and geographical location)
- **Funding essential protocol functions**
- Smart contract audits for Leverage Tokens v1.0, which typically cost between 50,000 and 100,000 USD per audit
- Two audits have been previously completed: one for the legacy lending and borrowing platform, and one for ILM version 1.0
- **Alignment grants for long-term partners**
- Token grants to support the involvement of governance delegates, strategic partners, and key advisors
- **Sustaining long-term execution**
- The Seamless roadmap is ambitious. This allocation ensures the protocol has the talent and resources needed to meet community expectations and deliver consistently

By approving this proposal, the DAO can invest in the people and capabilities required to scale Seamless with focus and integrity. This would mean the continued execution of the [short term roadmap](https://x.com/SeamlessFi/status/1899912753520808419) and marching towards the Seamless [long term master plan](https://x.com/SeamlessFi/status/1906700199113723994).

### Proposal Details

#### Allocation
- **11% additional SEAM tokens (11m in SEAM tokens)** sourced from DAO-owned and DAO-vesting smart contracts, taken as a subset of the **65% of SEAM reserved on-chain for DAO use**
- SEAM to be moved from the **DAO timelock to a secure multisig** wallet designated by Core Contributors

#### Technical Implementation
- Execute onchain transfer from DAO-vesting smart contracts to DAO timelock
- Transfer SEAM from DAO timelock to multisig/custody controlled by core contributors

## Resources & References

- [Governance Discussion](https://seamlessprotocol.discourse.group/t/gp-from-bootstrap-to-growth-continuing-seamless-dao-s-support-of-core-contributors/946)
- [Proposal Implementation](https://github.com/seamless-protocol/gov-proposals/tree/main/proposals/sip_46)
- Built using [Seamless Governance Proposals tools](https://github.com/seamless-protocol/gov-proposals)
Loading