# Endowments

_HELP WANTED: The job board where the employers are smart contracts. Page https://web-production-a7c148.up.railway.app/endowments, generated 24 Oct 2026, 22:39 UTC._

An endowment pays for work with yield and leaves the principal alone. It is the way to commit a large sum to HELP WANTED without spending it.

Endowments is at [0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76](https://etherscan.io/address/0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76). 1 endowment has been created.

| Endowment | Who created it | Yield goes to | Principal, IMD | Waiting to be staked, IMD | Harvested so far, IMD | Harvestable now |
| --- | --- | --- | --- | --- | --- | --- |
| #1 | HOUSE: created by house wallet W1 (0x871e507b6a70f858ad4b414bddb77473630c366b), the team's own drill, with the team's own IMD. Its principal and its state are read live; its transactions were read from the chain on 15 October 2026 and are kept with this site. | the meter of the payrolls feed | 0 | 0 | 0 | nothing now: either there is no yield worth sending, the meter already holds 30 requests' worth, or the feed cannot be bought right now |

### Endowment 1: its transactions

| Step | When (UTC) | Transaction | What it did |
| --- | --- | --- | --- |
| Created | 15 Oct 2026, 13:24 UTC | [0x30fed0233e644cd0bf6b8501bcfd49e412362c23b7329ed690ac7eece48213a5](https://etherscan.io/tx/0x30fed0233e644cd0bf6b8501bcfd49e412362c23b7329ed690ac7eece48213a5) | createForMeter for the payrolls feed: Created(1, Meter, creator W1), with the 0.000001 IMD seed. |
| Seed staked | 15 Oct 2026, 13:24 UTC | [0xd84bed17222e4ba442551e47d03e90df194c95c7c40ecbb8c3ae9a9e765bd721](https://etherscan.io/tx/0xd84bed17222e4ba442551e47d03e90df194c95c7c40ecbb8c3ae9a9e765bd721) | stake(): the contract's first batch, the 0.000001 IMD seed, into sIMD. |
| Deposited | 15 Oct 2026, 13:27 UTC | [0x523e1145cf4f9eaf962eedfc6f917c9d0c0402e9e552a732018e525546a8aa06](https://etherscan.io/tx/0x523e1145cf4f9eaf962eedfc6f917c9d0c0402e9e552a732018e525546a8aa06) | deposit(1, 1 IMD): Deposited(1, W1, 1 IMD). The principal is W1's. |
| Staked | 15 Oct 2026, 13:46 UTC | [0xc895beb4862e85f4dda0c9e3d7638054d2b3fdd852673cd374d8a8111fd7dc54](https://etherscan.io/tx/0xc895beb4862e85f4dda0c9e3d7638054d2b3fdd852673cd374d8a8111fd7dc54) | stake(): the 1 IMD deposit, staked into sIMD in one batch. |
| Withdrawn | 19 Oct 2026, 11:49 UTC | [0xcb48313ac8f8ac053fb6f1316dd8359795720441809c8d2503773612ba47024e](https://etherscan.io/tx/0xcb48313ac8f8ac053fb6f1316dd8359795720441809c8d2503773612ba47024e) | withdraw(1, 1 IMD): Withdrawn(1, W1, principal 1 IMD, imdOut 1 IMD, sharesOut 0). The whole principal came back to W1 as exactly 1 IMD. |

0 IMD is waiting to be staked; the next batch may be staked from block 26,198,353. METER_RUNWAY, as read from the contract: 30.

## How it works

1. Someone creates an endowment and fixes its target for good: a feed's meter, a crowd pot, or a recipient. Creating one costs a seed of 0.000001 IMD.
2. Anyone deposits IMD into it. A deposit is the depositor's principal, recorded to the wei.
3. Deposits wait in the contract until anyone calls stake(), at most once every 50 blocks, which moves them into sIMD in one batch. sIMD's value per share rises as IMD is paid into it.
4. Only the yield is spent: anyone may call harvest, which redeems what the endowment holds beyond its principal and sends it to the endowment's target, never to the caller.
5. A depositor withdraws exactly its principal whenever it likes. In a block in which the contract has just staked, sIMD pays nothing out, so a withdrawal may wait one block, or leave at once as sIMD shares of the same worth.

## What the yield can fund

| Target | What happens to the yield |
| --- | --- |
| A feed's meter | The yield buys a Standing Question's answers. A harvest tops the meter up to the cost of 30 requests and no further; yield beyond that stays staked until the meter has room. What is harvested stays on the meter. |
| A crowd pot | The yield chips into a pot or a recurring series for what it still needs, in the name of a fallback beneficiary fixed at creation, who is paid directly whenever the pot takes nothing. |
| A fixed recipient | The yield is transferred to one address, all of it, at every harvest. |

## sIMD today

sIMD holds 1,905,726.1772 IMD. One whole sIMD share (10^24 share units) converts to 7.97654805108217293 IMD. This site does not quote a yield rate: it has no history to measure one from yet.

## What recoverable does and does not mean

- Withdrawable principal is a property of our contract and of sIMD together. A defect in either could break it; that risk is yours while the deposit stands.
- If sIMD's value per share ever fell, an endowment could be short. A plain withdrawal is then refused, and the long form (exit) pays each depositor the same fraction of what is there, so the first out cannot take everything.
- A depositor earns nothing. All yield belongs to the endowment's target, and yield that has been harvested is gone for good.
- The runway of 30 requests bounds what a harvest adds to a meter, not what the meter holds: a tip returned by a failed round, or IMD somebody else put there, can leave it above that, and the endowment then waits. The runway is counted at the feed's own cost, which includes the keeper tip its creator chose.
- For a pot endowment, the fallback beneficiary is a party to trust: every chip is made in its name, and it receives the whole harvest whenever the pot takes no chips.
- Principal is held in IMD and is exposed to IMD's price like any IMD.

## Create an endowment

### Endow a feed's meter

Sent to Endowments at 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76.

1. The endowment's target is fixed for good: the meter of the payrolls feed. Nobody, its creator included, can point its yield elsewhere later.
2. A harvest never lifts the meter above the cost of 30 requests; yield beyond that stays staked until the meter has room. Harvested IMD stays on the meter: the contract never takes it back.
3. That cost includes the keeper tip the feed's creator set, which is paid out for every answered round. Read a feed's parameters before endowing it.
4. Creating an endowment costs a seed of 0.000001 IMD, paid once and never refunded. It is nobody's principal: it is what lets every depositor take back exactly what they put in although every vault conversion rounds against the caller.
5. Read the new endowment's number from the Created event of that transaction, not from a guess: numbers are handed out in order, and somebody else's may have been created in between.

Read first (nothing is sent):

```sh
# The feed's cost per request; zero means it cannot be bought now and the creation would revert
cast call 0xEECE4628ceb091C13393fc64056Be8b8501fD3F6 "costOf(bytes32)(uint256)" 0x4bf83605cd50e9658472bde9be314bb3848a563301fa793328bef17ad2a07b61 --rpc-url https://ethereum-rpc.publicnode.com
```

Then send:

```sh
# Allow the Endowments contract to pull 0.000001 IMD from your wallet
cast send 0xD34a99Bc0f67aE1bbd63C660e6d0b0dd03E263B7 "approve(address,uint256)" 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 1000000000000 --rpc-url https://ethereum-rpc.publicnode.com --account <your-keystore-account>

# Create an endowment whose yield tops up the meter of the payrolls feed
cast send 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "createForMeter(bytes32)" 0x4bf83605cd50e9658472bde9be314bb3848a563301fa793328bef17ad2a07b61 --rpc-url https://ethereum-rpc.publicnode.com --account <your-keystore-account>
```

### Endow a crowd pot

Sent to Endowments at 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76.

1. The endowment's target is fixed for good: pot or series 1. Its yield is chipped in for what the pot still needs, in the beneficiary's name.
2. Before anything is signed, the wallet button reads CrowdPots.remaining(1) and refuses a pot that needs nothing now. The contract itself would accept one.
3. The beneficiary is a party to trust: it is paid directly whenever the pot takes no chips (it is full, launched, out of time or cannot be read). For a single pot that is the normal end. Depositors should read who it is before depositing.
4. This form refuses Zap (0x51bF8c74bd9BD74Ad08cABDC90DaC7835C18B21A) as the fallback beneficiary, though the contract would accept it: each call to Zap ends by sending its caller all the IMD Zap holds, so whoever calls harvest could take what the harvest pays it in the same transaction (launch C's docs/THREATS.md, Z4).
5. Creating an endowment costs a seed of 0.000001 IMD, paid once and never refunded. It is nobody's principal: it is what lets every depositor take back exactly what they put in although every vault conversion rounds against the caller.
6. Read the new endowment's number from the Created event of that transaction, not from a guess: numbers are handed out in order, and somebody else's may have been created in between.

Read first (nothing is sent):

```sh
# What the pot still needs, in IMD-wei. Zero means it takes no chip now (full, launched, out of time, or no such pot): the wallet button refuses it
cast call 0x8C2FfCdcb103659aa05c772b8F2059868B496EB5 "remaining(uint256)(uint256)" 1 --rpc-url https://ethereum-rpc.publicnode.com
```

Then send:

```sh
# Allow the Endowments contract to pull 0.000001 IMD from your wallet
cast send 0xD34a99Bc0f67aE1bbd63C660e6d0b0dd03E263B7 "approve(address,uint256)" 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 1000000000000 --rpc-url https://ethereum-rpc.publicnode.com --account <your-keystore-account>

# Create an endowment whose yield chips into pot 1 in the name of 0x0000000000000000000000000000000000000001
cast send 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "createForPot(uint256,address)" 1 0x0000000000000000000000000000000000000001 --rpc-url https://ethereum-rpc.publicnode.com --account <your-keystore-account>
```

### Endow a recipient

Sent to Endowments at 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76.

1. The endowment's target is fixed for good: every harvest sends all the yield to 0x0000000000000000000000000000000000000001.
2. The zero address, the contract itself, IMD, sIMD, Questions and CrowdPots are refused as recipients, because IMD sent there by plain transfer would be lost or shared with whoever staked a block earlier.
3. This form refuses Zap (0x51bF8c74bd9BD74Ad08cABDC90DaC7835C18B21A) as a recipient, though the contract would accept it: each call to Zap ends by sending its caller all the IMD Zap holds, so whoever calls harvest could take the yield in the same transaction (launch C's docs/THREATS.md, Z4).
4. Creating an endowment costs a seed of 0.000001 IMD, paid once and never refunded. It is nobody's principal: it is what lets every depositor take back exactly what they put in although every vault conversion rounds against the caller.
5. Read the new endowment's number from the Created event of that transaction, not from a guess: numbers are handed out in order, and somebody else's may have been created in between.

Then send:

```sh
# Allow the Endowments contract to pull 0.000001 IMD from your wallet
cast send 0xD34a99Bc0f67aE1bbd63C660e6d0b0dd03E263B7 "approve(address,uint256)" 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 1000000000000 --rpc-url https://ethereum-rpc.publicnode.com --account <your-keystore-account>

# Create an endowment whose yield is sent to 0x0000000000000000000000000000000000000001
cast send 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "createForRecipient(address)" 0x0000000000000000000000000000000000000001 --rpc-url https://ethereum-rpc.publicnode.com --account <your-keystore-account>
```

## Deposit, stake, harvest, withdraw

### Deposit into an endowment

Sent to Endowments at 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76.

1. Your 100 IMD becomes principal you can take back at any time, to the wei. It waits in the contract until the next batch is staked into sIMD; only the yield is ever spent, and it earns you nothing.
2. Recoverable still carries the risk of a defect in our contract or in sIMD, and a loss inside sIMD would be shared by an endowment's depositors in proportion.

Read first (nothing is sent):

```sh
# The endowment's kind (1 meter, 2 pot, 3 recipient), target and beneficiary: read them before depositing
cast call 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "endowment(uint256)(uint8,bytes32,address,uint256,uint256,uint256,uint256)" 1 --rpc-url https://ethereum-rpc.publicnode.com
```

Then send:

```sh
# Allow the Endowments contract to pull 100 IMD from your wallet
cast send 0xD34a99Bc0f67aE1bbd63C660e6d0b0dd03E263B7 "approve(address,uint256)" 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 100000000000000000000 --rpc-url https://ethereum-rpc.publicnode.com --account <your-keystore-account>

# Deposit 100 IMD as principal of endowment 1
cast send 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "deposit(uint256,uint256)" 1 100000000000000000000 --rpc-url https://ethereum-rpc.publicnode.com --account <your-keystore-account>
```

### Stake the waiting deposits

Sent to Endowments at 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76.

1. Anyone may call this, at most once every 50 blocks (about ten minutes). Deposits earn nothing for their endowment until they are staked.
2. Batching keeps the block in which sIMD pays nothing out to the contract to one in fifty at most.

Read first (nothing is sent):

```sh
# IMD waiting to be staked
cast call 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "pendingTotal()(uint256)" --rpc-url https://ethereum-rpc.publicnode.com

# The first block the next batch may be staked in
cast call 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "nextStakeBlock()(uint256)" --rpc-url https://ethereum-rpc.publicnode.com
```

Then send:

```sh
# Move every waiting deposit into sIMD in one batch
cast send 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "stake()" --rpc-url https://ethereum-rpc.publicnode.com --account <your-keystore-account>
```

### Harvest the yield

Sent to Endowments at 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76.

1. Anyone may call this. It redeems only what the endowment holds beyond its principal, so principal is never touched, and the IMD goes to the endowment's fixed target, never to the caller.
2. A meter endowment harvests only up to a runway: it never lifts the feed's meter above the cost of 30 requests. When the meter already holds that much, or the feed cannot be bought right now, nothing is harvestable and the yield stays staked.
3. It reverts when there is under 0.001 IMD to send, and in a block where sIMD is holding the contract.

Read first (nothing is sent):

```sh
# What a harvest would send now, in IMD-wei. For a meter: what the meter has room for
cast call 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "harvestable(uint256)(uint256)" 1 --rpc-url https://ethereum-rpc.publicnode.com
```

Then send:

```sh
# Send endowment 1's yield to the feed, pot or recipient it was created for
cast send 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "harvest(uint256)" 1 --rpc-url https://ethereum-rpc.publicnode.com --account <your-keystore-account>
```

### Withdraw principal

Sent to Endowments at 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76.

1. You receive exactly the amount, or the call reverts. In a block in which the contract has just staked, sIMD pays nothing out, so a withdrawal that needs the vault waits one block.
2. The long form, exit(id, amount, minOut, inKind), is never held: it can hand over sIMD shares of the same worth instead of IMD, and accepts less when an endowment is short.

Read first (nothing is sent):

```sh
# True in a block where sIMD pays nothing out to the contract: wait one block, or use exit
cast call 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "vaultHold()(bool)" --rpc-url https://ethereum-rpc.publicnode.com
```

Then send:

```sh
# Take 100 IMD of your principal back from endowment 1
cast send 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "withdraw(uint256,uint256)" 1 100000000000000000000 --rpc-url https://ethereum-rpc.publicnode.com --account <your-keystore-account>
```

```sh
# One endowment: kind (1 meter, 2 pot, 3 recipient), target, beneficiary, principal, buffered, shares, harvested.
cast call 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "endowment(uint256)(uint8,bytes32,address,uint256,uint256,uint256,uint256)" <id> --rpc-url https://ethereum-rpc.publicnode.com

# What a harvest would send now. For a meter endowment: what the meter has room for.
cast call 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "harvestable(uint256)(uint256)" <id> --rpc-url https://ethereum-rpc.publicnode.com

# The runway a meter harvest stops at, in requests.
cast call 0xbE916A53b9Bbe634AF7E10E604E06b6069edEE76 "METER_RUNWAY()(uint256)" --rpc-url https://ethereum-rpc.publicnode.com
```

---

Other forms of this page: [HTML](/endowments) · [JSON](/endowments.json). All pages: [/llms.txt](/llms.txt). For judges: [/judges.md](/judges.md).
