Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Separate transaction signer from transaction deployer #1

Open
wants to merge 671 commits into
base: master
Choose a base branch
from

Conversation

alexvandesande
Copy link
Owner

Preamble

EIP: <to be assigned>
Title: Separating transaction signer from transaction deployer
Author: Alex Van de Sande
Type: ERC
Status: Draft
Created: 2018-02-09

Simple Summary

Many contract developers run in the problem of allowing users to interact with their contracts without having ether. This has been addressed by proposed account abstractions which would bring a lot of new features but also brings a lot of complexity. The latest proposed version by Vitalik, while still brings many benefits like quantum resistance, would still not, for example, to pay token transactions with the token themselves, an often requested feature.

This EIP proposes a simple way that enables this by simply separating the transaction signer (the person or entity authorizing the transaction) from the transacion deployer (the person or entity publishing that transaction to the chain and paying its gas). It is not meant to replace account abstraction and the other benefits it might bring.

Abstract

Currently, ethereum transactions have the following fields: nonce, gasPrice, gasLimit, value, to and data. This EIP proposes adding a new one: from which, if present, indicates that data is an ethereum transaction containing to, value, to and its own data, but the message is signed by the account represented on from.

Block validators/miners should check the validity of the signature, and proceed to treat the transaction in sense as if it was being made by the from account except that in the end, the gas costs (with an added extra cost for the work of checking the validity of the signature) is deduced from the account of the account deploying the transaction to the chain.

In higher level languages like solidity, from(if present) would be the msg.sender as it would be compatible with current contracts, and a new special variable called tx.sender could be added to represent the deployer of the transaction (if the code wanted to create incentives).

Motivation

Using signed messages instead of transactions as means to interact with contracts is an emergint pattern in the space and this is a paving the cow paths EIP. Aragon is implementing it on their organizations, some token standard improvements have been extended to it. But it requires functions to be specifically made to support them, it doubles the amount of code required and this EIP proposes to make it a standard transaction format.

Alternatively this could be also done without a hard fork by adding support for these on solidity, by adding a function property that on compilation creates a second set of functions that accept signed messages.

Backwards Compatibility

Any transaction that does not have the from field is treated as it was before.

Usage examples

Notice that the cost of ether is paid by the transaction deployer at no gains, so each contract would have to work out their own incentivization mechanism, in or off chain. Some usage examples would include:

  • A game company creates games with a traditional monthly subscription, either by credit card or platform specific microtransactions. Private keys never leave the device and keep no ether and only the public accounts are sent to the company. The game then signs transactions on the device, sends them to the game company which checks who is an active subscriber and batches all transactions and pays the ether themselves. If the company goes bankrupt, the gamers themselves can either add ether to their accounts and keep playing, or set up a similar system themselves. End result is a ethereum based game in which gamers can play by spending apple, google or xbox credits.

  • A standard token is created that for every transaction, gives an optional x% of the tokens being transferred to the deployer of the transaction. A wallet is created that signs messages and send them via whisper to the network, where other nodes can compete to download the available transactions, check the current gas price, and select those who are paying enough tokens to cover the cost. The result is a token that the end users never need to keep any ether and can pay fees in the token itself.

  • An DAO is created with a list of accounts of their employees. Employees never need to own ether, instead they sign messages, send them to whisper to a decentralized list of relayers which then deploy the transactions. The DAO contract then checks if the transaction is valid and sends a bit of ether to the deployers, based on some internal metric on the rank of the employee or the time it took for the transaction to be relayed. The result is that the users of the DAO don't need to keep ether, and the contract ends up paying for it's own gas usage.

The benefits are obvious: a long list of new things are possible by leaving incentivization layer to the contract.

nagydani and others added 30 commits February 19, 2018 12:07
ERC-165 Standard Interface Detection
EIP-681: Payment request URL specification
alexvansande and others added 30 commits April 24, 2018 21:28
* Create EIP-X-on-chain-issuance-control.md

* Update and rename EIP-X-on-chain-issuance-control.md to EIP-1000-on-chain-issuance-control.md

* Update and rename EIP-1000-on-chain-issuance-control.md to EIP-1015-on-chain-issuance-control.md

* Rename EIP-1015-on-chain-issuance-control.md to EIP-1015.md

* Rename EIP-1015.md to eip-1015.md
Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing draft EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing
Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing draft EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing
Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing draft EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing
Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing draft EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing
Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing draft EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing
Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing draft EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing
Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing draft EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing
* epi drafted

* minor changes made

* minor changes made

* changes to sender interface and added diagrams

* added diagrams in the markdown

* updated the diagrams

* update the headers

* made changes suggested by @Arachnid
This change makes information in ENR compatible with the existing
discovery protocol:

- The default identity scheme is now called "v4" to make the name shorter.
- Node addresses are derived as the hash of the uncompressed public key.
- The "ip4" and "ip6" keys are merged into a single "ip" key which
  can hold a IPv4 or IPv6 address.
- The "discv5" key is now called "udp".
- The new "tcp" key holds the TCP port.
* Update and rename EIP-X-authorisations-nickjohnson.md to eip-927.md

* Update and rename EIP-X-metadata-nickjohnson.md to eip-926.md

* Update eip-927.md
* added ERC725 draft

* renamed ERC 725 file

* remove author email

* fixed link

* renamed file
* Create eip-x-overflow.md

* Update and rename eip-x-overflow.md to eip-1051.md

* Update eip-1051.md
The new pages update has broken this.
* Create eip-x-codehash.md

* Update and rename eip-x-codehash.md to eip-1052.md
Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing draft EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing
Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing draft EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing
Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing draft EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing
Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing draft EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing
* Add initial EIP skeleton

* Initial take through "Rationale"

* First very rough draft of ERC20 Metadata Extension

Nearly ready for comments by Matt, Matt, and John

* Initial "Token Metadata Standard" Proposal + small change to ERC721

- Added initial “Token Metadata JSON Schema”
- Re-named “ERC721 Metadata JSON Schema” to “Token Metadata JSON
Schema” in the ERC721 EIP

* ERC20 Metadata Extension ready to read

* Update Title of ERC Metadata Extension

* Fixing Matt's Github handle

Apparently Github handles for authors are meant to be “accurate” - who
knew?

* update grammatical errors; properly format JSON to remove excess commas

* update JSON descriptions & make grammatical changes to EIP

* Changed language in Token Metadata JSON Schema to reflect use by tokens which are not NFT's. Added clarification for backwards compatibility

* update authors and contact email

* Author Fix

* Removing Token Metadata Standard

This Branch will be just the ERC20 Token Metadata Extension

* Updates from reviewer comments

- Some grammar fixes
- Removed mentions of ERC721 standard code
- Added EIP # and discussion forum

* Fixing discussion-to

discussion-to instead of discussion-forum

* Should remove the change to 721

* 100% revert on ERC721

No changes to ERC721 in this PR now

* Discussions-to
* Add initial EIP skeleton

* Initial take through "Rationale"

* First very rough draft of ERC20 Metadata Extension

Nearly ready for comments by Matt, Matt, and John

* Initial "Token Metadata Standard" Proposal + small change to ERC721

- Added initial “Token Metadata JSON Schema”
- Re-named “ERC721 Metadata JSON Schema” to “Token Metadata JSON
Schema” in the ERC721 EIP

* ERC20 Metadata Extension ready to read

* Update Title of ERC Metadata Extension

* Fixing Matt's Github handle

Apparently Github handles for authors are meant to be “accurate” - who
knew?

* update grammatical errors; properly format JSON to remove excess commas

* update JSON descriptions & make grammatical changes to EIP

* Changed language in Token Metadata JSON Schema to reflect use by tokens which are not NFT's. Added clarification for backwards compatibility

* update authors and contact email

* Author Fix

* Removing ERC20 Metadata Extension

This branch is going to be just the Token Metadata Standard

* Removing change to 721 and renaming to 1047

* Full ERC721 revert

No changes to ERC721 in this PR
…m#1062)

* Formalize IPFS hash into ENS(Ethereum Name Service) resolver

* Update and rename eip-X.md to eip-1062.md

* Remove superfluous space after 'category'

* Update the URL for discussion

* Fix typos

* Fix typo

* Update Specification, Rationale and Test Cases

* Store multihash value in bytes
* epi drafted

* minor changes made

* minor changes made

* changes to sender interface and added diagrams

* added diagrams in the markdown

* updated the diagrams

* update the headers

* made changes suggested by @Arachnid

* added png to assets folder
* Create eip-progpow.md

proposal for a programmatic proof-of-work algorithm that is tuned for commodity hardware to minimize optimizations available for specialized ASICs

* added Discussion-To:

link added https://ethereum-magicians.org/t/eip-progpow-a-programmatic-proof-of-work/272

* Correct formatting in eip-progpow.md

Fix header to match eip-X.md

* Change git username to email in eip-progpow.md

* Rename eip-progpow.md to eip-1057.md

* Update eip-1057.md
Cleaned up presentation code and added adjustment interval getter to base interface
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.