Skip to main content
Bumped by Community user
Bumped by Community user
Bumped by Community user
edited title
Link

Is it legal to include extra arbitrary bytes at the end of the DATA section executing a contract method?

Source Link

Is it legal to include extra arbitrary bytes at the end of the DATA section executing a contract method?

Feel free to refer directly to the yellow paper or other similar baseline documents - I've been reading those documents looking for an answer to my question. I wish there were a "language-lawyer" tag similar to the one on stackoverflow, because I'll only accept an answer that proves conclusively that the answer is "yes", "no", or "unspecified" - I won't accept an answer appealing to your gut feeling.

Solidity contracts appear to operate at a significantly higher level of abstraction than the EVM itself.

For instance, to determine which contract method a transaction executes, the ethereum wiki states:

The first four bytes of the call data for a function call specifies the function to be called.

Going back to the yellow paper to figure out what happens during a message call:

The account’s associated code (identified as the fragment whose Keccak hash is σ[c]_c) is executed according to the execution model.

Now, the associated code is simply the output of the contract creation code. The yellow paper also states:

...the resultant byte sequence from the execution of the initialisation code, specifies the final body code for the newly-created account

So in the yellow paper there is no mention of contracts even having methods, much less of the first 4 bytes of the transaction data specifying which one is to be called. I gather, therefore, that it is Solidity (or another layer above the EVM itself) that outputs contract EVM bytecode that branches based on the first 4 bytes, and this is not a feature of the EVM.

Therefore, this question is probably more related to Solidity than contract execution, and may even have a different answer case-by-case for different smart contracts that are implemented.

That being said, the question is this:


Take a look at this transaction. I created a well-formed call to a smart contract, sending 1 token to an address, however onto the transaction data I concatenated the hex data 0xdeadbeef. I would like to use this as a way to attach application-specific memos.

Given that this works today, is there any reason why it wouldn't work in the future?