Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Canary Interface ERC #801

Merged
merged 3 commits into from
Jan 2, 2018
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
79 changes: 79 additions & 0 deletions EIPS/eip-801.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
## Preamble

EIP: 801
Title: ERC-801 Canary Standard
Author: ligi <ligi@ligi.de>
Type: Standard
Category: ERC
Status: Draft
Created: 2017-12-16


## Simple Summary

A standard interface for canary contracts.

## Abstract

The following standard allows the implementation of canaries within contracts.
This standard provides basic functionality to check if a canary is alive, keeping the canary alive and optionally manage feeders.

## Motivation

The canary can e.g. be used as a [warrant canary](https://en.wikipedia.org/wiki/Warrant_canary).
A standard interface allows other applications to easily interface with canaries on Ethereum - e.g. for visualizing the state, automated alarms, applications to feed the canary or contracts (e.g. insurance) that use the state.

## Specification

### Methods

#### isAlive()

Returns if the canary was fed properly to signal e.g. that no warrant was received.

``` js
function isAlive() constant returns (bool alive)
```

#### getBlockOfDeath()

Returns the block the canary died.
Throws if the canary is alive.

``` js
function getBlockOfDeath() constant returns (uint256 block)
```

#### getType()

Returns the type of the canary:

* `1` = Simple (just the pure interface as defined in this ERC)
* `2` = Single feeder (as defined in ERC-TBD)
* `3` = Single feeder with bad food (as defined in ERC-TBD)
* `4` = Multiple feeders (as defined in ERC-TBD)
* `5` = Multiple mandatory feeders (as defined in ERC-TBD)
* `6` = IOT (as defined in ERC-TBD)

`1` might also be used for a special purpose contract that does not need a special type but still wants to expose the functions and provide events as defined in this ERC.

``` js
function getType() constant returns (uint8 type)
```

### Events

#### RIP

MUST trigger when the contract is called the first time after the canary died.

``` js
event RIP()
```

## Implementation

TODO

## Copyright
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).