From 188f83a283251ffed77c73d298093d2ac96a03bd Mon Sep 17 00:00:00 2001 From: Brooklyn Zelenka Date: Sat, 5 May 2018 13:42:47 -0700 Subject: [PATCH] ESC proposal (#8) --- EIPS/.#eip-status-codes.md | 1 + EIPS/EIP-X-authorisations-nickjohnson.md | 57 ++ EIPS/EIP-X-metadata-nickjohnson.md | 73 +++ EIPS/eip-1/.process.png.icloud | Bin 0 -> 159 bytes EIPS/eip-1066.md | 585 ++++++++++++++++++ EIPS/eip-107/.authorization-locked.png.icloud | Bin 0 -> 174 bytes EIPS/eip-107/.authorization.png.icloud | Bin 0 -> 167 bytes EIPS/eip-858/.calculations.md.icloud | Bin 0 -> 165 bytes EIPS/eip-EIPS/.eip-616.md.icloud | Bin 0 -> 158 bytes ...hange-standard-visual-representation-1.PNG | Bin 0 -> 26668 bytes ...hange-standard-visual-representation-2.PNG | Bin 0 -> 35221 bytes 11 files changed, 716 insertions(+) create mode 120000 EIPS/.#eip-status-codes.md create mode 100644 EIPS/EIP-X-authorisations-nickjohnson.md create mode 100644 EIPS/EIP-X-metadata-nickjohnson.md create mode 100644 EIPS/eip-1/.process.png.icloud create mode 100644 EIPS/eip-1066.md create mode 100644 EIPS/eip-107/.authorization-locked.png.icloud create mode 100644 EIPS/eip-107/.authorization.png.icloud create mode 100644 EIPS/eip-858/.calculations.md.icloud create mode 100644 EIPS/eip-EIPS/.eip-616.md.icloud create mode 100644 EIPS/token-exchange-standard-visual-representation-1.PNG create mode 100644 EIPS/token-exchange-standard-visual-representation-2.PNG diff --git a/EIPS/.#eip-status-codes.md b/EIPS/.#eip-status-codes.md new file mode 120000 index 0000000000000..4ab2ec93858d7 --- /dev/null +++ b/EIPS/.#eip-status-codes.md @@ -0,0 +1 @@ +expede@Latte.local.30400 \ No newline at end of file diff --git a/EIPS/EIP-X-authorisations-nickjohnson.md b/EIPS/EIP-X-authorisations-nickjohnson.md new file mode 100644 index 0000000000000..31e93fb8e0757 --- /dev/null +++ b/EIPS/EIP-X-authorisations-nickjohnson.md @@ -0,0 +1,57 @@ +## Preamble + + EIP: + Title: Generalised authorisations + Author: Nick Johnson + Type: Standard track + Category: ERC + Status: Draft + Created: 2018-03-12 + +## Abstract +This EIP specifies a generic authorisation mechanism, which can be used to implement a variety of authorisation patterns, replacing approvals in ERC20, operators in ERC777, and bespoke authorisation patterns in a variety of other types of contract. + +## Motivation +Smart contracts commonly need to provide an interface that allows a third-party caller to perform actions on behalf of a user. The most common example of this is token authorisations/operators, but other similar situations exist throughout the ecosystem, including for instance authorising operations on ENS domains. Typically each standard reinvents this system for themselves, leading to a large number of incompatible implementations of the same basic pattern. Here, we propose a generic method usable by all such contracts. + +The pattern implemented here is inspired by [ds-auth](https://github.com/dapphub/ds-auth) and by OAuth. + +## Specification +The generalised authorisation interface is implemented as a metadata provider, as specified in EIP-X-metadata-nickjohnson. The following mandatory function is implemented: + +``` +function canCall(address owner, address caller, address callee, bytes4 func) view returns(bool); +``` + +Where: + - `owner` is the owner of the resource. If approved the function call is treated as being made by this address. + - `caller` is the address making the present call. + - `callee` is the address of the contract being called. + - `func` is the 4-byte signature of the function being called. + +For example, suppose Alice authorises Bob to transfer tokens on her behalf. When Bob does so, Alice is the `owner`, Bob is the `caller`, the token contract is the `callee`, and the function signature for the transfer function is `func`. + +As this standard uses EIP-X-metadata-nickjohnson, the authorisation flow is as follows: + + 1. The callee contract fetches the provider for the `owner` address from the metadata registry contract, which resides at a well-known address. + 2. The callee contract calls `canCall()` with the parameters described above. If the function returns false, the callee reverts execution. + +Commonly, providers will wish to supply a standardised interface for users to set and unset their own authorisations. They SHOULD implement the following interface: + +``` +function authoriseCaller(address owner, address caller, address callee, bytes4 func); +function revokeCaller(address owner, address caller, address callee, bytes4 func); +``` + +Arguments have the same meaning as in `canCall`. Implementing contracts MUST ensure that `msg.sender` is authorised to call `authoriseCaller` or `revokeCaller` on behalf of `owner`; this MUST always be true if `owner == msg.sender`. Implementing contracts SHOULD use the standard specified here to determine if other callers may provide authorisations as well. + +Implementing contracts SHOULD treat a `func` of 0 as authorising calls to all functions on `callee`. If `authorised` is `false` and `func` is 0, contracts need only clear any blanket authorisation; individual authorisations may remain in effect. + +## Backwards Compatibility +There are no backwards compatibility concerns. + +## Implementation +Example implementation TBD. + +## Copyright +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/EIPS/EIP-X-metadata-nickjohnson.md b/EIPS/EIP-X-metadata-nickjohnson.md new file mode 100644 index 0000000000000..b0752808f2225 --- /dev/null +++ b/EIPS/EIP-X-metadata-nickjohnson.md @@ -0,0 +1,73 @@ +## Preamble + + EIP: + Title: Address metadata registry + Author: Nick Johnson + Type: Standard track + Category: ERC + Status: Draft + Created: 2018-03-12 + Dependencies: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md + +## Abstract +This EIP specifies a registry for address metadata, permitting both contracts and external accounts to supply metadata about themselves to onchain and offchain callers. This permits use-cases such as generalised authorisations, providing token acceptance settings, and claims registries. + +## Motivation +An increasing set of use cases require storage of metadata associated with an address; see for instance EIP 777 and EIP 780, and the ENS reverse registry in EIP 181. Presently each use-case defines its own specialised registry. To prevent a proliferation of special-purpose registry contracts, we instead propose a single standardised registry using an extendable architecture that allows future standards to implement their own metadata standards. + +## Specification +The metadata registry has the following interface: +``` +interface AddressMetadataRegistry { + function provider(address target) view returns(address); + function setProvider(address _provider); +} +``` + +`setProvider` specifies the metadata registry to be associated with the caller's address, while `provider` returns the address of the metadata registry for the supplied address. + +The metadata registry will be compiled with an agreed-upon version of Solidity and deployed using the trustless deployment mechanism to a fixed address that can be replicated across all chains. + +## Provider specification + +Providers may implement any subset of the metadata record types specified here. Where a record types specification requires a provider to provide multiple functions, the provider MUST implement either all or none of them. Providers MUST throw if called with an unsupported function ID. + +Providers have one mandatory function: + +``` +function supportsInterface(bytes4 interfaceID) constant returns (bool) +``` + +The `supportsInterface` function is documented in [EIP 165](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md), and returns true if the provider implements the interface specified by the provided 4 byte identifier. An interface identifier consists of the XOR of the function signature hashes of the functions provided by that interface; in the degenerate case of single-function interfaces, it is simply equal to the signature hash of that function. If a provider returns `true` for `supportsInterface()`, it must implement the functions specified in that interface. + +`supportsInterface` must always return true for `0x01ffc9a7`, which is the interface ID of `supportsInterface` itself. + +The first argument to all provider functions MUST be the address being queried; this facilitates the creation of multi-user provider contracts. + +Currently standardised provider interfaces are specified in the table below. + +| Interface name | Interface hash | Specification | +| --- | --- | --- | + +EIPs may define new interfaces to be added to this registry. + +## Rationale +There are two obvious approaches for a generic metadata registry: the indirection approach employed here, or a generalised key/value store. While indirection incurs the cost of an additional contract call, and requires providers to change over time, it also provides for significantly enhanced flexibility over a key/value store; for that reason we selected this approach. + +## Backwards Compatibility +There are no backwards compatibility concerns. + +## Implementation +The canonical implementation of the metadata registry is as follows: +``` +contract AddressMetadataRegistry { + mapping(address=>address) public provider; + + function setProvider(address _provider) { + provider[msg.sender] = _provider; + } +} +``` + +## Copyright +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/EIPS/eip-1/.process.png.icloud b/EIPS/eip-1/.process.png.icloud new file mode 100644 index 0000000000000000000000000000000000000000..474604268f1fd8bd3a75f25378e01636852d508d GIT binary patch literal 159 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?5QF=z^mBKfRPbGGq6Kx H7*zoPx3nu1 literal 0 HcmV?d00001 diff --git a/EIPS/eip-1066.md b/EIPS/eip-1066.md new file mode 100644 index 0000000000000..a4e68e858088f --- /dev/null +++ b/EIPS/eip-1066.md @@ -0,0 +1,585 @@ +--- +eip: 1066 +title: Status Codes +author: Brooklyn Zelenka (@expede), Tom Carchrae (@carchrae), Gleb Naumenko (@naumenkogs) +discussions-to: https://ethereum-magicians.org/t/erc-1066-ethereum-status-codes-esc/ +status: Draft +type: Standards Track +category: ERC +created: 2018-05-05 +--- + +## Simple Summary + +Broadly applicable status codes for Ethereum smart contracts. + +## Abstract + +This standard outlines a common set of Ethereum status codes (ESC) in the same +vein as HTTP statuses. This provides a shared set of signals to allow smart contracts +to react to situations autonomously, expose localized error messages to users, and so on. + +The current state of the art is to either `revert` and require human intervention, +or return a Boolean pass/fail status. Status codes are similar-but-orthogonal +to `revert`ing with a reason, but aimed at automation and translation. + +As is the case with HTTP, having a standard set of known codes has many benefits for developers. +They remove friction from needing to develop your own schemes for every contract, +makes inter-contract automation easier, and makes it easier to broadly understand +which of the finite states your request produced. Importantly, it makes it much easier +to distinguish between expected errors states, and truly exceptional conditions +that require halting execution. + +## Motivation + +### Autonomy + +Smart contracts are largely intended to be autonomous. While each contract may +define a specific interface, having a common set of semantic codes can help +developers write code that can react appropriately to various situations. + +### Semantic Density + +HTTP status codes are widely used for this purpose. BEAM languages use atoms +and tagged tuples to signify much the same information. Both provide a lot of +information both to the programmer (debugging for instance), and to the program +that needs to decide what to do next. + +ESCs convey a much richer set of information than Booleans, +and are able to be reacted to autonomously unlike arbitrary strings. + +### User Feedback + +Since status codes are finite and known in advance, we can provide global, +human-readable sets of status messages. These may also be translated into any language, +differing levels of technical detail, added as `revert` messages, natspecs, and so on. + +We also see a desire for this [in transactions](http://eips.ethereum.org/EIPS/eip-658), +and there's no reason that ESCs couldn't be used by the EVM itself. + +### More than Pass/Fail + +While clearly related, status codes are complementary to "revert with reason". +ESCs are not limited to rolling back the transaction, and may represent known error states +without halting execution. They may also represent off-chain conditions, +supply a string to revert, signal time delays, and more. + +## Specification + +### Format + +Codes are returned as the first value of potentially multiple return values. + +```solidity +// Status only + +function isInt(uint num) public pure returns (byte status) { + return hex"01"; +} + +// Status and value + +uint8 private counter; + +function safeIncrement(uint8 interval) public returns (byte status, uint8 newCounter) { + uint8 updated = counter + interval; + + if (updated >= counter) { + counter = updated; + return (hex"01", updated); + } else { + return (hex"00", counter); + } +} +``` + +In the rare case that there a multiple codes required to express an idea, +they should be organized in asending order. + +### Code Table + +Codes break nicely into a 16x16 matrix, represented as a 2-digit hex number. +The high nibble represents the code's kind or "category", and the low nibble contains +the state or "reason". We present them below as separate tables per range for +explanitory and layout reasons. + +Unspecified codes are _not_ free for arbitrary use, but rather open for further specification. + +#### Generic + +General codes. These double as bare "reasons", since `0x01 == 1`. + +| Code | Description | +|-----------------|:------------------------| +| `0x00` | Failure | +| `0x01` | Success | +| `0x02` | Accepted / Started | +| `0x03` | Awaiting / Before | +| `0x04` | Action Required | +| `0x05` | Expired | +| `0x06` | | +| `0x07` | | +| `0x08` | | +| `0x09` | | +| `0x0A` | | +| `0x0B` | | +| `0x0C` | | +| `0x0D` | | +| `0x0E` | | +| `0x0F` | Meta or Info Only | + +#### Permission + +Related to permisson, authorization, approval, and so on. + +| Code | Description | +|-----------------|:-------------------------| +| `0x10` | Disallowed | +| `0x11` | Allowed | +| `0x12` | Requested Permission | +| `0x13` | Awaiting Permission | +| `0x14` | Awaiting Your Permission | +| `0x15` | No Longer Allowed | +| `0x16` | | +| `0x17` | | +| `0x18` | | +| `0x19` | | +| `0x1A` | | +| `0x1B` | | +| `0x1C` | | +| `0x1D` | | +| `0x1E` | | +| `0x1F` | Permission Meta or Info | + +#### Find, Match, &c + +This range is broadly intended for finding and matching. +Data lookups and order matching are two common use cases. + +| Code | Description | +|-----------------|:-------------------------| +| `0x20` | Not Found | +| `0x21` | Found | +| `0x22` | Match Request Sent | +| `0x23` | Awaiting Match | +| `0x24` | Match Request Received | +| `0x25` | Out of Range | +| `0x26` | | +| `0x27` | | +| `0x28` | | +| `0x29` | | +| `0x2A` | | +| `0x2B` | | +| `0x2C` | | +| `0x2D` | | +| `0x2E` | | +| `0x2F` | Matching Meta or Info | + +#### Negotiation, Terms, and Offers + +Negotiation, and very broadly the flow of such transactions. +Note that "other party" may be more than one actor (not nessesarily the sender). + +| Code | Description | +|-----------------|:----------------------------| +| `0x30` | Other Party Disagreed | +| `0x31` | Other Party Agreed | +| `0x32` | Sent Offer | +| `0x33` | Awaiting Their Ratification | +| `0x34` | Awaiting Your Ratification | +| `0x35` | Offer Expired | +| `0x36` | | +| `0x37` | | +| `0x38` | | +| `0x39` | | +| `0x3A` | | +| `0x3B` | | +| `0x3C` | | +| `0x3D` | | +| `0x3E` | | +| `0x3F` | Negotiation Meta or Info | + +#### Availability + +Service or action availability. + +| Code | Description | +|-----------------|:----------------------------| +| `0x40` | Unavailable | +| `0x41` | Available | +| `0x42` | You May Begin | +| `0x43` | Not Yet Available | +| `0x44` | Awaiting Your Availability | +| `0x45` | No Longer Available | +| `0x46` | | +| `0x47` | | +| `0x48` | | +| `0x49` | | +| `0x4A` | | +| `0x4B` | | +| `0x4C` | | +| `0x4D` | | +| `0x4E` | | +| `0x4F` | Availability Meta or Info | + +#### `0x5_` TBD + +Currently unspecified + +#### `0x6_` TBD + +Currently unspecified + +#### `0x7_` TBD + +Currently unspecified + +#### `0x8_` TBD + +Currently unspecified + +#### `0x9_` TBD + +Currently unspecified + +#### Application-Specific Codes + +Contracts may have special states that they need to signal. +This proposal only outlines the broadest meanings, but implementers may have very +specific meanings for each, as long as they are coherent with the broader definition. + +| Code | Description | +|-----------------|:--------------------------------| +| `0xA0` | App-Specific Failure | +| `0xA1` | App-Specific Success | +| `0xA2` | App-Specific Acceptance / Start | +| `0xA3` | App-Specific Awaiting / Before | +| `0xA4` | App-Specific Action Required | +| `0xA5` | App-Specific Expiry | +| `0xA6` | | +| `0xA7` | | +| `0xA8` | | +| `0xA9` | | +| `0xAA` | | +| `0xAB` | | +| `0xAC` | | +| `0xAD` | | +| `0xAE` | | +| `0xAF` | App-Specific Meta or Info | + +#### `0xB_` TBD + +Currently unspecified + +#### `0xC_` TBD + +Currently unspecified + +#### `0xD_` TBD + +Currently unspecified + +#### Cryptography and Authentication + +Actions around signatures, cryptography, signing, and application-level authentication. + +The meta code `0xEF` is often used to signal a payload descibing the algorithm +or process used. + +| Code | Description | +|-----------------|:----------------------------| +| `0xE0` | Decrypt Failure | +| `0xE1` | Decrypt Success | +| `0xE2` | Signed | +| `0xE3` | Their Signature Required | +| `0xE4` | Your Signature Required | +| `0xE5` | Auth Expired | +| `0xE6` | | +| `0xE7` | | +| `0xE8` | | +| `0xE9` | | +| `0xEA` | | +| `0xEB` | | +| `0xEC` | | +| `0xED` | | +| `0xEE` | | +| `0xEF` | Crypto Info or Meta | + +#### `0xF0` Off-Chain + +For off-chain actions. Much like th `0x0_: Generic` range, `0xF_` is very general, +and does little to modify the reason. + +Among other things, the meta code `0xFF` may be used to describe what the off-chain process is. + +| Code | Description | +|-----------------|:------------------------------| +| `0xF0` | Off-Chain Failure | +| `0xF1` | Off-Chain Success | +| `0xF2` | Off-Chain Process Stared | +| `0xF3` | Awaiting Off-Chain Completion | +| `0xF4` | Off-Chain Action Required | +| `0xF5` | Off-Chain Service Unavailable | +| `0xF6` | | +| `0xF7` | | +| `0xF8` | | +| `0xF9` | | +| `0xFA` | | +| `0xFB` | | +| `0xFC` | | +| `0xFD` | | +| `0xFE` | | +| `0xFF` | Off-Chain Info or Meta | + +### Example Function Change + +```solidity +uint256 private startTime; +mapping(address => uint) private counters; + +// Before +function increase() public returns (bool _available) { + if (now < startTime && counters[msg.sender] == 0) { + return false; + }; + + counters[msg.sender] += 1; + return true; +} + +// After +function increase() public returns (byte _status) { + if (now < start) { return hex"43"; } // Not yet available + if (counters[msg.sender] == 0) { return hex"10"; } // Not authorized + + counters[msg.sender] += 1; + return hex"01"; // Success +} +``` + +### Example Sequence Diagrams + +``` +0x03 = Waiting +0x31 = Other Party (ie: not you) Agreed +0x41 = Available +0x43 = Not Yet Available + + + Exchange + + +AwesomeCoin DEX TraderBot + + + + + | | buy(AwesomeCoin) | + | | <------------------------+ + | buy() | | + | <---------------------+ | + | | | + | Status [0x43] | | + +---------------------> | Status [0x43] | + | +------------------------> | + | | | + | | isDoneYet() | + | | <------------------------+ + | | | + | | Status [0x43] | + | +------------------------> | + | | | + | | | + | Status [0x41] | | + +---------------------> | | + | | | + | buy() | | + | <---------------------+ | + | | | + | | | + | Status [0x31] | | + +---------------------> | Status [0x31] | + | +------------------------> | + | | | + | | | + | | | + | | | + + + + +``` + + + +``` +0x01 = Generic Success +0x10 = Disallowed +0x11 = Allowed + + Token Validation + + + Buyer RegulatedToken TokenValidator IDChecker SpendLimiter + + + + + + + | buy() | | | | + +------------------------> | check() | | | + | +-----------------------> | check() | | + | | +-----------------------> | | + | | | | | + | | | Status [0x10] | | + | | Status [0x10] | <-----------------------+ | + | revert() | <-----------------------+ | | + | <------------------------+ | | | + | | | | | ++---------------------------+ | | | | +| | | | | | +| Updates ID with provider | | | | | +| | | | | | ++---------------------------+ | | | | + | | | | | + | buy() | | | | + +------------------------> | check() | | | + | +-----------------------> | check() | | + | | +-----------------------> | | + | | | | | + | | | Status [0x11] | | + | | | <-----------------------+ | + | | | | | + | | | | check() | + | | +-------------------------------------------> | + | | | | | + | | | | Status [0x11] | + | | Status [0x11] | <-------------------------------------------+ + | Status [0x01] | <-----------------------+ | | + | <------------------------+ | | | + | | | | | + | | | | | + | | | | | + + + + + + +``` + +## Rationale + +### Encoding + +ESCs are encoded as a `byte`. Hex values break nicely into high and low nibbles: +`category` and `reason`. For instance, `hex"01"` stands for general success +and `hex"00"` for general failure. + +`byte` is quite lightweight, and can be easily packed with multiple codes into +a `bytes32` (or similar) if desired. It is also easily interoperable with `uint8`, +cast from `enum`s, and so on. + +#### Alternatives + +Alternate schemes include `bytes32` and `uint8`. While these work reasonably +well, they have drawbacks. + +`uint8` feels even more similar to HTTP status codes, and enums don't require +as much casting. However does not break as evenly as a square table +(256 doesn't look as nice in base 10). + +Packing multiple codes into a single `bytes32` is nice in theory, but poses additional +challenges. Unused space may be interpeted as `0x00 Failure`, you can only efficiently +pack four codes at once, and there is a challenge in ensuring that code combinations +are sensible. Forcing four codes into a packed representation encourages multiple +status codes to be returned, which is often more information than strictly nessesary. +This can lead to paradoxical results (ex `0x00` and `0x01` together), +or greater resorces allocated to interpreting 2564 (4.3 billion) permutations. + +### Multiple Returns + +While there may be cases where packing a byte array of ESCs may make sense, the simplest, +most forwards-compatible method of transmission is as the first value of a multiple return. + +Familiarity is also a motivating factor. A consistent position and encoding together +follow the principle of least surprise. It is both viewable as a "header" in the HTTP analogy, +or like the "tag" in BEAM tagged tupples. + +### Human Readable + +Developers should not be required to memorize 256 codes. However, they break nicely into a table. +Cognitive load is lowered by organizing the table into categories and reasons. +`0x10` and `0x11` belong to the same category, and `0x04` shares a reason with `0x24` + +While this repository includes helper enums, we have found working directly in +the hex values to be quite natural. ESC `0x10` is just as comfortable as HTTP 401, for example. + +### Extensiblilty + +The `0xA` category is reserved for application-specific statuses. +In the case that 256 codes become insufficient, `bytes1` may be embedded in larger byte arrays. + +### EVM Codes + +The EVM also returns a status code in transactions; specifically `0x00` and `0x01`. +This proposal both matches the meanings of those two codes, and could later be used +at the EVM level. + +### Empty Space + +Much like how HTTP status codes have large unused ranges, there are totally empty +sections in this proposal. The intent is to not impose a complete set of codes up front, +and to allow users to suggest uses for these spaces as time progresses. + +### Nibble Order + +Nibble order makes no difference to the machine, and is purely mnemonic. +This design was originally in opposite order, but changed it for a few convenience factors. +Since it's a different scheme from HTTP, it may feel strange initially, +but becomes very natural after a couple hours of use. + +#### Short Forms + +Generic is `0x0_`, general codes are consistent with their integer representations + +```solidity +hex"1" == hex"01" == 1 // with casting +``` + +#### Contract Categories + +Many applications will always be part of the same category. +For instance, validation will generally be in the `0x10` range. + +```solidity +contract Whitelist { + mapping(address => bool) private whitelist; + uint256 private deadline; + byte constant private prefix = hex"10"; + + check(address _, address _user) returns (byte _status) { + if (now >= deadline) { return prefix | 5; } + if (whitelist[_user]) { return prefix | 1; } + return prefix; + } +} +``` + +#### Helpers + +This above also means that working with app-specific enums is slightly easier: + +```solidity +enum Sleep { + Awake, + Asleep, + REM, + FallingAsleep +} + +// From the helper library + +function appCode(Sleep _state) returns (byte code) { + return byte(160 + _state); // 160 = 0xA0 +} + +// Versus + +function appCode(Sleep _state) returns (byte code) { + return byte((16 * _state) + 10); // 10 = 0xA +} +``` + +## Implementation + +Reference cases and helper library can be found [here](https://github.com/Finhaven/EthereumStatusCodes) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/EIPS/eip-107/.authorization-locked.png.icloud b/EIPS/eip-107/.authorization-locked.png.icloud new file mode 100644 index 0000000000000000000000000000000000000000..33dda5c43ca3b2922c4dd95ed9947d9991abf32c GIT binary patch literal 174 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?70##L|+C{G!aN#FEVXJl&l9G7a{5-vaymUeTt?>dfSak%YrkCa<7IE;)=zGN_GJpXi NBZOvPhte>r0RWJUE?xit literal 0 HcmV?d00001 diff --git a/EIPS/eip-858/.calculations.md.icloud b/EIPS/eip-858/.calculations.md.icloud new file mode 100644 index 0000000000000000000000000000000000000000..61fbc653d21d7f228acb260cd7d92074837013ed GIT binary patch literal 165 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?4zf{^Z1*#4~^aBO`=n KV29E$sty3}H!TVP literal 0 HcmV?d00001 diff --git a/EIPS/eip-EIPS/.eip-616.md.icloud b/EIPS/eip-EIPS/.eip-616.md.icloud new file mode 100644 index 0000000000000000000000000000000000000000..d32046ec0a817237cc890b63cfb862d54001bea8 GIT binary patch literal 158 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 S3-g?>X>|6|Z&-bY$o~LC8lmn0 literal 0 HcmV?d00001 diff --git a/EIPS/token-exchange-standard-visual-representation-2.PNG b/EIPS/token-exchange-standard-visual-representation-2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bfaa387e5d5007868134cb5faebc8f4324d8cd1d GIT binary patch literal 35221 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

^6=qBv(=s*7CY!TY5w2cqt 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 RU0LH@y<~h5eZel|{{S`nRAK-C literal 0 HcmV?d00001