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

Add eth_getCode support for getting address bytecode #17215

Merged
merged 1 commit into from
Feb 16, 2023
Merged

Conversation

bbondy
Copy link
Member

@bbondy bbondy commented Feb 14, 2023

Resolves brave/brave-browser#28518

This is intended to be used to check if an address is an EOA or a contract

You can query

const apiProxy = getWalletPanelApiProxy()
const jsonRpcService = apiProxy.jsonRpcService
console.log('BAT rpc service get code: ', await jsonRpcService.getCode('0x0d8775f648430679a709e98d2b0cb6250d2887ef', BraveWallet.CoinType.ETH, '0x1'))
console.log('EOA rpc service get code: ', await jsonRpcService.getCode('0x...', BraveWallet.CoinType.ETH, '0x1'))

This would output the bytecode in hex format for the BAT price and the string 0x for the EOA address.

Submitter Checklist:

  • I confirm that no security/privacy review is needed, or that I have requested one
  • There is a ticket for my issue
  • Used Github auto-closing keywords in the PR description above
  • Wrote a good PR/commit description
  • Squashed any review feedback or "fixup" commits before merge, so that history is a record of what happened in the repo, not your PR
  • Added appropriate labels (QA/Yes or QA/No; release-notes/include or release-notes/exclude; OS/...) to the associated issue
  • Checked the PR locally:
    • npm run test -- brave_browser_tests, npm run test -- brave_unit_tests wiki
    • npm run lint, npm run presubmit wiki, npm run gn_check, npm run tslint
  • Ran git rebase master (if needed)

Reviewer Checklist:

  • A security review is not needed, or a link to one is included in the PR description
  • New files have MPL-2.0 license header
  • Adequate test coverage exists to prevent regressions
  • Major classes, functions and non-trivial code blocks are well-commented
  • Changes in component dependencies are properly reflected in gn
  • Code follows the style guide
  • Test plan is specified in PR before merging

After-merge Checklist:

Test Plan:

@bbondy bbondy self-assigned this Feb 14, 2023
@bbondy bbondy requested a review from a team as a code owner February 14, 2023 21:16
"eth_getCode", "", MakeJsonRpcErrorResponse(-32005, "Error!"));
result = GetCode("0x0d8775f648430679a709e98d2b0cb6250d2887ef",
mojom::CoinType::ETH, mojom::kMainnetChainId);
EXPECT_FALSE(result);
Copy link
Member

Choose a reason for hiding this comment

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

please also check error and error_message when it is absl::nullopt

Copy link
Member Author

Choose a reason for hiding this comment

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

Thanks for the quick review. I amended a change to follow a pattern in that file of passing in the expected values.
18b7d0950425c995900c66e478012f0d7713af97

Copy link
Member

@darkdh darkdh left a comment

Choose a reason for hiding this comment

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

++

Copy link
Member

@kdenhartog kdenhartog left a comment

Choose a reason for hiding this comment

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

gave a look through the parsing logic here and seems good to me from a security perspective

This is intended to be used to check if an address is an EOA or a contract

You can query
>  const apiProxy = getWalletPanelApiProxy()
>  const jsonRpcService = apiProxy.jsonRpcService
>  console.log('BAT rpc service get code: ', await jsonRpcService.getCode('0x0d8775f648430679a709e98d2b0cb6250d2887ef', BraveWallet.CoinType.ETH, '0x1'))
>  console.log('EOA rpc service get code: ', await jsonRpcService.getCode('0x...', BraveWallet.CoinType.ETH, '0x1'))

This would output the bytecode in hex format for the BAT price and the
string 0x for the EOA address.
@bbondy bbondy merged commit cb5521e into master Feb 16, 2023
@bbondy bbondy deleted the eth_getCode branch February 16, 2023 20:09
@bbondy bbondy added this to the 1.50.x - Nightly milestone Feb 16, 2023
Douglashdaniel pushed a commit that referenced this pull request Mar 1, 2023
This is intended to be used to check if an address is an EOA or a contract

You can query
```js
const apiProxy = getWalletPanelApiProxy()
const jsonRpcService = apiProxy.jsonRpcService
console.log('BAT rpc service get code: ', await jsonRpcService.getCode('0x0d8775f648430679a709e98d2b0cb6250d2887ef', BraveWallet.CoinType.ETH, '0x1'))
console.log('EOA rpc service get code: ', await jsonRpcService.getCode('0x...', BraveWallet.CoinType.ETH, '0x1'))
```

This would output the bytecode in hex format for the BAT price and the
string 0x for the EOA address.
kjozwiak pushed a commit that referenced this pull request Mar 2, 2023
…17426)

* Add eth_getCode support for getting address bytecode (#17215)

This is intended to be used to check if an address is an EOA or a contract

You can query
```js
const apiProxy = getWalletPanelApiProxy()
const jsonRpcService = apiProxy.jsonRpcService
console.log('BAT rpc service get code: ', await jsonRpcService.getCode('0x0d8775f648430679a709e98d2b0cb6250d2887ef', BraveWallet.CoinType.ETH, '0x1'))
console.log('EOA rpc service get code: ', await jsonRpcService.getCode('0x...', BraveWallet.CoinType.ETH, '0x1'))
```

This would output the bytecode in hex format for the BAT price and the
string 0x for the EOA address.

* Merge pull request #17333 from brave/view-contract-in-transaction-panel

fix(wallet): View Contract in Transaction Panel

---------

Co-authored-by: Brian R. Bondy <[email protected]>
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.

Add an API to determine if an address has associated bytecode
3 participants