forked from ethereum/EIPs
-
Notifications
You must be signed in to change notification settings - Fork 0
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
alexvandesande
wants to merge
671
commits into
master
Choose a base branch
from
separate-deployer-from-signer
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Added explicit reference to ethereum#831
ERC-165 Standard Interface Detection
EIP-681: Payment request URL specification
Fixed a typo
Thanks @eordano for bringing this up
Add ERC-165 and ERC-681 to README
* 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
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Preamble
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
anddata
. This EIP proposes adding a new one:from
which, if present, indicates thatdata
is an ethereum transaction containingto
,value
,to
and its owndata
, but the message is signed by the account represented onfrom
.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 themsg.sender
as it would be compatible with current contracts, and a new special variable calledtx.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.