dial
Ethereum

The standard

ERC-555: an ERC-20 where whoever owns a unit can program it. A nickname, not an assigned EIP number.

Pool fee1%
Pools1
End date1 to 365days
Rows32per wallet
1

Every unit leaves the pool plain.

2

If you own it you can program it, and the program follows the unit from wallet to wallet.

3

Only two things erase the program: the pool, when sold, and the end date.

The cycle

What happens to a unit, from the pool and back.

Pool→Plain→Programmed→Sold to the poolEnd date→Plain

The program travels with the units in between: every wallet they reach carries it.

Functions

balanceOf counts every unit, plain and programmed.

programWrites a program on plain units you own, with your settings and an end date. The units stay in your balance.
transferBehaves like any ERC-20: plain units go first. Past them, programmed units go too, whole, and their program is asked.
sendMoves one chosen row to another wallet. The program follows it.
sellTakes a row into the pool. The program is asked, the pool erases it and pays ETH.
expireErases a program after its end date. Anyone can call it, the units stay where they are.

What a program can do

A read-only contract. It never holds a unit and never touches ETH.

When units ask to move, it answers yes or no. Its settings are typed by whoever writes it and can never be edited, not by you, not by someone holding your keys.

Any program may also answer with one verb from a closed list, and the token carries it out: sell these units for their owner, or hand them to whoever pays the owner the price written in the settings. Programs are permissionless, like Uniswap v4 hooks: this site lists the ones it has reviewed.

1Received unitsUnits someone sent you can never be taken by a program.
2One hourUnits you just put up can't be taken for one hour, and you can cancel in that hour.
3ClaimsEvery wei owed to you waits in the token until you claim it.

Built-in programs

Fixed when the token was deployed. Nobody can add or change one.

ProgramCan sendCan sellActs
Stop lossIf the price crosses your line (a stop, a target, or a trail off the high), anyone can sell these units for you for a 0.5% tip, never under your floor.YesYes, and for youSells for you
LoanAnyone can lend ETH against these units. Paid back in time, they come home. If not, the lender keeps them. No oracle, no liquidation.Not during a loanUntil someone lendsLend, repay

Write your own

Any contract with three read-only functions. Everything it may look at arrives in one struct.

contract Weekend is IProgram {
  // sellable on Saturdays and Sundays only. Free between wallets.
  function check(Ask calldata ask) external pure returns (bytes4) {
    if (!ask.toPool) return IProgram.check.selector;       // yes
    uint256 day = (ask.time / 1 days + 4) % 7;             // 0 = Sunday
    return day == 0 || day == 6 ? IProgram.check.selector : bytes4(0);
  }
  function validate(Ask calldata ask) external pure returns (bytes4) {
    return ask.params.length == 0 ? IProgram.validate.selector : bytes4(0);
  }
  function describe(bytes calldata) external pure returns (string memory) {
    return "These units can only be sold on Saturdays and Sundays (UTC).";
  }
}
  1. Deploy it, once. It has no owner and no state.
  2. Paste its address on Write a program. The site reads describe() from the chain and shows you the sentence before you sign.
  3. Press Program. From there it behaves like any other: it follows the units, the pool erases it, it stops on the end date.

DIAL never checks a program. If it is wrong, the worst it can do is say no until the end date.

Guarantees

BalanceProgrammed units stay in your balance and move only where their program says yes. An approval reaches them only there.
End dateMandatory, 1 to 365 days. A typo, a bad program or a stolen key can hold units until that date, never past it.
Your walletYou choose whether programmed units can land in it. Contracts refuse them unless they opt in.
RowsA wallet holds at most 32 programmed rows.
UnitsOne unit is one whole DIAL. Fractions are always plain.

Fees

DIAL trades on one pool. Anyone can add liquidity to it, no other pool can hold DIAL.

Pool trades1%To the team. No transfer tax.
Programming1% a yearOf what the units are worth, per year of term. The full fee goes to the dev.
Programs are written once and run on every 555 token.View the contractProgram your units
@dial_555