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

Andrew7234/contract accounts #428

Merged
merged 1 commit into from
Jun 7, 2023
Merged

Conversation

Andrew7234
Copy link
Collaborator

@Andrew7234 Andrew7234 commented May 25, 2023

Task

The indexer does not differentiate between "normal" accounts and accounts that represent a smart contract in EVM. For thet latter, we could expose an additional (structured) field in the API, with information like

  • creator tx (implies creator account, time etc)
  • bytecode
  • verification status

Side task: We promise to show the address of the newly-created contract in our openapi docs promise as the to field: https://github.com/oasisprotocol/oasis-indexer/blob/46e5f0e8f65b414d7e6ce0b2037b223a91097540/api/spec/v1.yaml#L2082-L2082. Populate it. (Note: Maybe Peter Us will do it; coordinate)

Implementation: A possible approach is to expand/reuse the evm_tokens DB table (which currently contains metadata about contracts that look like ERC-XX tokens) into a more general evm_contracts table, with the above additional columns. Or else (preferred; discussed between Mitja and Peter Us) we leave evm_tokens focused on token-like metadata, and split off the remaining contract metadata into a new table.

This PR

This PR solves part of the task, by adding the basic structure for contract account information when a runtime account address happens to also represent a smart contract.

Several fields; notably bytecode, abi, and verified are left empty or default to false currently. These fields will be populated by the evm tokens/contract analyzer in a future PR.

Testing:

Ran for ~2k blocks; successfully tested that contract accounts on both emerald and sapphire behave as expected:

curl "localhost:8008/v1/sapphire/accounts/oasis1qqhpkh73hpf5k5la7rvhvt6u8j5yak9qsc0ywt0j" | jq                                                                 andrewlow@Valinor
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1911  100  1911    0     0   169k      0 --:--:-- --:--:-- --:--:--  169k
{
  "address": "oasis1qqhpkh73hpf5k5la7rvhvt6u8j5yak9qsc0ywt0j",
  "address_preimage": {
    "address_data": "bo6eDbyk70pl68vkAy58Km+3xiM=",
    "context": "oasis-runtime-sdk/address: secp256k1eth",
    "context_version": 0
  },
  "balances": [],
  "evm_balances": [],
  "evm_contract": {
    "creation_bytecode": "omRib2R5o2Jwa1gg1D/duX4qsa76ocDBfl+pNrbwIgYONvnl1fNxtaifn2tkZGF0YVkEA2tM1udiXx/DNiEEcwhYyinuQc1P2U99FotPw3vIYDiXyQiD+HOHRzVVZ2at7Fsr8QfmSeLctDMVFij+BmJ/XHBpDTC4g0hIa+oxrSJgCL9sTGZUmu6MGbzI/4UFAZ9HgWgsS+MNJrrNEmi70gjJds2wWesXpPIai6XgepiKRjb3hgPmvBrElmEgUWbHnzQKoqrDaf+mFumtRjcUh3bYavhhEG4TXO/1DAyNlnFtqBUpZHHMyA9tEAImqEmFsjf0WvnrOfv5s68nMJiAeDcJ2kZQ/pRv+FwCbREJrI3b6fqjQ0Kin5MNutZOf4ljpEcK1sFRmFt1qcs3OEqtq2pfOkZ7ERN4PlcJ79YTIgsCKKl6BzcnC4hnH/jM3hxqGX20vVDyXeV8HsHqb6pOq7YpMNeMawghTwk+zgmt4VSNjuiciwOW2F44I1y+pEhOACDMjq7IPOc6IHNU2FbLXKlZsoN1NUaXbibm+L0/oPnKjjExgB8Kh0BEzinZhxymjmo21aplRwhOx8YKWrAdnttT0LVU7mYFzmBswJXm+dSDcGhQw91CGOyCJn+8ZS1tNow43Q66LpWrODglMgjHB0B/Jxh+pPPBqsFqUs0VjsnF1u4bx852k+NOcALe5Gkv1oK1x8DhwpGdsILHDH04Wz5ZAQh5EyVuCkKs8OT26Grez2L+ae8q9/6LqB4roFu/7ZeA68fV2+2NubsKP/VXIPwwabcsJ9895fX3nKFzEB32tbAOV2EG9BDAJzot34SQW7DcxgPUD5GvQ7cuyDAhKB4O4HXfY+qHrAQHpWIHzkUK7iC0jyyLsBESa59iLs3Wz2Ozsuv9YD+B9J6GAvqWgWQpKPtx8VZySFgVm7cHXHnPs9vyNfuDGAkiZTJJyrT5h4VZf91AzcMPByIvP/aUY5pJoSYxCJPrpToUQ6aHPMPBEJtq84o1j83r1MKs9jRA05LgwWl5FHAqG2SAAT9drJfUdPODAAKQrjUE3aqtC91i1abUN69J0Xe9K7Q+uIfMEaGUnXpshyqgNh6/CM+3yNAFg8It2C+8KqRS310ipB/dUwENXVGwESeGOiTpvShVI/gPQ4i2/yOK33AKGia9oQuM6oEVNzrnYhiH8pd0JU5RGGKpOqoI/TmeevF6aNpyfUv6Ts/JUSIVFiWZSc2rJkY8jAIDvLJHsuFqhBEqPl3OsGLOAqoYnpGgl9Uh0vjp63PreBxDjbwY9fQgNMJTNbT1iJFYPtRTVRd6fMZ2JhH42I5nhvwPNrgKxLxXrhcsbjDxmOqu7biv0UHmwG+HDBihPPwIN12A1TP1uUNQukUMuFTsAEShueGwoxsfOdBfdlIBHP2UCFO2casDE9pefAEsoZQepaplbm9uY2VPb+cteLwMi8n20c8iOmdsZmZvcm1hdAE=",
    "creation_tx": "b6e2d574bb06a0173ccdc853698193914bff2ece2219dc7f7ea2994e502f6bb1",
    "verified": false
  },
  "stats": {
    "num_txns": 1,
    "total_received": "0",
    "total_sent": "0"
  }
}

curl "localhost:8008/v1/emerald/accounts/oasis1qrrmuaed6numjju8gajzn68tn2edlvycjc50nfva" | jq                                                                  andrewlow@Valinor
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 26647    0 26647    0     0   650k      0 --:--:-- --:--:-- --:--:--  650k
{
  "address": "oasis1qrrmuaed6numjju8gajzn68tn2edlvycjc50nfva",
  "address_preimage": {
    "address_data": "B24PuerZ6QYiAXLs+xQ22MuJ6WY=",
    "context": "oasis-runtime-sdk/address: secp256k1eth",
    "context_version": 0
  },
  "balances": [],
  "evm_balances": [],
  "evm_contract": {
    "creation_bytecode": "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k5KRkGFIp1ZbYABgQFGAgwOBYACHgDsVgBVhBZJXYACA/VtQWvEVgBVhBaZXPWAAgD49YAD9W1BQUFBhBiqBhGAAgVGBEGEF6Fd/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W2AgAmAgAQFRhmADgVGBEGED/ld/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W1BQUFBQUFBQUFZbYACAYACDkFBgAIFz//////////////////////////8WYwgePtpgQFGBY/////8WYOAbgVJgBAFgIGBAUYCDA4GGgDsVgBVhBoVXYACA/VtQWvoVgBVhBplXPWAAgD49YAD9W1BQUFBgQFE9YB8ZYB+CARaCAYBgQFJQgQGQYQa9kZBhRHNWW5BQYABbgYEQFWEHh1dgAICEc///////////////////////////FmOfsIy3hGBAUYJj/////xZg4BuBUmAEAWEHBpGQYUiQVltgQIBRgIMDgYaAOxWAFWEHHVdgAID9W1Ba+hWAFWEHMVc9YACAPj1gAP1bUFBQUGBAUT1gHxlgH4IBFoIBgGBAUlCBAZBhB1WRkGFEi1ZbkJJQkFBhB2SHg2EZrlZbllBhB3CGgmEZrlZblVBQUICAYQd/kGFKRlZbkVBQYQbCVltQUFCRUJFWW2AAgZBQgHP//////////////////////////xZjuHLdDmBAUYFj/////xZg4BuBUmAEAWAAYEBRgIMDgWAAh4A7FYAVYQfcV2AAgP1bUFrxFYAVYQfwVz1gAIA+PWAA/VtQUFBQUFBWW2EIAGEZ/FZbc///////////////////////////FmEIHmEVP1Zbc///////////////////////////FhRhCHRXYEBRfwjDeaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgVJgBAFhCGuQYUfHVltgQFGAkQOQ/VthCH5gAGEaAFZbVluBgWAAgYEQYQi6V39OSHtxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAUmAyYARSYCRgAP1bkFBgIAIBNUOBEBVhCPtXYEBRfwjDeaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgVJgBAFh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AICMjISBgRBhE7pXf05Ie3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYABSYDJgBFJgJGAA/VuQUGAgAgFgIIEBkGETz5GQYUFQVltz//////////////////////////8WYwkC8axgQFGBY/////8WYOAbgVJgBAFgYGBAUYCDA4GGgDsVgBVhFBRXYACA/VtQWvoVgBVhFChXPWAAgD49YAD9W1BQUFBgQFE9YB8ZYB+CARaCAYBgQFJQgQGQYRRMkZBhRCVWW1Bt//////////////////+RghaTUBaQUIGEYRRxhWACYUnCVluBUYEQYRSoV39OSHtxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAUmAyYARSYCRgAP1bYCCQgQKRkJEBAVKAhGEUwIVgAmFJwlZbYRTLkGABYUlxVluBUYEQYRUCV39OSHtxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAUmAyYARSYCRgAP1bYCACYCABAYGBUlBQUFCAgGEVG5BhSkZWW5FQUGETdVZbUGEVM4qKg4mJiYlhGnVWW1BQUFBQUFBQUFBWW2AAVHP//////////////////////////xaQVlthFWNhGfxWW3P//////////////////////////xZhFYFhFT9WW3P//////////////////////////xYUYRXOV2BAUX8Iw3mgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIFSYAQBYQhrkGFHx1Zbc///////////////////////////hBZhFe5XYACA/VtgAIRz//////////////////////////8WhISEYEBRYRYYkpGQYUTIVltgAGBAUYCDA4GFh1rxklBQUD2AYACBFGEWVVdgQFGRUGAfGWA/PQEWggFgQFI9glI9YABgIIQBPmEWWlZbYGCRUFtQUJBQgGEDXldgAID9W2EWcGEZ/FZbc///////////////////////////FmEWjmEVP1Zbc///////////////////////////FhRhFttXYEBRfwjDeaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgVJgBAFhCGuQYUfHVltz//////////////////////////+DFmEXsFdgQIBRYACAglJgIIIBkJJSc///////////////////////////hBaQg5BgQFFhFy2RkGFE2FZbYABgQFGAgwOBhYda8ZJQUFA9gGAAgRRhF2pXYEBRkVBgHxlgPz0BFoIBYEBSPYJSPWAAYCCEAT5hF29WW2BgkVBbUFCQUIBhF6pXYEBRfwjDeaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgVJgBAFhCGuQYUbrVltQYRe7VlthF7uDg4NhGIxWW1BQUFZbYRfIYRn8Vltz//////////////////////////8WYRfmYRU/Vltz//////////////////////////8WFGEYM1dgQFF/CMN5oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBUmAEAWEIa5BhR8dWW3P//////////////////////////4EWYRiAV2BAUX8Iw3mgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIFSYAQBYQhrkGFGIFZbYRiJgWEaAFZbUFZbYACAhHP//////////////////////////xZjqQWcu4WFYEBRYCQBYRi+kpGQYUUVVltgQFFgIIGDAwOBUpBgQFKQYOAbYCCCAYBRe/////////////////////////////////////+DgYMWF4NSUFBQUGBAUWEZDJGQYUTYVltgAGBAUYCDA4FgAIZa8ZFQUD2AYACBFGEZSVdgQFGRUGAfGWA/PQEWggFgQFI9glI9YABgIIQBPmEZTlZbYGCRUFtQkVCRUIGAFWEZeFdQgFEVgGEZeFdQgIBgIAGQUYEBkGEZeJGQYUQFVlthA15XYEBRfwjDeaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgVJgBAFhCGuQYUgzVltgAIJhGbuDgmFJcVZbkVCBEBVhGfZXYEBRfwjDeaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgVJgBAFhCGuQYUa0VluSkVBQVlszkFZbYACAVHP//////////////////////////4OBFn////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAIMWgReEVWBAUZGQkhaSg5F/i+AHnFMWWRQTRM0f0KTyhBlJf5cio9qv47QYb2tkV+CRkKNQUFZbYECAUWAEgIJSYKCCAZCSUmAA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////////////////////FoFSUFCMjGACgYEQYSHdV39OSHtxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAUmAyYARSYCRgAP1bkFBgIAIBYCCBAZBhIfKRkGFBUFZbhmACgVGBEGEiLFd/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W2AgAmAgAQGQc///////////////////////////FpCBc///////////////////////////FoFSUFCMjGADgYEQYSKgV39OSHtxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAUmAyYARSYCRgAP1bkFBgIAIBYCCBAZBhIrWRkGFBUFZbhmADgVGBEGEi71d/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W2AgAmAgAQGQc///////////////////////////FpCBc///////////////////////////FoFSUFBhKntWW4pgAIFRgRBhI2hXf05Ie3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYABSYDJgBFJgJGAA/VtgIAJgIAEBUYVgBIFRgRBhI6pXf05Ie3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYABSYDJgBFJgJGAA/VtgIAJgIAEBgYFSUJNQimABgVGBEGEj8Vd/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W2AgAmAgAQFRhWAFgVGBEGEkM1d/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W2AgAmAgAQGBgVJQklCKYAKBUYEQYSR6V39OSHtxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAUmAyYARSYCRgAP1bYCACYCABAVGFYAaBUYEQYSS8V39OSHtxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAUmAyYARSYCRgAP1bYCACYCABAYGBUlCRUIpgA4FRgRBhJQNXf05Ie3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYABSYDJgBFJgJGAA/VtgIAJgIAEBUYVgB4FRgRBhJUVXf05Ie3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYABSYDJgBFJgJGAA/VtgIAJgIAEBgYFSUJBQiYlgAIGBEGEljFd/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W5BQYCACATWFYAiBUYEQYSXNV39OSHtxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAUmAyYARSYCRgAP1bYCACYCABAYGBUlBQiYlgAYGBEGEmE1d/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W5BQYCACATWFYAmBUYEQYSZUV39OSHtxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAUmAyYARSYCRgAP1bYCACYCABAYGBUlBQiYlgAoGBEGEmmld/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W5BQYCACATWFYAqBUYEQYSbbV39OSHtxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAUmAyYARSYCRgAP1bYCACYCABAYGBUlBQiYlgA4GBEGEnIVd/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W5BQYCACATWFYAuBUYEQYSdiV39OSHtxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAUmAyYARSYCRgAP1bYCACYCABAYGBUlBQjIxgAIGBEGEnqFd/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W5BQYCACAWAggQGQYSe9kZBhQVBWW4ZgAIFRgRBhJ/dXf05Ie3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYABSYDJgBFJgJGAA/VtgIAJgIAEBkHP//////////////////////////xaQgXP//////////////////////////xaBUlBQjIxgAYGBEGEoa1d/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W5BQYCACAWAggQGQYSiAkZBhQVBWW4ZgAYFRgRBhKLpXf05Ie3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYABSYDJgBFJgJGAA/VtgIAJgIAEBkHP//////////////////////////xaQgXP//////////////////////////xaBUlBQjIxgAoGBEGEpLld/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W5BQYCACAWAggQGQYSlDkZBhQVBWW4ZgAoFRgRBhKX1Xf05Ie3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYABSYDJgBFJgJGAA/VtgIAJgIAEBkHP//////////////////////////xaQgXP//////////////////////////xaBUlBQjIxgA4GBEGEp8Vd/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W5BQYCACAWAggQGQYSoGkZBhQVBWW4ZgA4FRgRBhKkBXf05Ie3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYABSYDJgBFJgJGAA/VtgIAJgIAEBkHP//////////////////////////xaQgXP//////////////////////////xaBUlBQW2AAgGEqzIaGhoaOjmAEgYEQYSq/V39OSHtxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAUmAyYARSYCRgAP1bkFBgIAIBNYxhOJVWW5FQkVCBFWErI1dgAYdgAIFRgRBhKxJXf05Ie3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYABSYDJgBFJgJGAA/VtgIAJgIAEBgYFSUFBhK2xWW2AAh2AAgVGBEGErX1d/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W2AgAmAgAQGBgVJQUFuAh2ABgVGBEGErp1d/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAFJgMmAEUmAkYAD9W2AgAmAgAQGBgVJQUFBQUFBQUIODYAKBgRBhK/NXf05Ie3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYABSYDJgBFJgJGAA/VuQUGAgAgE1gWABgVGBEGEsNFd/Tkh7cQAAAAAAAAAAAAAAAAAAAAAA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UW3//////////////////4EWgRRhQCRXYACA/VtgAGAggoQDEhVhQWFXgIH9W4E1YT0ogWFK3VZbYACAYACAYGCFhwMSFWFBgVeCg/1bhDVhQYyBYUrdVluTUGAghQE1klBgQIUBNWf//////////4ERFWFBrleCg/1bYUG6h4KIAWFA8lZblZiUl1CVUFBQUFZbYACAYABgYISGAxIVYUHaV4KD/VuDNWFB5YFhSt1WW5JQYCCEATVhQfWBYUrdVluSlZKUUFBQYECRkJEBNZBWW2AAgGAAgGAAYICGiAMSFWFCHVeAgf1bhTVhQiiBYUrdVluUUGAghgE1k1BgQIYBNZJQYGCGATVn//////////+BERVhQlFXgYL9W2FCXYiCiQFhQPJWW5aZlZhQk5ZQkpSTklBQUFZbYACAYACAYACAYACAYICJiwMSFWFCiVeCg/1biDVn//////////+AghEVYUKgV4SF/VthQqyMg40BYUA0VluQmlCYUGAgiwE1kVCAghEVYULEV4SF/VthQtCMg40BYUA0VluQmFCWUGBAiwE1kVCAghEVYULoV4SF/VthQvSMg40BYUA0VluQllCUUGBgiwE1kVCAghEVYUMMV4OE/VtQYUMZi4KMAWFANFZbmZyYm1CWmVCUl5OWkpWUUFBQVltgAIBgAIBggIWHAxIVYUNCV4OE/VuENWf//////////4CCERVhQ1lXhYb9W4GHAZFQh2AfgwESYUNsV4WG/VuBNWAgYUN8YUCdg2FJTVZbgoFSgYEBkIWDAYOFAocBhAGNEBVhQ5hXiov9W4qWUFuEhxAVYUO6V4A1g1JgAZaQlgGVkYMBkYMBYUOcVltQmFBQiAE1klBQgIIRFWFD0FeEhf1bUGFD3YeCiAFhQH1WW5NQUGFD7GBAhgFhQClWW5FQYUP6YGCGAWFAKVZbkFCSlZGUUJJQVltgAGAggoQDEhVhRBZXgIH9W4FRgBUVgRRhPShXgYL9W2AAgGAAYGCEhgMSFWFEOVeAgf1bYURChGFBMlZbklBhRFBgIIUBYUEyVluRUGBAhAFRY/////+BFoEUYURoV4GC/VuAkVBQklCSUJJWW2AAYCCChAMSFWFEhFeAgf1bUFGRkFBWW2AAgGBAg4UDEhVhRJ1XgYL9W1BQgFFgIJCRAVGQkpCRUFZbc///////////////////////////FpBSVltgAIKEgzeRAZCBUpGQUFZbYACCUWFE6oGEYCCHAWFKFlZbkZCRAZKRUFBWW3P//////////////////////////5GQkRaBUmAgAZBWW3P//////////////////////////5KQkhaCUmAgggFSYEABkFZbYICAglKFUZCCAYGQUmAAkGAgkGCghAGQgokBhFuCgRAVYUV0V4FRhFKShAGSkIQBkGABAWFFWFZbUFBQg4EDgoUBUoZRgIJSh4MBkYMBkIRbgYEQFWFFvleDUXP//////////////////////////xaDUpKEAZKRhAGRYAEBYUWMVltQUICTUFBQUGFF02BAgwGFYUSuVlthReBgYIMBhGFErlZblZRQUFBQUFZbYCCAglJgFZCCAVJ/ZHMtbWF0aC1zdWItdW5kZXJmbG93AAAAAAAAAAAAAABgQIIBUmBgAZBWW2AggIJSYCaQggFSf093bmFibGU6IG5ldyBvd25lciBpcyB0aGUgemVybyBhYECCAVJ/ZGRyZXNzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYIIBUmCAAZBWW2AggIJSYBSQggFSf2RzLW1hdGgtbXVsLW92ZXJmbG93AAAAAAAAAAAAAAAAYECCAVJgYAGQVltgIICCUmAUkIIBUn9kcy1tYXRoLWFkZC1vdmVyZmxvdwAAAAAAAAAAAAAAAGBAggFSYGABkFZbYCCAglJgE5CCAVJ/ZXRoIHRyYW5zZmVyIGVycm9yIAAAAAAAAAAAAAAAAABgQIIBUmBgAZBWW2AggIJSYBeQggFSf0FhYUxpYnJhcnk6IGFtb3VudEluPD0wAAAAAAAAAAAAYECCAVJgYAGQVltgIICCUmAJkIIBUn8yOkVYUElSRUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAggFSYGABkFZbYCCAglJgGpCCAVJ/RnVsbE1hdGg6IEZVTExESVZfT1ZFUkZMT1cAAAAAAABgQIIBUmBgAZBWW2AggIJSgYEBUn9Pd25hYmxlOiBjYWxsZXIgaXMgbm90IHRoZSBvd25lcmBAggFSYGABkFZbYCCAglJgGJCCAVJ/QWFhTGlicmFyeTogYW1vdW50T3V0PD0wAAAAAAAAAABgQIIBUmBgAZBWW2AggIJSYC2QggFSf1RyYW5zZmVySGVscGVyOjpzYWZlVHJhbnNmZXI6IHRyYECCAVJ/YW5zZmVyIGZhaWxlZAAAAAAAAAAAAAAAAAAAAAAAAABgYIIBUmCAAZBWW5CBUmAgAZBWW5GCUmAgggFSYEABkFZbYACFglKEYCCDAVJz//////////////////////////+EFmBAgwFSYIBgYIMBUoJRgGCAhAFSYUjugWCghQFgIIcBYUoWVltgHwF//////////////////////////////////////////+AWkZCRAWCgAZWUUFBQUFBWW2BAUYGBAWf//////////4ERgoIQFxVhSUVXYUlFYUquVltgQFKRkFBWW2AAZ///////////ghEVYUlnV2FJZ2FKrlZbUGAgkIECAZBWW2AAghmCERVhSYRXYUmEYUp/VltQAZBWW2AAgmFJvVd/Tkh7cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBUmASYARSYCSB/VtQBJBWW2AAgX///////////////////////////////////////////wSDEYIVFRYVYUn6V2FJ+mFKf1ZbUAKQVltgAIKCEBVhShFXYUoRYUp/VltQA5BWW2AAW4OBEBVhSjFXgYEBUYOCAVJgIAFhShlWW4OBERVhSkBXYACEhAFSW1BQUFBWW2AAf///////////////////////////////////////////ghQVYUp4V2FKeGFKf1ZbUGABAZBWW39OSHtxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAUmARYARSYCRgAP1bf05Ie3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYABSYEFgBFJgJGAA/Vtz//////////////////////////+BFoEUYRiJV2AAgP3+omRpcGZzWCISIBqfR30sZotpEk/Hp+O2r9pzmnXPpQ+NmBBZQmfw/YLKZHNvbGNDAAgAADM=",
    "creation_tx": "640cf83881464a7cbc3bb8bbd9af142b12b71f777d8414bfa7c2a12d4b7ae567",
    "verified": false
  },
  "stats": {
    "num_txns": 1,
    "total_received": "0",
    "total_sent": "0"
  }
}

Side note*: The additional fields are not currently included in the run.sh api test cases since there are no contract accounts within the first 100 blocks.. filing a ticket to expand this.

Discussion copied from elsewhere:

  • Do we use the full bytecode anywhere? Or would storing the abi be sufficient?
    • [Answer] Etherscan provides bytecode; we will provide it in addition to the abi
  • The creation_tx field can be populated by the runtime analyzer, but from my understanding the bytecode and verified fields will need to be populated by the evm_token_analyzer or something similar. That seems to overlap with evm/sourcify: support EVM contract verification via Sourcify #429 to download the ABIs of existing contracts - so is populating bytecode/verified out of scope for this ticket?
    • [Answer] in-scope for this ticket: creator tx, bytecode. out of scope: verified/abi

analyzer/runtime/extract.go Outdated Show resolved Hide resolved
analyzer/runtime/extract.go Outdated Show resolved Hide resolved
storage/migrations/02_runtimes.up.sql Show resolved Hide resolved
storage/migrations/02_runtimes.up.sql Outdated Show resolved Hide resolved
storage/migrations/02_runtimes.up.sql Show resolved Hide resolved
Copy link
Contributor

@mitjat mitjat left a comment

Choose a reason for hiding this comment

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

Thank you!
LGTM since I'll be away next week (and, more importantly, since the PR is 90% there :)).
But please get @ptrus 's signoff too before merging.

api/spec/v1.yaml Outdated Show resolved Hide resolved
api/spec/v1.yaml Outdated Show resolved Hide resolved
api/spec/v1.yaml Outdated Show resolved Hide resolved
api/spec/v1.yaml Outdated Show resolved Hide resolved
api/spec/v1.yaml Outdated Show resolved Hide resolved
analyzer/runtime/extract.go Outdated Show resolved Hide resolved
storage/migrations/02_runtimes.up.sql Outdated Show resolved Hide resolved
storage/migrations/02_runtimes.up.sql Outdated Show resolved Hide resolved
storage/migrations/02_runtimes.up.sql Outdated Show resolved Hide resolved
creation_tx:
type: string
description: The Oasis cryptographic hash of the transaction that created the smart contract.
creation_bytecode:
Copy link
Contributor

Choose a reason for hiding this comment

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

Just to have a discussion thread:
Reminder that you said you'd up the number of rounds in the e2e regression test. Maybe 10k is good? It takes almost exactly 2min on my machine, which feels like a decent amount of time to me. Or maybe 5k.

Might be worth a separate PR (before this one goes in) just because of all the diff noise. Your call.

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'll update this in a follow-up PR - need to also add new contract accounts to query in the e2e tests

@Andrew7234 Andrew7234 force-pushed the andrew7234/contract-accounts branch from e3b2234 to f9cf4a2 Compare June 6, 2023 23:05
api/spec/v1.yaml Show resolved Hide resolved
@ptrus
Copy link
Member

ptrus commented Jun 7, 2023

Looks good to me now, thanks!

[analyzer] store contract address and tx

[openapi] add contract information to /runtime/accounts/{addr}

[api] add contract fields to /runtime/accounts/{addr}

[analyzer] store contract creation bytecode

[api] show contract creation bytecode

[db] add creation/runtime bytecode for evm contract accounts

nit

[db] standardize pkey format; remove evm contract fields

[openapi] address comments

address comments; simplify fields

fix bad rebase

linter

update description
@Andrew7234 Andrew7234 force-pushed the andrew7234/contract-accounts branch from c966425 to 7e2fa47 Compare June 7, 2023 15:35
@Andrew7234 Andrew7234 merged commit 3263819 into main Jun 7, 2023
@Andrew7234 Andrew7234 deleted the andrew7234/contract-accounts branch June 7, 2023 15:55
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.

4 participants