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

cpp: Extend API for creating results #333

Merged
merged 8 commits into from
Aug 6, 2019
Merged

cpp: Extend API for creating results #333

merged 8 commits into from
Aug 6, 2019

Conversation

chfast
Copy link
Collaborator

@chfast chfast commented Jun 26, 2019

Closes #258.

Usage check:

@chfast chfast added this to In progress in v6.3 Jun 26, 2019
@chfast chfast force-pushed the cpp_result branch 2 times, most recently from fd7fffb to 42c8d26 Compare June 28, 2019 10:07
{
if (output_size != 0)
{
auto mem = static_cast<uint8_t*>(std::malloc(output_size));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Apparently this can return nullptr. Why not use new and delete here instead?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not practical. I want to keep VM implementation low profile and require only C standard library if possible.

But good point raised. How about converting it to EVMC_INTERNAL_ERROR?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about converting it to EVMC_INTERNAL_ERROR?

I think that's a bad idea, because it masks what's going on. The caller would think the called contract failed.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure what do you mean by a caller here but in any case it should not take EVMC internal errors as indicators for contract execution failures.

I believe we only have 2 options here: ignore it or report it as an internal error.

@chfast chfast force-pushed the cpp_result branch 2 times, most recently from d55ce64 to 7184dd4 Compare July 4, 2019 10:19
@chfast chfast requested a review from axic July 4, 2019 10:20
@chfast chfast marked this pull request as ready for review July 15, 2019 10:30
@chfast chfast requested a review from gumb0 July 15, 2019 10:30
include/evmc/evmc.hpp Outdated Show resolved Hide resolved
v6.3 automation moved this from In progress to Reviewer approved Jul 16, 2019

if (!buffer)
{
result.status_code = EVMC_OUT_OF_MEMORY;
Copy link
Member

@axic axic Jul 16, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still not convinced this it the right way to do it, given it confuses status of the execution vs. helpers, but if OOM is hit there is a bigger underlying issue. Perhaps worth highlighting this in the description above?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but if OOM is hit there is a bigger underlying issue

What?

I don't thing this is the best way of passing output buffer. This will rather be only useful for Go, so we can drop this PR.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but if OOM is hit there is a bigger underlying issue

What?

OOM = out of memory

Basically I'm ok with this change given this new specific error code is introduced.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I had issue with understanding the sentence after "OOM". The OOM itself is difficult to handle in general. E.g. it will never happen on Linux in practice as it will happily try to allocate 2 TB of memory and in the end kill the process.

Anyway, the new specific error code was introduced: https://github.com/ethereum/evmc/pull/333/files#diff-8e9caa43721b131d9f7897e2bfd98299R309.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I know, that's the line I commented on. Just having this documented on make_result would be useful.

@chfast
Copy link
Collaborator Author

chfast commented Aug 6, 2019

I used this in Go: Host.Call().

@chfast chfast force-pushed the cpp_result branch 2 times, most recently from d64965c to 2d5cb58 Compare August 6, 2019 09:36
@chfast chfast requested a review from gumb0 August 6, 2019 09:36
include/evmc/evmc.hpp Outdated Show resolved Hide resolved
This moves the evmc_result construction logic from evmc::result() constructor to helper.h. This function is now exposed as a C helper, C++ evmc::make_result() helper and used in the evmc::result() constructor.
This is convenient for VM implementations which need to construct C evmc_result, not C++ evmc::result.
@chfast
Copy link
Collaborator Author

chfast commented Aug 6, 2019

All fixed.

@chfast chfast merged commit 2a28a83 into master Aug 6, 2019
v6.3 automation moved this from Reviewer approved to Done Aug 6, 2019
@chfast chfast deleted the cpp_result branch August 6, 2019 12:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
No open projects
v6.3
  
Done
Development

Successfully merging this pull request may close these issues.

Improve C++ API for result creation
3 participants