diff --git a/.changelog/768.bugfix.md b/.changelog/768.bugfix.md new file mode 100644 index 000000000..7c7d4699d --- /dev/null +++ b/.changelog/768.bugfix.md @@ -0,0 +1 @@ +evmverifier: update to use current sourcify api diff --git a/.gitignore b/.gitignore index 02d131640..6eaecc0df 100644 --- a/.gitignore +++ b/.gitignore @@ -13,7 +13,7 @@ tests/e2e/testnet/net-runner tests/e2e_regression/*/actual/* # KVStore autogenerated backups -tests/e2e_regression/rpc-cache/*.backup +tests/e2e_regression/**/rpc-cache/*.backup # Log output. **/*.log diff --git a/analyzer/evmverifier/sourcify/client.go b/analyzer/evmverifier/sourcify/client.go index 303bd4190..5dcdee013 100644 --- a/analyzer/evmverifier/sourcify/client.go +++ b/analyzer/evmverifier/sourcify/client.go @@ -86,35 +86,79 @@ func (s *SourcifyClient) callAPI(ctx context.Context, method string, url *url.UR // Note: This uses the free, public server API. If it turns out to be unreliable, we could use the repository API (vis IPFS proxy) instead, e.g.: // http://ipfs.default:8080/ipns/repo.sourcify.dev/contracts/full_match/23294 func (s *SourcifyClient) GetVerifiedContractAddresses(ctx context.Context, runtime common.Runtime) (map[ethCommon.Address]VerificationLevel, error) { - // Fetch verified contract addresses. + // Build map of addresses. + addresses := make(map[ethCommon.Address]VerificationLevel) + + // Fetch fully verified contract addresses. + // See https://docs.sourcify.dev/docs/full-vs-partial-match/ u := *s.serverUrl - u.Path = path.Join(u.Path, "files/contracts", sourcifyChains[s.chain][runtime]) - body, err := s.callAPI(ctx, http.MethodGet, &u) + u.Path = path.Join(u.Path, "files/contracts/full", sourcifyChains[s.chain][runtime]) + fullyVerified, err := s.GetAllAddressPages(ctx, &u) if err != nil { - return nil, fmt.Errorf("failed to fetch verified contract addresses: %w (%s)", err, u.String()) + return nil, err } - - // Parse response. - var response struct { - Full []ethCommon.Address `json:"full"` - Partial []ethCommon.Address `json:"partial"` // See https://docs.sourcify.dev/docs/full-vs-partial-match/ + for _, addr := range fullyVerified { + addresses[addr] = VerificationLevelFull } - if err := json.Unmarshal(body, &response); err != nil { - return nil, fmt.Errorf("failed to parse verified contract addresses: %w (%s)", err, u.String()) + // Fetch partially verified contract addresses. + u = *s.serverUrl + u.Path = path.Join(u.Path, "files/contracts/any", sourcifyChains[s.chain][runtime]) + allContracts, err := s.GetAllAddressPages(ctx, &u) + if err != nil { + return nil, err } - - // Build map of addresses. - addresses := make(map[ethCommon.Address]VerificationLevel) - for _, addr := range response.Full { - addresses[addr] = VerificationLevelFull + for _, addr := range allContracts { + if _, exists := addresses[addr]; !exists { + addresses[addr] = VerificationLevelPartial + } } - for _, addr := range response.Partial { - addresses[addr] = VerificationLevelPartial + + return addresses, nil +} + +func (s *SourcifyClient) GetAllAddressPages(ctx context.Context, u *url.URL) ([]ethCommon.Address, error) { + page := 0 + addresses := []ethCommon.Address{} + for { + // https://sourcify.dev/server/api-docs/#/Repository/get_files_contracts_any__chain_ + q := u.Query() + q.Set("page", fmt.Sprintf("%d", page)) + u.RawQuery = q.Encode() + + body, err := s.callAPI(ctx, http.MethodGet, u) + if err != nil { + return nil, fmt.Errorf("failed to fetch fully verified contract addresses from %s: %w", u.String(), err) + } + // Parse response. + var response struct { + Results []ethCommon.Address `json:"results"` + Pagination SourcifyPagination `json:"pagination"` + } + + if err := json.Unmarshal(body, &response); err != nil { + return nil, fmt.Errorf("failed to parse fully verified contract addresses: %w (%s)", err, u.String()) + } + addresses = append(addresses, response.Results...) + // Check pagination and increment if necessary. + if !response.Pagination.HasNextPage { + break + } + page++ } return addresses, nil } +type SourcifyPagination struct { + CurrentPage uint64 `json:"currentPage"` + TotalPages uint64 `json:"totalPages"` + ResultsPerPage uint64 `json:"resultsPerPage"` + ResultsCurrentPage uint64 `json:"resultsCurrentPage"` + TotalResults uint64 `json:"totalResults"` + HasNextPage bool `json:"hasNextPage"` + HasPreviousPage bool `json:"hasPreviousPage"` +} + type SourceFile struct { Name string `json:"name"` Path string `json:"path"` diff --git a/analyzer/evmverifier/sourcify/client_test.go b/analyzer/evmverifier/sourcify/client_test.go index aeba10e49..256c4d8e8 100644 --- a/analyzer/evmverifier/sourcify/client_test.go +++ b/analyzer/evmverifier/sourcify/client_test.go @@ -18,27 +18,71 @@ import ( ) var ( - // Source: https://sourcify.dev/server/files/contracts/23294 - // - //go:embed testdata/get_contract_addresses_response.json - mockGetContractAddressesRsponse []byte - // Source: https://sourcify.dev/server/files/any/23294/0x127c49aE10e3c18be057106F4d16946E3Ae43975 // //go:embed testdata/get_contract_source_files_response.json mockGetContractSourceFilesResponse []byte + + // Source: https://sourcify.dev/server/files/contracts/any/23295 + // + //go:embed testdata/get_contract_addresses_any_0.json + mockGetContractAddressesAnyPage0Response []byte + + // Source: https://sourcify.dev/server/files/contracts/any/23295?page=1 + // + //go:embed testdata/get_contract_addresses_any_1.json + mockGetContractAddressesAnyPage1Response []byte + + // Source: https://sourcify.dev/server/files/contracts/any/23295 + // + //go:embed testdata/get_contract_addresses_full_0.json + mockGetContractAddressesFullPage0Response []byte + + // Source: https://sourcify.dev/server/files/contracts/any/23295?page=1 + // + //go:embed testdata/get_contract_addresses_full_1.json + mockGetContractAddressesFullPage1Response []byte + + // Source: https://sourcify.dev/server/files/contracts/any/23295?page=2 + // + //go:embed testdata/get_contract_addresses_empty_page.json + mockGetContractAddressesEmptyPageResponse []byte ) func TestGetVerifiedContractAddresses(t *testing.T) { require := require.New(t) testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if !strings.HasPrefix(r.URL.Path, "/files/contracts") { - w.WriteHeader(http.StatusNotFound) + switch { + case strings.HasPrefix(r.URL.Path, "/files/contracts/any"): + switch { + case !r.URL.Query().Has("page") || r.URL.Query().Get("page") == "0": + w.WriteHeader(http.StatusOK) + _, _ = w.Write(mockGetContractAddressesAnyPage0Response) + case r.URL.Query().Get("page") == "1": + w.WriteHeader(http.StatusOK) + _, _ = w.Write(mockGetContractAddressesAnyPage1Response) + default: + w.WriteHeader(http.StatusOK) + _, _ = w.Write(mockGetContractAddressesEmptyPageResponse) + } return + case strings.HasPrefix(r.URL.Path, "/files/contracts/full"): + switch { + case !r.URL.Query().Has("page") || r.URL.Query().Get("page") == "0": + w.WriteHeader(http.StatusOK) + _, _ = w.Write(mockGetContractAddressesFullPage0Response) + case r.URL.Query().Get("page") == "1": + w.WriteHeader(http.StatusOK) + _, _ = w.Write(mockGetContractAddressesFullPage1Response) + default: + w.WriteHeader(http.StatusOK) + _, _ = w.Write(mockGetContractAddressesEmptyPageResponse) + } + return + default: + w.WriteHeader(http.StatusNotFound) } - w.WriteHeader(http.StatusOK) - _, _ = w.Write(mockGetContractAddressesRsponse) })) defer testServer.Close() @@ -60,8 +104,8 @@ func TestGetVerifiedContractAddresses(t *testing.T) { require.FailNowf("GetVerifiedContractAddresses", "unexpected verification level %s", level) } } - require.Equal(15, nFull) - require.Equal(3, nPartial) + require.Equal(249, nFull) + require.Equal(42, nPartial) } func TestGetContractSourceFiles(t *testing.T) { diff --git a/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_any_0.json b/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_any_0.json new file mode 100644 index 000000000..aef11e6c1 --- /dev/null +++ b/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_any_0.json @@ -0,0 +1,213 @@ +{ + "results":[ + "0x03FB91643C85fEffEe96a2C627f23A3141392672", + "0x10FafE48F09CD304E26F704a7EE743c4CbDc61C1", + "0x22189501c463542E035920308c3E48D5F97C8618", + "0x7800cf4DdE7ddff57faFa5bCD7f0BB281608831B", + "0x6b24eEFA6894B75f0D5A37F00AB975d9730317Fb", + "0x4046d9265f3a2E9b0Ba8EE61A1a8bC8093CEfd53", + "0x491847c0314073e0454cFc3bf6cf080129c3f5D2", + "0x61F91266F6abEA61447E00EB781A3c38a3D1b925", + "0x5eA613995FA19955E63adc2389F69BC7Ce119d76", + "0x4a797b122dF28E3782Bbb7ccA31a802F11B96f75", + "0xF190579aE5E6aac6cEBA5ea3F48DAC66C93925c2", + "0x7aA3BaaCf28d344B499faed1D80579A8C65487af", + "0xC2e3E03dFce83913EAb31F78238a625B07378f8B", + "0x7Cdfd56883ADCA47f787A251511B5A36e2A2f7e0", + "0xFfdb1c4aCe237B10ef5Bd83ec2e6E24D2784225c", + "0x9Ca449fAa18F85a60e918Acad38702831C7D605e", + "0xB759a0fbc1dA517aF257D5Cf039aB4D86dFB3b94", + "0x0233034E099689626632fc111fBc98B0FF69ce2C", + "0x175A568F4FC355A8B8f287Fedb45BcE129C71bA2", + "0xF8Ec125B2FD4585808429d29c0C4891E930b4F64", + "0x7b7F2a9DD1281Fb31ec0e216dC327d310132818B", + "0x007B4BaD196fac913Bc40E0d600Bd827Fdf52327", + "0x03237c372AcD10Cc749253a2ea2aAfBfD49C6A18", + "0xFD0E22f1142ED89bD91157266Bb465B3b57f6A73", + "0x0A100F4fbcDC3584066F2f56094140Bb5F5fA85E", + "0x1D4c151bFba703Ed6279D603d88257a654ab0010", + "0x182A0a24C09Afa4B60CA25E7Ad23e992114c10Ed", + "0x16E117f9d3e0952a07CaCC448CEe548cad123Ea9", + "0xd57866e5b0616A7d5De614877b73facA5C0BE38b", + "0x1A7Da4B2C86Cb3Db8D71982d705f3c67EE82f641", + "0x2153F4a139825Af5813ea6F23922075FceB3A074", + "0x1a6f9E92036752eD432602f99A288C12643323d7", + "0x232f7a267817794301A4ac585799127f1b997BD8", + "0x1cc073e86Db434df912D35B26fC2b41c46a78A2a", + "0x158fB6a68BE5c264329E3A89Fa9F281925776360", + "0x25b6031127505279711B665e7B5658d6963E579f", + "0x19a5E5CfcB447FB888C8BD1e4B88CAD2416e0D89", + "0x217dbC106AA40479Cf367C1191a59FBBB6C85Bc6", + "0x2639823b88436aa3da35CDbC84eDD7fb2FeD1ceE", + "0x2E84400877422B632B89861F7F7a5D4b9160B78C", + "0x21c12A8A12240417ECcFCe47645152EEbaaB8035", + "0x326A7aC28Ca63CD928203A1645e879A0D884273e", + "0x358eB0B54D7f7dF4360902dC89B2C5C13A7914a6", + "0x2df609D3468a228b4a6f753B5816128D7f88A815", + "0x3d4BA2E0884aa488718476ca2FB8Efc291A46199", + "0x41675C099F32341bf84BFc5382aF534df5C7461a", + "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762", + "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526", + "0x3C74f783A3F50651dD116eE8432B15B418607F23", + "0x4AFEDf780306fa38AF081b1B1aAdA918C8941715", + "0x33340BdC56E220741846684A93E7E08D4495Dca6", + "0x34b9F2E1d9eF8e270E5AF6e0991bc8023E9906C3", + "0x24390e1F72Fba16f781F6AF41542572bb5bFca42", + "0x38e313d8Dd5B50303A8444bdfc4035CDc1C431F6", + "0x5d8D06480DEAD91c22D9fe4CEA4D39Bd803a3f8b", + "0x4874c1EC02c122Dfb29C994264dFCC4aD9FA8b96", + "0x48E46B50392051B2f7f8204F7f1bd6b4CD981542", + "0x32Cf4dCFfdc6Ed1a045f212Eacc7ed8a1E94f530", + "0x69e6d1F85BB4E051C24ee5D2B9341E1F735A3454", + "0x38FF18441b182ac603aADCA8ADDb257c6F5d103d", + "0x4B7228e9b9A257b02C967686FcDD64c24AaEDCF7", + "0x57633118AeB78f8b91de4335119394e0604Dfd73", + "0x4b54A40d85F6a7b6A7827eE00c91aEbcf3E735d8", + "0x3E0B62d747C91275251F66fb243ae90FDCaD17f9", + "0x71AcC47973da2E4a484caF7272Da162F4Dd8F49b", + "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67", + "0x4b7FCD597369084cEDFbd8BbCC176E66777EDF96", + "0x7733B83BE36eABFc9BD1e29EB4B0f76792608DDe", + "0x736cbB6a7E2e794b44270DFe718b8830d53943A2", + "0x670f102d04cEa00e4D58dcc8Db98fFaF010e5A52", + "0x77CBEC6F2a0B08fF0DC1c026012ddB4ea651871F", + "0x4188A7d16f65F105603D243EdFe00E20C4c7f204", + "0x64edf78B053C620655B5e8D0C3539Ffb7e6A103a", + "0x5cAaA62aD13Ed1D8bD595E7aafeE2fC43735A7Bc", + "0x70198180C230169b82d3822eA264D9d06C723C61", + "0x63c13Ee9BecC8f35dC034F026Ae8d18A4D1E7f0E", + "0x9D8446FB7d8626634307E87b1E6835BB730C666F", + "0x7DB90F79acAB311271E217b4712082d250F8e8d7", + "0x9a15222BBE0Ef08432fed68B86c919088fc0BbDF", + "0x68BD195a1333acf4e59F4BABE70D343CfeE34b12", + "0x6b8DCFe8EF413CAa36d71d9D6E5b13cfF4fe8780", + "0x6522f92B1F5d3F849BFe2560c487f5E0aCd29Ca6", + "0x817a471763D28064A29E38D9877cBD8372035cFF", + "0x70B46Dc19E7372e67c50E9076F2BE8291FDFB416", + "0x9b35Af71d77eaf8d7e40252370304687390A1A52", + "0x9245483dB42fFa2087b0577bF247a0cbaaef2E84", + "0x7aD14dBBfD642AD6f7713228e427B1a92e6E851D", + "0x8e29375FE5Db7eBb1b5eF24B7D397bBF0B01De09", + "0x9641d764fc13c8B624c04430C7356C1C7C8102e2", + "0x7C1839b90cfAaE49EaEa9f6fa312eAb148d64070", + "0x9d479Cab252338eCE2FFc690EE4D4b14E32b2895", + "0x8A53e60A3f448bBB1d00C8B29440E59Ba4ec3f57", + "0x95bCB5194140101941917770419Ac2347c1ecbc5", + "0x7F67316a754f3953617FEA14227ccC4E018f4E7b", + "0xA03c4CDB6f1174F7efa649dD7F96E8ccdeC4a656", + "0x968989eDFAB00952B5F38130Fe6178f82d54590e", + "0x2B3a1D3d5e60767BDAd69A717A7538265e7ac1cb", + "0x47b0a432C455804Fc2A5cAe1685Dd224EB104aCF", + "0x744c272c12D6c2417a0a99C69CaAD3719bc14E1C", + "0x63E22Ba5c1472a8EeDF5de4B7C454D5554c584a1", + "0x9A4c4c4875Ab8f61D3Ce53440a3569273DA6b251", + "0x91ebF577eE06A581536606f0070281dB7e0690fd", + "0xA3D25E562022290ab03797A1c023942AD0fA5F91", + "0xAddf9f82eFb4a4dC555e9f83EB66fE6e608eF4Bc", + "0xA48361Bb19F3b4985F23fAf69D94602186399994", + "0xE46FE78DBfCa5E835667Ba9dCd3F3315E7623F8a", + "0xB5611327e3EAB4bb1FB9A91DE1f324b8C3F20c6C", + "0xB7eEB78904F35744993885282544be64edF49260", + "0xE6fbCC04F4f41bFb6DF3388329C86C77aea765ae", + "0xC16d9b4AD3c3B45fAb5d8F79ba986069E4403c58", + "0xFe49e0f2eAab84558047Bdd7AF738c1a22F9C83b", + "0xDAE0C24bF069dCe60bdAB9658465C7e8e5b03c99", + "0xA529a66f14f9596c5D65cb5bc81D59ac8B4b9FE5", + "0xA878ed2d60B3E71E8A8713c5c0416090D8e7Cf5D", + "0xF1cfAB193bbA41541601da794d0e850b0A09b92D", + "0xAf99bbA160E1d372f96de8BBd39425E3FFd2fe7D", + "0xca5B5E9371e6AedD850a74554a53BA91D2D3508d", + "0xD10446709EB406C25B6E4E7F7cd0D5B0B7F48A19", + "0xC2D303eE8ED966D0085D17717a36E5432F0E588a", + "0xd53cd0aB83D845Ac265BE939c57F53AD838012c9", + "0xdFA7c11836795ACd291401ed691073B40B1905D2", + "0xd64a57003526ECe2e360b25A556963aB6E38407E", + "0xdB3B75E1e96a025cb86Ff105EA6711e5648671B5", + "0xdAB5845136b3102E63023BB2A2405cb71608605d", + "0x0Ba1cf45c336B847f6c4DBa4d86CCd5c8b7beB58", + "0xD538C945FB8E7d936BC2BAC43C2f1720c9f24CB7", + "0xf125A87614fe2Da9d815f5943EDfeF6bB3E0B521", + "0xe316e0f08A1c5c7bAfF7CCB5CD2F517033368Bb5", + "0xefe86329296Bf2f2fB3C4fF5545Dca8736fB2e71", + "0xd9FBE086D149a83039bc291b7101e892F53BD431", + "0xeDCF620325E82e3B9836eaaeFdc4283E99Dd7562", + "0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99", + "0xeCcC3f1D9Bed269435F5737B6718Fc0F86d1b0E2", + "0x092270546c6F7553BB8640139373178c8d3921C1", + "0x2701DFfa3DE15C998d2DD997107BF0A3e229128C", + "0xEF7B6b851D9Df5786B50D498c0F7c2D8349e186A", + "0xe32aCE0B1C29a632d33E60Cc9390bA839ba3Ea29", + "0xf814C57dd49d3E236b8da5ad922BFdCea769eb26", + "0x41C716d69F7ae771406288F79eE0eB4bFc36719e", + "0x4d73054e9a61b5E32037117E8902F2d9926794CA", + "0xf2bca0D4F38FB75B54B31A0EEa48247530E00823", + "0x715a7100130960ff4Aa440153b6b53245311d703", + "0x62894583eADbabeacAb516449c5ca9515a4F18f4", + "0x5aaFee0E22dE20bC4cA67eAE7559b7aC10eC7CD6", + "0x787aEcBEdFAd4BED0F4ffbEF79722Ab8F83D30aC", + "0xF95BFff26FE2d5e93a61AB453181014bFBc3d2F4", + "0x2cee812ad2159Eb22D8403ccF494216BCC9cbDD4", + "0x3bF62C3893Ae7098dA7654c6c9F79E02331C3b8e", + "0xB19AF75bc9f26945F3968df92cFf5ce9A70d95Da", + "0x998ae49baF9903d28506b332266dCCA2dD8156FF", + "0x6EE9b6C399bB928069669940C917775A708E979A", + "0xCf05273778a80416098eC9219F40caaEe9b27A36", + "0x604DeB83Df738f266368DeAB4d0853Cff2233426", + "0x64591E6eccE3b433A6AD3A0194f62f73252C96D1", + "0x1093EEf0Aa58c9F250cFD324b68C8402741f8618", + "0xC44a45106fDBE8550164251cf0CEF95889E7786e", + "0xCC7dd438AA2920DdDDee4AE207CB6Fa974e53b88", + "0xCe52FC2378a1bc2340FCB71cA963fBc5497CC712", + "0xE79423232289465774c3f5403e85157b1e9E9F17", + "0x7C2691Fb5171cca383AebbF132701BeFf18B4A9f", + "0xBd2F9374Df2D6eD05C2300F042d31a8E5e8A16CB", + "0x7a2Bc90944978Bc478408012a9C86A479307F942", + "0x94Ab46C6568701F01FA4bc6c46c1E2CaA85B5812", + "0xEeC3e4f4f17F672B0FA25DCd786F5dfC07a80106", + "0xeaBa07925C57Cc24ddb8d43a6dEDC5493C190Ae4", + "0x20b9434f61087bD66883b1Bb44f09840E78C8891", + "0x0f7eD316BC3684ADBD5f87aBD04a6D3485AB4E3E", + "0xe47240B6324D446B449a2D1A969A0EEFb5525C03", + "0x50179b8820E9e0cA483Af605A1b1B2Ba93094d89", + "0x04D68c8B7676cC6bc8d43d7135eaB4c382b20bC8", + "0xFCed4006eDE94Fc8c24DB683ab7922FE20C34b2b", + "0x51EbAA72d4640dEaAEafEC622147A44626f26384", + "0x54D6544BD3ec5D7554B102498dC19CD862Db0eFc", + "0xf9Ec4CCcb5E467898E57E44b519361af71827B06", + "0xf29e9b50b82C0ecd573dc89ee49aA3e1247Dd9bF", + "0x4407bc06B68Cf301A4BF886E3a46B3F294BD74b6", + "0x696b9db604BA61308eb5c9A0dfda7E5b3af0E3bB", + "0x978FB09800e574ab235B25d68E9eD855c477A0CA", + "0xCa55bBcCDC91f8ea29Aa5CbD8C20C00b98131715", + "0x2973E4147313d87DC576a09Cc5D34026A7e0de4F", + "0xE00DA572A941363C82dfC81C56B44Cc22925A213", + "0xcf1f66DEa9AC2e7818C43478dEBADCCc32C7E4Ef", + "0xD50918C4A438a1B6EABb12A29a375c47e43C44a8", + "0xD30906E081D6E7bf55A5438C245FbdABb5313464", + "0x16a8B86D12F317d7c90d808775193d64BB5481Bc", + "0x5FBC2A29f7C8e4533dECD14Dc1c561A8eF0d4e31", + "0xbde8224d15885c2E46Be665b9392E619cD142de8", + "0x315ef329D214cde5cE7C206104aC35B1fe66bb8c", + "0x89b752C3e272feBA17B363EaaBFe0d653cF75bE7", + "0xE3Cc97a969e7B032e33d6b45a6fB9363Db942BB5", + "0x9Ab15cc945b2B58A51384539211dE8a88a1355E8", + "0x33E8a07E6921d82e695d2253952c664c1213b966", + "0xa24dbc5083c8E2a50e48a6778849bAd96A5A41C1", + "0xf0B446FaA9132538d235042d9c44d8Eb498d1894", + "0x03569510878C804C599bA6b4D4dE879F4618c77F", + "0xb1bAF46e881166F86f23238050Be2a437ccD3ad9", + "0xf151819D2295F0e22B4270c51eD0018051ED3ad6", + "0xb403C1e931a879dB63AF936FE1aaA28f184e25f7", + "0xC4FD0Bb68C10241A8010b9502dD6bF099458DEB8", + "0x13AEcEA617AaEfB9A89b237f389D61499e0325AC" + ], + "pagination":{ + "currentPage":0, + "resultsPerPage":200, + "resultsCurrentPage":200, + "totalResults":291, + "totalPages":2, + "hasNextPage":true, + "hasPreviousPage":false + } + } diff --git a/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_any_1.json b/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_any_1.json new file mode 100644 index 000000000..060a50a00 --- /dev/null +++ b/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_any_1.json @@ -0,0 +1,104 @@ +{ + "results":[ + "0x52c24c63cC68ce6e055C7EFDfbA49299C90F6b20", + "0x1FA563f951075E9bc32426E63560cd230318b22B", + "0xa96E0E7E684512d0B340673fEbe3475e2502a784", + "0xB7789f966565aadeA349A3B472BE7ff9C06d3490", + "0x3b3223Ccf802E295202917330c59BD50f74d20aE", + "0x9cd892c37258290Bcdc59dc8e159785fB0045b18", + "0x3BE7A9E2526f6BE015F3b2b13fE5fB9444ADa20f", + "0x0b97898Eaed8337ee38722BeEbeF0D80D64beDFD", + "0xb4914dfeC7f70C708673620eDF6d8839F81E7612", + "0x9B62e7DA903Bfce035aB2866AC7D2f573B1890B8", + "0x8F3cd201e6557b26d3dd08DB822312Ad9A31BC71", + "0xdA412123a3Cc0D921bcf7246f8742e3b7c3E7b94", + "0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed", + "0x7023395e15D89995012bEF7d39322887B2DdF812", + "0xB78c972C0D3de0Cf8c860679854c05D6F5D8c7bA", + "0x186Cbd0D42f51F241BCafEe7E06439cded80D0eb", + "0x86C2C4f2a531d386dc70857B720977F7F50f8c39", + "0x4252C6b9d61447Ef75196c4e2178B6B7c8e0b540", + "0x243E9b626Bc3ca61795600ED5295377423cd4E69", + "0x4D6E11b6E85eC442eD46870ee00b5857B492cFa8", + "0x8327cb800754Be018ddF94e090610C5E11Af2D36", + "0x1068d3fa14f0AC485406a0E47F999B54687Ec223", + "0xfdaE79613aaBf232Ec651a2247dF4B157fD48d1B", + "0x2E86389aae27Dc5256752C4537Fd490Eea01dF38", + "0x40b81e081b1aF09875a07376bdAD27507774e9a3", + "0x88b627Dd6c038890eE5E5bC95FfcA0C4dFe4F1f3", + "0x7DaeD75C38dcADea86b6CE8885159101082f7829", + "0xBD02eb4e69487Ce55840Ec6Fc9E4Ce5F02B1b268", + "0x3F3D087a9f96ad3aF2c18268C97B9afD3B77709c", + "0x25E00F2c47F19AE2f7B3ed057498549fe1ab2FEB", + "0x8FFf99A2ac1ced949D762e0A6Ac440C5cf6c9D1D", + "0xc5237bCD1553e0c11D0fD42261d0b3307c7a5c32", + "0x20E9424C2c7CC01FDbcBEF065b850892c0280FDa", + "0x1025009DBe0C501091DDB69f1FE16FDf3fb9c9c3", + "0xf92ff60907d1769bA004c217087F36164A547fb6", + "0xEF4c65D1372D23a2635C2ed0D077bB5E4437cC1a", + "0xf7e46a901a68CD80676B5B49062Ce2D3b9b4f44F", + "0xE7F3D50298eb592dE049D7683f4b2923FB811Ea6", + "0xfEcE26D775bbb4E1804E86Afa3A1bA8e1650859B", + "0xA2a25aC7460F04c7d70485e845393f384F47A366", + "0x7af1775384ADFfd60dc01f4ed859Dc8dfC3ce0eF", + "0xfbE6D1e711CC2BC241dfa682CBbFF6D68bf62e67", + "0xD68911F91f766B37d899C2088f5966bD3Ea39Ba4", + "0x9aE8b78C4EC536Bde9DbF36E05E68cFBB4b82B15", + "0x4a8140416fccd8983A113c0C0E92A3D35Dc1ED48", + "0xAB85BA9258bde200d23C95944D167BA1a06fBce4", + "0x849E4133c166deb1B912506077208BB37473B0Ab", + "0xdc26bf8E0e5FEA1d308CAFb75251DFC83dFad4cE", + "0x6ce5E130d0FA14141520618Aef8E1bdD7fb47C76", + "0xFC1A5eCaDC976754946A067cF85DFc3f79A4ce38", + "0x3a8a6D16d881CD031583A9cba012FCB28433F8Fb", + "0x31Ab616d929C36077719cEA51a8F282f19947361", + "0x4F50A5D866548E0e1c8384Cf41F814f76311B870", + "0x38ED4eE74A51860EbDca9b910b16576543A457B7", + "0x2A8B7BEfE2d09f0c223c97e2B715020B3Abb0671", + "0xe0DBFd05A5A5797984cC7e8b417572D341952233", + "0x6Cb6869C786910B464Ec8Ebeaa91A09C3A7A4fB0", + "0x3804581574d3A6638277322E928A302464b42271", + "0x3878850b205B8f343Dad2CDC233A07F9337C273e", + "0xF6a3E963802B045ECDEe414d4Ef8bbf29dF05CeE", + "0xd6C68D579280f99ebe30A8fda0198c04ACcBbed5", + "0x7f156E548E11430eF52e7671fA556450aBB99485", + "0x4986A739d418644e03FC196c4B8Ab28b0d70BEFB", + "0x9065D36bFa59026d6ADA6b9CC567e5Ce73752065", + "0xe072F8e02A0Ed5b62136297c7985F01bF9c161c2", + "0x09b3C6d5330b08C34bd4450448d19b493b18637c", + "0xA3Bfe361210A9A379706E9eAA7652148b73c7A9c", + "0x1793581129F85afa702a70e6C031D58547ccaB67", + "0x54d207445DC1c82FA3Ce48Ae3f8Df3dac45090dF", + "0x4e84a2A79457DF5781052633e241617409489788", + "0x6AB7bDF300767C80Bf65ff77c2d7F362D0D93714", + "0x03e4fAE892Fe74f61BfEd65AB8C57f65204307E5", + "0xC975806Ab3D9080742EDf223Dcef9Fb6cC4D9EFF", + "0x2AffB47075B57066F43bedcb19b1f4072b68a4cE", + "0xA2D7318c4860324bDb13962308eda851db482992", + "0x430e458d39154fFE80C1f305F8E6ACCE135A5116", + "0xB5938e7B8926B0ce5e902679f6DD6FffF902EB26", + "0x212A347460ee42670e8a787387c38a6a890758bd", + "0x4E27BDaFf2AF810e90445E94401375A1d6c2B4f1", + "0x7d5e34F0c7DF21663fFBfd5cCbB818c473e07323", + "0xe605d13196B13AA513984e6d75eC93e52513BB62", + "0xb4efF2dECc0524D500F5bbdf1E7Ad9D99a377901", + "0xa4036F5c328A077843c98D8C6187499FEa386545", + "0xe6fD794dB8aeE9143a01ba2a88026201be328731", + "0x77dB5D00ca2aE07856dB650008f268659c14502D", + "0x222FC8Ca3ec66fA22397fdeF9274e5e3a406A09A", + "0xbf2d6851F0464F44cCa25F8023122C5873f91F91", + "0x14C95cA271Ad18b0a3fac33Fc66e4B521Af01A43", + "0x8722cD1990b556a3a6AEB484875a86C82A91F53f", + "0x7b05360b4303235Feae3821Ba47dEC3c114Cc2bF", + "0x4aa7705628f57328C42146f74111c14A49870296" + ], + "pagination":{ + "currentPage":1, + "resultsPerPage":200, + "resultsCurrentPage":91, + "totalResults":291, + "totalPages":2, + "hasNextPage":false, + "hasPreviousPage":true + } + } diff --git a/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_empty_page.json b/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_empty_page.json new file mode 100644 index 000000000..46083f4ba --- /dev/null +++ b/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_empty_page.json @@ -0,0 +1,14 @@ +{ + "results":[ + + ], + "pagination":{ + "currentPage":2, + "resultsPerPage":200, + "resultsCurrentPage":0, + "totalResults":291, + "totalPages":2, + "hasNextPage":false, + "hasPreviousPage":false + } + } diff --git a/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_full_0.json b/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_full_0.json new file mode 100644 index 000000000..8b3c91c06 --- /dev/null +++ b/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_full_0.json @@ -0,0 +1,213 @@ +{ + "results":[ + "0x03FB91643C85fEffEe96a2C627f23A3141392672", + "0x10FafE48F09CD304E26F704a7EE743c4CbDc61C1", + "0x22189501c463542E035920308c3E48D5F97C8618", + "0x7800cf4DdE7ddff57faFa5bCD7f0BB281608831B", + "0x6b24eEFA6894B75f0D5A37F00AB975d9730317Fb", + "0x4046d9265f3a2E9b0Ba8EE61A1a8bC8093CEfd53", + "0x491847c0314073e0454cFc3bf6cf080129c3f5D2", + "0x61F91266F6abEA61447E00EB781A3c38a3D1b925", + "0x5eA613995FA19955E63adc2389F69BC7Ce119d76", + "0x4a797b122dF28E3782Bbb7ccA31a802F11B96f75", + "0xF190579aE5E6aac6cEBA5ea3F48DAC66C93925c2", + "0x7aA3BaaCf28d344B499faed1D80579A8C65487af", + "0xC2e3E03dFce83913EAb31F78238a625B07378f8B", + "0x7Cdfd56883ADCA47f787A251511B5A36e2A2f7e0", + "0xFfdb1c4aCe237B10ef5Bd83ec2e6E24D2784225c", + "0x9Ca449fAa18F85a60e918Acad38702831C7D605e", + "0xB759a0fbc1dA517aF257D5Cf039aB4D86dFB3b94", + "0x0233034E099689626632fc111fBc98B0FF69ce2C", + "0xF8Ec125B2FD4585808429d29c0C4891E930b4F64", + "0x7b7F2a9DD1281Fb31ec0e216dC327d310132818B", + "0x007B4BaD196fac913Bc40E0d600Bd827Fdf52327", + "0x03237c372AcD10Cc749253a2ea2aAfBfD49C6A18", + "0x0A100F4fbcDC3584066F2f56094140Bb5F5fA85E", + "0x1D4c151bFba703Ed6279D603d88257a654ab0010", + "0x182A0a24C09Afa4B60CA25E7Ad23e992114c10Ed", + "0x16E117f9d3e0952a07CaCC448CEe548cad123Ea9", + "0xd57866e5b0616A7d5De614877b73facA5C0BE38b", + "0x1A7Da4B2C86Cb3Db8D71982d705f3c67EE82f641", + "0x2153F4a139825Af5813ea6F23922075FceB3A074", + "0x1a6f9E92036752eD432602f99A288C12643323d7", + "0x232f7a267817794301A4ac585799127f1b997BD8", + "0x1cc073e86Db434df912D35B26fC2b41c46a78A2a", + "0x158fB6a68BE5c264329E3A89Fa9F281925776360", + "0x25b6031127505279711B665e7B5658d6963E579f", + "0x19a5E5CfcB447FB888C8BD1e4B88CAD2416e0D89", + "0x217dbC106AA40479Cf367C1191a59FBBB6C85Bc6", + "0x2639823b88436aa3da35CDbC84eDD7fb2FeD1ceE", + "0x2E84400877422B632B89861F7F7a5D4b9160B78C", + "0x21c12A8A12240417ECcFCe47645152EEbaaB8035", + "0x326A7aC28Ca63CD928203A1645e879A0D884273e", + "0x358eB0B54D7f7dF4360902dC89B2C5C13A7914a6", + "0x2df609D3468a228b4a6f753B5816128D7f88A815", + "0x3d4BA2E0884aa488718476ca2FB8Efc291A46199", + "0x41675C099F32341bf84BFc5382aF534df5C7461a", + "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762", + "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526", + "0x3C74f783A3F50651dD116eE8432B15B418607F23", + "0x4AFEDf780306fa38AF081b1B1aAdA918C8941715", + "0x33340BdC56E220741846684A93E7E08D4495Dca6", + "0x34b9F2E1d9eF8e270E5AF6e0991bc8023E9906C3", + "0x24390e1F72Fba16f781F6AF41542572bb5bFca42", + "0x38e313d8Dd5B50303A8444bdfc4035CDc1C431F6", + "0x5d8D06480DEAD91c22D9fe4CEA4D39Bd803a3f8b", + "0x4874c1EC02c122Dfb29C994264dFCC4aD9FA8b96", + "0x48E46B50392051B2f7f8204F7f1bd6b4CD981542", + "0x32Cf4dCFfdc6Ed1a045f212Eacc7ed8a1E94f530", + "0x69e6d1F85BB4E051C24ee5D2B9341E1F735A3454", + "0x38FF18441b182ac603aADCA8ADDb257c6F5d103d", + "0x4B7228e9b9A257b02C967686FcDD64c24AaEDCF7", + "0x57633118AeB78f8b91de4335119394e0604Dfd73", + "0x4b54A40d85F6a7b6A7827eE00c91aEbcf3E735d8", + "0x3E0B62d747C91275251F66fb243ae90FDCaD17f9", + "0x71AcC47973da2E4a484caF7272Da162F4Dd8F49b", + "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67", + "0x4b7FCD597369084cEDFbd8BbCC176E66777EDF96", + "0x7733B83BE36eABFc9BD1e29EB4B0f76792608DDe", + "0x736cbB6a7E2e794b44270DFe718b8830d53943A2", + "0x670f102d04cEa00e4D58dcc8Db98fFaF010e5A52", + "0x77CBEC6F2a0B08fF0DC1c026012ddB4ea651871F", + "0x4188A7d16f65F105603D243EdFe00E20C4c7f204", + "0x64edf78B053C620655B5e8D0C3539Ffb7e6A103a", + "0x5cAaA62aD13Ed1D8bD595E7aafeE2fC43735A7Bc", + "0x70198180C230169b82d3822eA264D9d06C723C61", + "0x63c13Ee9BecC8f35dC034F026Ae8d18A4D1E7f0E", + "0x9D8446FB7d8626634307E87b1E6835BB730C666F", + "0x7DB90F79acAB311271E217b4712082d250F8e8d7", + "0x9a15222BBE0Ef08432fed68B86c919088fc0BbDF", + "0x68BD195a1333acf4e59F4BABE70D343CfeE34b12", + "0x6b8DCFe8EF413CAa36d71d9D6E5b13cfF4fe8780", + "0x6522f92B1F5d3F849BFe2560c487f5E0aCd29Ca6", + "0x817a471763D28064A29E38D9877cBD8372035cFF", + "0x70B46Dc19E7372e67c50E9076F2BE8291FDFB416", + "0x9b35Af71d77eaf8d7e40252370304687390A1A52", + "0x9245483dB42fFa2087b0577bF247a0cbaaef2E84", + "0x7aD14dBBfD642AD6f7713228e427B1a92e6E851D", + "0x8e29375FE5Db7eBb1b5eF24B7D397bBF0B01De09", + "0x9641d764fc13c8B624c04430C7356C1C7C8102e2", + "0x7C1839b90cfAaE49EaEa9f6fa312eAb148d64070", + "0x9d479Cab252338eCE2FFc690EE4D4b14E32b2895", + "0x8A53e60A3f448bBB1d00C8B29440E59Ba4ec3f57", + "0x95bCB5194140101941917770419Ac2347c1ecbc5", + "0x7F67316a754f3953617FEA14227ccC4E018f4E7b", + "0xA03c4CDB6f1174F7efa649dD7F96E8ccdeC4a656", + "0x968989eDFAB00952B5F38130Fe6178f82d54590e", + "0x2B3a1D3d5e60767BDAd69A717A7538265e7ac1cb", + "0x47b0a432C455804Fc2A5cAe1685Dd224EB104aCF", + "0x744c272c12D6c2417a0a99C69CaAD3719bc14E1C", + "0x63E22Ba5c1472a8EeDF5de4B7C454D5554c584a1", + "0x9A4c4c4875Ab8f61D3Ce53440a3569273DA6b251", + "0x91ebF577eE06A581536606f0070281dB7e0690fd", + "0xA3D25E562022290ab03797A1c023942AD0fA5F91", + "0xAddf9f82eFb4a4dC555e9f83EB66fE6e608eF4Bc", + "0xA48361Bb19F3b4985F23fAf69D94602186399994", + "0xE46FE78DBfCa5E835667Ba9dCd3F3315E7623F8a", + "0xB5611327e3EAB4bb1FB9A91DE1f324b8C3F20c6C", + "0xB7eEB78904F35744993885282544be64edF49260", + "0xE6fbCC04F4f41bFb6DF3388329C86C77aea765ae", + "0xC16d9b4AD3c3B45fAb5d8F79ba986069E4403c58", + "0xFe49e0f2eAab84558047Bdd7AF738c1a22F9C83b", + "0xDAE0C24bF069dCe60bdAB9658465C7e8e5b03c99", + "0xA529a66f14f9596c5D65cb5bc81D59ac8B4b9FE5", + "0xA878ed2d60B3E71E8A8713c5c0416090D8e7Cf5D", + "0xF1cfAB193bbA41541601da794d0e850b0A09b92D", + "0xAf99bbA160E1d372f96de8BBd39425E3FFd2fe7D", + "0xca5B5E9371e6AedD850a74554a53BA91D2D3508d", + "0xD10446709EB406C25B6E4E7F7cd0D5B0B7F48A19", + "0xC2D303eE8ED966D0085D17717a36E5432F0E588a", + "0xd53cd0aB83D845Ac265BE939c57F53AD838012c9", + "0xdFA7c11836795ACd291401ed691073B40B1905D2", + "0xd64a57003526ECe2e360b25A556963aB6E38407E", + "0xdB3B75E1e96a025cb86Ff105EA6711e5648671B5", + "0xdAB5845136b3102E63023BB2A2405cb71608605d", + "0xD538C945FB8E7d936BC2BAC43C2f1720c9f24CB7", + "0xf125A87614fe2Da9d815f5943EDfeF6bB3E0B521", + "0xe316e0f08A1c5c7bAfF7CCB5CD2F517033368Bb5", + "0xefe86329296Bf2f2fB3C4fF5545Dca8736fB2e71", + "0xd9FBE086D149a83039bc291b7101e892F53BD431", + "0xeDCF620325E82e3B9836eaaeFdc4283E99Dd7562", + "0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99", + "0xeCcC3f1D9Bed269435F5737B6718Fc0F86d1b0E2", + "0xe32aCE0B1C29a632d33E60Cc9390bA839ba3Ea29", + "0xf814C57dd49d3E236b8da5ad922BFdCea769eb26", + "0xf2bca0D4F38FB75B54B31A0EEa48247530E00823", + "0x62894583eADbabeacAb516449c5ca9515a4F18f4", + "0xF95BFff26FE2d5e93a61AB453181014bFBc3d2F4", + "0x2cee812ad2159Eb22D8403ccF494216BCC9cbDD4", + "0x998ae49baF9903d28506b332266dCCA2dD8156FF", + "0xCf05273778a80416098eC9219F40caaEe9b27A36", + "0xC44a45106fDBE8550164251cf0CEF95889E7786e", + "0xCC7dd438AA2920DdDDee4AE207CB6Fa974e53b88", + "0x94Ab46C6568701F01FA4bc6c46c1E2CaA85B5812", + "0x20b9434f61087bD66883b1Bb44f09840E78C8891", + "0x0f7eD316BC3684ADBD5f87aBD04a6D3485AB4E3E", + "0xe47240B6324D446B449a2D1A969A0EEFb5525C03", + "0x50179b8820E9e0cA483Af605A1b1B2Ba93094d89", + "0x04D68c8B7676cC6bc8d43d7135eaB4c382b20bC8", + "0xf9Ec4CCcb5E467898E57E44b519361af71827B06", + "0xf29e9b50b82C0ecd573dc89ee49aA3e1247Dd9bF", + "0x4407bc06B68Cf301A4BF886E3a46B3F294BD74b6", + "0x2973E4147313d87DC576a09Cc5D34026A7e0de4F", + "0xE00DA572A941363C82dfC81C56B44Cc22925A213", + "0xD30906E081D6E7bf55A5438C245FbdABb5313464", + "0x16a8B86D12F317d7c90d808775193d64BB5481Bc", + "0x89b752C3e272feBA17B363EaaBFe0d653cF75bE7", + "0xE3Cc97a969e7B032e33d6b45a6fB9363Db942BB5", + "0x33E8a07E6921d82e695d2253952c664c1213b966", + "0xa24dbc5083c8E2a50e48a6778849bAd96A5A41C1", + "0xf0B446FaA9132538d235042d9c44d8Eb498d1894", + "0x03569510878C804C599bA6b4D4dE879F4618c77F", + "0xb1bAF46e881166F86f23238050Be2a437ccD3ad9", + "0xf151819D2295F0e22B4270c51eD0018051ED3ad6", + "0xb403C1e931a879dB63AF936FE1aaA28f184e25f7", + "0xC4FD0Bb68C10241A8010b9502dD6bF099458DEB8", + "0x13AEcEA617AaEfB9A89b237f389D61499e0325AC", + "0x1FA563f951075E9bc32426E63560cd230318b22B", + "0xa96E0E7E684512d0B340673fEbe3475e2502a784", + "0xB7789f966565aadeA349A3B472BE7ff9C06d3490", + "0x3b3223Ccf802E295202917330c59BD50f74d20aE", + "0x0b97898Eaed8337ee38722BeEbeF0D80D64beDFD", + "0xb4914dfeC7f70C708673620eDF6d8839F81E7612", + "0x9B62e7DA903Bfce035aB2866AC7D2f573B1890B8", + "0x8F3cd201e6557b26d3dd08DB822312Ad9A31BC71", + "0xdA412123a3Cc0D921bcf7246f8742e3b7c3E7b94", + "0x7023395e15D89995012bEF7d39322887B2DdF812", + "0xB78c972C0D3de0Cf8c860679854c05D6F5D8c7bA", + "0x186Cbd0D42f51F241BCafEe7E06439cded80D0eb", + "0x86C2C4f2a531d386dc70857B720977F7F50f8c39", + "0x4252C6b9d61447Ef75196c4e2178B6B7c8e0b540", + "0x243E9b626Bc3ca61795600ED5295377423cd4E69", + "0x4D6E11b6E85eC442eD46870ee00b5857B492cFa8", + "0x8327cb800754Be018ddF94e090610C5E11Af2D36", + "0x1068d3fa14f0AC485406a0E47F999B54687Ec223", + "0xfdaE79613aaBf232Ec651a2247dF4B157fD48d1B", + "0x2E86389aae27Dc5256752C4537Fd490Eea01dF38", + "0x40b81e081b1aF09875a07376bdAD27507774e9a3", + "0x88b627Dd6c038890eE5E5bC95FfcA0C4dFe4F1f3", + "0x7DaeD75C38dcADea86b6CE8885159101082f7829", + "0xBD02eb4e69487Ce55840Ec6Fc9E4Ce5F02B1b268", + "0x3F3D087a9f96ad3aF2c18268C97B9afD3B77709c", + "0x25E00F2c47F19AE2f7B3ed057498549fe1ab2FEB", + "0x8FFf99A2ac1ced949D762e0A6Ac440C5cf6c9D1D", + "0xc5237bCD1553e0c11D0fD42261d0b3307c7a5c32", + "0x20E9424C2c7CC01FDbcBEF065b850892c0280FDa", + "0x1025009DBe0C501091DDB69f1FE16FDf3fb9c9c3", + "0xf92ff60907d1769bA004c217087F36164A547fb6", + "0xEF4c65D1372D23a2635C2ed0D077bB5E4437cC1a", + "0xf7e46a901a68CD80676B5B49062Ce2D3b9b4f44F", + "0xE7F3D50298eb592dE049D7683f4b2923FB811Ea6", + "0xfEcE26D775bbb4E1804E86Afa3A1bA8e1650859B", + "0xA2a25aC7460F04c7d70485e845393f384F47A366" + ], + "pagination":{ + "currentPage":0, + "resultsPerPage":200, + "resultsCurrentPage":200, + "totalResults":249, + "totalPages":2, + "hasNextPage":true, + "hasPreviousPage":false + } + } diff --git a/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_full_1.json b/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_full_1.json new file mode 100644 index 000000000..43b15f971 --- /dev/null +++ b/analyzer/evmverifier/sourcify/testdata/get_contract_addresses_full_1.json @@ -0,0 +1,62 @@ +{ + "results":[ + "0x7af1775384ADFfd60dc01f4ed859Dc8dfC3ce0eF", + "0xfbE6D1e711CC2BC241dfa682CBbFF6D68bf62e67", + "0xD68911F91f766B37d899C2088f5966bD3Ea39Ba4", + "0x9aE8b78C4EC536Bde9DbF36E05E68cFBB4b82B15", + "0x4a8140416fccd8983A113c0C0E92A3D35Dc1ED48", + "0xAB85BA9258bde200d23C95944D167BA1a06fBce4", + "0x849E4133c166deb1B912506077208BB37473B0Ab", + "0xdc26bf8E0e5FEA1d308CAFb75251DFC83dFad4cE", + "0x6ce5E130d0FA14141520618Aef8E1bdD7fb47C76", + "0xFC1A5eCaDC976754946A067cF85DFc3f79A4ce38", + "0x3a8a6D16d881CD031583A9cba012FCB28433F8Fb", + "0x31Ab616d929C36077719cEA51a8F282f19947361", + "0x4F50A5D866548E0e1c8384Cf41F814f76311B870", + "0x38ED4eE74A51860EbDca9b910b16576543A457B7", + "0x2A8B7BEfE2d09f0c223c97e2B715020B3Abb0671", + "0xe0DBFd05A5A5797984cC7e8b417572D341952233", + "0x6Cb6869C786910B464Ec8Ebeaa91A09C3A7A4fB0", + "0x3804581574d3A6638277322E928A302464b42271", + "0x3878850b205B8f343Dad2CDC233A07F9337C273e", + "0xF6a3E963802B045ECDEe414d4Ef8bbf29dF05CeE", + "0xd6C68D579280f99ebe30A8fda0198c04ACcBbed5", + "0x7f156E548E11430eF52e7671fA556450aBB99485", + "0x4986A739d418644e03FC196c4B8Ab28b0d70BEFB", + "0x9065D36bFa59026d6ADA6b9CC567e5Ce73752065", + "0xe072F8e02A0Ed5b62136297c7985F01bF9c161c2", + "0x09b3C6d5330b08C34bd4450448d19b493b18637c", + "0xA3Bfe361210A9A379706E9eAA7652148b73c7A9c", + "0x1793581129F85afa702a70e6C031D58547ccaB67", + "0x54d207445DC1c82FA3Ce48Ae3f8Df3dac45090dF", + "0x4e84a2A79457DF5781052633e241617409489788", + "0x6AB7bDF300767C80Bf65ff77c2d7F362D0D93714", + "0x03e4fAE892Fe74f61BfEd65AB8C57f65204307E5", + "0x2AffB47075B57066F43bedcb19b1f4072b68a4cE", + "0xA2D7318c4860324bDb13962308eda851db482992", + "0xB5938e7B8926B0ce5e902679f6DD6FffF902EB26", + "0x212A347460ee42670e8a787387c38a6a890758bd", + "0x4E27BDaFf2AF810e90445E94401375A1d6c2B4f1", + "0x7d5e34F0c7DF21663fFBfd5cCbB818c473e07323", + "0xe605d13196B13AA513984e6d75eC93e52513BB62", + "0xb4efF2dECc0524D500F5bbdf1E7Ad9D99a377901", + "0xa4036F5c328A077843c98D8C6187499FEa386545", + "0xe6fD794dB8aeE9143a01ba2a88026201be328731", + "0x77dB5D00ca2aE07856dB650008f268659c14502D", + "0x222FC8Ca3ec66fA22397fdeF9274e5e3a406A09A", + "0xbf2d6851F0464F44cCa25F8023122C5873f91F91", + "0x14C95cA271Ad18b0a3fac33Fc66e4B521Af01A43", + "0x8722cD1990b556a3a6AEB484875a86C82A91F53f", + "0x7b05360b4303235Feae3821Ba47dEC3c114Cc2bF", + "0x4aa7705628f57328C42146f74111c14A49870296" + ], + "pagination":{ + "currentPage":1, + "resultsPerPage":200, + "resultsCurrentPage":49, + "totalResults":249, + "totalPages":2, + "hasNextPage":false, + "hasPreviousPage":true + } + } diff --git a/cache/httpproxy/caching_http_proxy.go b/cache/httpproxy/caching_http_proxy.go index 9b00b68e8..ff132bc51 100644 --- a/cache/httpproxy/caching_http_proxy.go +++ b/cache/httpproxy/caching_http_proxy.go @@ -37,15 +37,16 @@ type CacheableResponse struct { func (p cachingHttpProxy) ServeHTTP(w http.ResponseWriter, req *http.Request) { // Rewrite the request URL to new host - targetURL, _ := url.JoinPath(p.targetHost, req.URL.RequestURI()) - req, err := http.NewRequestWithContext(req.Context(), req.Method, targetURL, req.Body) + targetURL, _ := url.JoinPath(p.targetHost, req.URL.Path) + proxyReq, err := http.NewRequestWithContext(req.Context(), req.Method, targetURL, req.Body) if err != nil { panic(fmt.Sprintf("error rewriting request to %s %s: %v", req.Method, req.URL.String(), err)) } + proxyReq.URL.RawQuery = req.URL.Query().Encode() // Get the response to the modified request (via cache) - cResp, err := kvstore.GetFromCacheOrCall(p.cache, false, kvstore.CacheKey(req.URL.RequestURI()), func() (*CacheableResponse, error) { - resp, err2 := p.client.Do(req) + cResp, err := kvstore.GetFromCacheOrCall(p.cache, false, kvstore.CacheKey(proxyReq.URL.RequestURI()), func() (*CacheableResponse, error) { + resp, err2 := p.client.Do(proxyReq) if err2 != nil { return nil, err2 } diff --git a/tests/e2e_regression/damask/expected/db__contract_gas_use.csv b/tests/e2e_regression/damask/expected/db__contract_gas_use.csv index 63bf8290d..6e66d0946 100644 --- a/tests/e2e_regression/damask/expected/db__contract_gas_use.csv +++ b/tests/e2e_regression/damask/expected/db__contract_gas_use.csv @@ -1,5 +1,6 @@ runtime,contract_address,gas_used,created_at emerald,oasis1qp09pty0mw4ul7qqlev3gy5f6q00qv2z3yxl9gk2,, +emerald,oasis1qp2n5crda4ardp34y2hefrzj94hpnwz8mvclc89f,, emerald,oasis1qp40vf7w2etyhfqaxeq9hx8zngwyfz9s3qj38gw3,, emerald,oasis1qp8944l2qcg7pj5v47dv9fat83j3vur6fufn69st,, emerald,oasis1qp8x3hp8d00skra5pgjp7dvqum29en8vcg8hjvuc,, @@ -17,6 +18,7 @@ emerald,oasis1qpu0nr8sg3uecyl0yusajumnxdjvf7njtymw5neq,, emerald,oasis1qpu6mmpr0j0xn64re8vdfdkphcn44jkp45zhkcfr,, emerald,oasis1qpzdjjhnhddd2ry46hnemw0ahanf907xdcg77u6q,, emerald,oasis1qq0zfahg9s3majhhdmhey4k32hs0tufzes8axptt,, +emerald,oasis1qq4hp3mfsp2vvfqlt35tn59h4cx08wyd2vlrpxx7,, emerald,oasis1qq5wgup84qrap8k9hq9d99zx35rqj0hx9spz9ld0,, emerald,oasis1qq60pyh8rrrmnpv3q222wp0t7qe4q75pavp682zk,, emerald,oasis1qqa9m9z6gjezll3eqekqnylph70uks88vgrsamex,, @@ -28,6 +30,7 @@ emerald,oasis1qqfmvrywd8alavrcddyhx520xsa0mku70vf5e0az,, emerald,oasis1qqg5uds4zjys9fs8509vh502apa5w2nz0ypy4a64,, emerald,oasis1qqjkthcmc78v606vklceh23mzhrylser4c8rs0kr,, emerald,oasis1qqkcynmpm5tj9thyfq0fg5k2slvdap9teu02n77d,, +emerald,oasis1qqkyg72kffgjyxtcdv0qqrg029c0jtrd9ssz9p4m,, emerald,oasis1qqnu9prrj5nddz3ccpnm5vkq92j3cncy5vdasvsm,, emerald,oasis1qqqr6r25urm0y8dy5nj3sdwghv2q8h05r523cc4a,, emerald,oasis1qqrrud0dzcdhxfxcj4nj0ag4ydr7xdxxwqx2epy2,, @@ -59,6 +62,7 @@ emerald,oasis1qrncdetcszru0vanfgk2empsy3t3ucm3rcrsvrea,, emerald,oasis1qrr6tjx0tkxe9cnew9gcu6gxjs0dy9spjyrszlf4,, emerald,oasis1qrxwxmc6x79mfypgvnpjtadq432yeu04us4qkkss,, emerald,oasis1qz2rynvcmrkwd57v00298uc2vtzgatde3cjpy72f,, +emerald,oasis1qz3vfhgy3wvf5djhnjlmxf6lpxkmt86lzys8cpwl,, emerald,oasis1qz5psjrn94jrsa4k4fkjwjg39uga0mce5cuaj9la,, emerald,oasis1qz6uvey3ge99kvj5z8yl4hs635gunehyc54adgk6,, emerald,oasis1qz6zpqqllhqk0wjz2uqgwfzdan9k38npqqd4l25x,, @@ -69,6 +73,7 @@ emerald,oasis1qzdqfu06mgwpad0sk7p68ff5j0h9vkssk59tf9jg,, emerald,oasis1qzftgnpq09kj3745p4pdvdekgfjz8k24qg006rgf,, emerald,oasis1qzga6l8qt7fqj6yycza2yknur45yvzseyy7lqk5w,, emerald,oasis1qzj2hwfs3yjm20jz5h70yk3etsst0k8s3cnl6l08,, +emerald,oasis1qzjjq5zutzc047lzm5yxvnjp348zacxmvckzwqj0,, emerald,oasis1qzkrq8jrrt96fzxq8j0z88683e4vhf4a5cy3qrc5,, emerald,oasis1qzmdhwdwfl4ycwckf4dqj4705h7kf4uj0ypz6k2m,, emerald,oasis1qzn4rlatderdcdt02u90daer47wkt79mrygcwc2q,, diff --git a/tests/e2e_regression/damask/expected/db__evm_contracts.csv b/tests/e2e_regression/damask/expected/db__evm_contracts.csv index 8f9d1e90b..54a466fdc 100644 --- a/tests/e2e_regression/damask/expected/db__evm_contracts.csv +++ b/tests/e2e_regression/damask/expected/db__evm_contracts.csv @@ -1,11 +1,12 @@ runtime,contract_address,creation_tx,abi_md5 emerald,oasis1qp09pty0mw4ul7qqlev3gy5f6q00qv2z3yxl9gk2,,37f73a0d935e20288628373578da84c2 +emerald,oasis1qp2n5crda4ardp34y2hefrzj94hpnwz8mvclc89f,,3fab402c39c3cf4588bd8a5179c3c8bf emerald,oasis1qp40vf7w2etyhfqaxeq9hx8zngwyfz9s3qj38gw3,,6116322dfe48a0b922335a7ec6d630d7 emerald,oasis1qp8944l2qcg7pj5v47dv9fat83j3vur6fufn69st,,894564ad90a01f4390b999521dbcb78b emerald,oasis1qp8x3hp8d00skra5pgjp7dvqum29en8vcg8hjvuc,,aba60080aaccbcf09b88d49906befdea emerald,oasis1qpac768gep2hrnvuy4f4euhmynjgm6wg9uph38a3,,15c47d824aebd80e345231f872a290c1 emerald,oasis1qpal7x2mn0d0jqa7wtyh7wf3klftp6aufcgzjekt,,b67b4aeee9aa7f800d56d05e0008e06e -emerald,oasis1qpdjtgwrh5q4r9vlzkkvryypy6y67muw5sa6r60e,,5fa5276bd46194da193606a06d89982a +emerald,oasis1qpdjtgwrh5q4r9vlzkkvryypy6y67muw5sa6r60e,,7a7bc7884b02f7249ecf20a4b03dfd0c emerald,oasis1qpe2wmc3ejv72veal0eqyjwlhn0d3hgwyuxaw32u,,589ccfb03d2fdd2cf9a44c8a96a494dd emerald,oasis1qpfgyflwtk6a6f6vyc5zkp9dmnlnfy5kcc3ty6ug,,a69d4300d7ee84a79b99ef1379b82dc8 emerald,oasis1qpgcp5jzlgk4hcenaj2x82rqk8rrve2keyuc8aaf,,6445aff5878851cded521af2474b904b @@ -17,6 +18,7 @@ emerald,oasis1qpu0nr8sg3uecyl0yusajumnxdjvf7njtymw5neq,,aba60080aaccbcf09b88d499 emerald,oasis1qpu6mmpr0j0xn64re8vdfdkphcn44jkp45zhkcfr,,fd029f87a39a1743ef37d37a08be2387 emerald,oasis1qpzdjjhnhddd2ry46hnemw0ahanf907xdcg77u6q,,f15bcafe906358e49c4cbb2247bca0d9 emerald,oasis1qq0zfahg9s3majhhdmhey4k32hs0tufzes8axptt,,3973c271618ca4e5aac7743c6d8197c4 +emerald,oasis1qq4hp3mfsp2vvfqlt35tn59h4cx08wyd2vlrpxx7,,5b0bf1f49d50097cf842cbdc456e470b emerald,oasis1qq5wgup84qrap8k9hq9d99zx35rqj0hx9spz9ld0,,36a90464ca126c115de42ce274954e6d emerald,oasis1qq60pyh8rrrmnpv3q222wp0t7qe4q75pavp682zk,,93be14273840269309380506300c90e1 emerald,oasis1qqa9m9z6gjezll3eqekqnylph70uks88vgrsamex,,aba60080aaccbcf09b88d49906befdea @@ -28,6 +30,7 @@ emerald,oasis1qqfmvrywd8alavrcddyhx520xsa0mku70vf5e0az,,f15bcafe906358e49c4cbb22 emerald,oasis1qqg5uds4zjys9fs8509vh502apa5w2nz0ypy4a64,,c70288bf6be5e8c9cb62444454cc83a5 emerald,oasis1qqjkthcmc78v606vklceh23mzhrylser4c8rs0kr,,6fc0ddfa5f061ab14f52ef630be7f7f5 emerald,oasis1qqkcynmpm5tj9thyfq0fg5k2slvdap9teu02n77d,,9bf4ffba7a8bd1efeeaef57b71e183ad +emerald,oasis1qqkyg72kffgjyxtcdv0qqrg029c0jtrd9ssz9p4m,,08c7610a303ab55ebe5a2fa0dc82b004 emerald,oasis1qqnu9prrj5nddz3ccpnm5vkq92j3cncy5vdasvsm,,4873684c5e22769e0d76327ee3c2de2c emerald,oasis1qqqr6r25urm0y8dy5nj3sdwghv2q8h05r523cc4a,,448a1263e2f6d68c49a8ba3f0e104821 emerald,oasis1qqrrud0dzcdhxfxcj4nj0ag4ydr7xdxxwqx2epy2,,184e087e271e4b969c501ba3750b24ff @@ -59,7 +62,8 @@ emerald,oasis1qrncdetcszru0vanfgk2empsy3t3ucm3rcrsvrea,,38bc9bb14aff0f5bce484050 emerald,oasis1qrr6tjx0tkxe9cnew9gcu6gxjs0dy9spjyrszlf4,,fe3d71f543e79c76c9fd14b469ae8ce7 emerald,oasis1qrxwxmc6x79mfypgvnpjtadq432yeu04us4qkkss,,960b5cfd07fb2dcc1acfc49039721915 emerald,oasis1qz2rynvcmrkwd57v00298uc2vtzgatde3cjpy72f,,f15bcafe906358e49c4cbb2247bca0d9 -emerald,oasis1qz5psjrn94jrsa4k4fkjwjg39uga0mce5cuaj9la,,5fa5276bd46194da193606a06d89982a +emerald,oasis1qz3vfhgy3wvf5djhnjlmxf6lpxkmt86lzys8cpwl,,6d19ab45e4d109bfb3aacabf883302f7 +emerald,oasis1qz5psjrn94jrsa4k4fkjwjg39uga0mce5cuaj9la,,7a7bc7884b02f7249ecf20a4b03dfd0c emerald,oasis1qz6uvey3ge99kvj5z8yl4hs635gunehyc54adgk6,,ea1b4e8f707451248c5ee84f4968091d emerald,oasis1qz6zpqqllhqk0wjz2uqgwfzdan9k38npqqd4l25x,,aba60080aaccbcf09b88d49906befdea emerald,oasis1qz7dwqren7fh80l9zv7hd0w8x83x6q4nwqcjz4kq,,0496b3be2184ea83d022209667f00905 @@ -69,6 +73,7 @@ emerald,oasis1qzdqfu06mgwpad0sk7p68ff5j0h9vkssk59tf9jg,,b771ddef30f4ac06f29e11ca emerald,oasis1qzftgnpq09kj3745p4pdvdekgfjz8k24qg006rgf,,672586d52e0b7f8745ca375d6881069c emerald,oasis1qzga6l8qt7fqj6yycza2yknur45yvzseyy7lqk5w,,1bbfce8db3733e2f0f2ce33de3298c5b emerald,oasis1qzj2hwfs3yjm20jz5h70yk3etsst0k8s3cnl6l08,,f15bcafe906358e49c4cbb2247bca0d9 +emerald,oasis1qzjjq5zutzc047lzm5yxvnjp348zacxmvckzwqj0,,c78ab33fc0c0047e7c894e14252f8305 emerald,oasis1qzkrq8jrrt96fzxq8j0z88683e4vhf4a5cy3qrc5,,3402c18ed97fdae16f23a6f00f1e1ae6 emerald,oasis1qzmdhwdwfl4ycwckf4dqj4705h7kf4uj0ypz6k2m,,bd90d0504f98aa7ee773a198cefaf3dc emerald,oasis1qzn4rlatderdcdt02u90daer47wkt79mrygcwc2q,,d3ad937669e01db8cb349c541709167d diff --git a/tests/e2e_regression/damask/expected/emerald_contract_account.body b/tests/e2e_regression/damask/expected/emerald_contract_account.body index bf4013d10..bd2a66a36 100644 --- a/tests/e2e_regression/damask/expected/emerald_contract_account.body +++ b/tests/e2e_regression/damask/expected/emerald_contract_account.body @@ -783,45 +783,45 @@ "version": 1 }, "source_files": [ - { - "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity =0.6.12;\n\nimport './libraries/SafeMath.sol';\n\ncontract UniswapV2ERC20 {\n using SafeMathUniswap for uint;\n\n string public constant name = 'YuzuSwap LP Token';\n string public constant symbol = 'LPT';\n uint8 public constant decimals = 18;\n uint public totalSupply;\n mapping(address => uint) public balanceOf;\n mapping(address => mapping(address => uint)) public allowance;\n\n bytes32 public DOMAIN_SEPARATOR;\n // keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\");\n bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;\n mapping(address => uint) public nonces;\n\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n constructor() public {\n uint chainId;\n assembly {\n chainId := chainid()\n }\n DOMAIN_SEPARATOR = keccak256(\n abi.encode(\n keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),\n keccak256(bytes(name)),\n keccak256(bytes('1')),\n chainId,\n address(this)\n )\n );\n }\n\n function _mint(address to, uint value) internal {\n totalSupply = totalSupply.add(value);\n balanceOf[to] = balanceOf[to].add(value);\n emit Transfer(address(0), to, value);\n }\n\n function _burn(address from, uint value) internal {\n balanceOf[from] = balanceOf[from].sub(value);\n totalSupply = totalSupply.sub(value);\n emit Transfer(from, address(0), value);\n }\n\n function _approve(address owner, address spender, uint value) private {\n allowance[owner][spender] = value;\n emit Approval(owner, spender, value);\n }\n\n function _transfer(address from, address to, uint value) private {\n balanceOf[from] = balanceOf[from].sub(value);\n balanceOf[to] = balanceOf[to].add(value);\n emit Transfer(from, to, value);\n }\n\n function approve(address spender, uint value) external returns (bool) {\n _approve(msg.sender, spender, value);\n return true;\n }\n\n function transfer(address to, uint value) external returns (bool) {\n _transfer(msg.sender, to, value);\n return true;\n }\n\n function transferFrom(address from, address to, uint value) external returns (bool) {\n if (allowance[from][msg.sender] != uint(-1)) {\n allowance[from][msg.sender] = allowance[from][msg.sender].sub(value);\n }\n _transfer(from, to, value);\n return true;\n }\n\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {\n require(deadline >= block.timestamp, 'UniswapV2: EXPIRED');\n bytes32 digest = keccak256(\n abi.encodePacked(\n '\\x19\\x01',\n DOMAIN_SEPARATOR,\n keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))\n )\n );\n address recoveredAddress = ecrecover(digest, v, r, s);\n require(recoveredAddress != address(0) && recoveredAddress == owner, 'UniswapV2: INVALID_SIGNATURE');\n _approve(owner, spender, value);\n }\n}\n", - "name": "UniswapV2ERC20.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/UniswapV2ERC20.sol" - }, { "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity =0.6.12;\n\nimport './UniswapV2ERC20.sol';\nimport './libraries/Math.sol';\nimport './libraries/UQ112x112.sol';\nimport './interfaces/IERC20.sol';\nimport './interfaces/IUniswapV2Factory.sol';\nimport './interfaces/IUniswapV2Callee.sol';\n\ninterface IMigrator {\n // Return the desired amount of liquidity token that the migrator wants.\n function desiredLiquidity() external view returns (uint256);\n}\n\ncontract UniswapV2Pair is UniswapV2ERC20 {\n using SafeMathUniswap for uint;\n using UQ112x112 for uint224;\n\n uint public constant MINIMUM_LIQUIDITY = 10**3;\n uint public constant LP_FEE_RATIO = 0; // ratio between lp and feeSetToAddr about the fee income\n bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));\n\n address public factory;\n address public token0;\n address public token1;\n\n uint112 private reserve0; // uses single storage slot, accessible via getReserves\n uint112 private reserve1; // uses single storage slot, accessible via getReserves\n uint32 private blockTimestampLast; // uses single storage slot, accessible via getReserves\n\n uint public price0CumulativeLast;\n uint public price1CumulativeLast;\n uint public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event\n\n uint private unlocked = 1;\n modifier lock() {\n require(unlocked == 1, 'UniswapV2: LOCKED');\n unlocked = 0;\n _;\n unlocked = 1;\n }\n\n function getReserves() public view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast) {\n _reserve0 = reserve0;\n _reserve1 = reserve1;\n _blockTimestampLast = blockTimestampLast;\n }\n\n function _safeTransfer(address token, address to, uint value) private {\n (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));\n require(success && (data.length == 0 || abi.decode(data, (bool))), 'UniswapV2: TRANSFER_FAILED');\n }\n\n event Mint(address indexed sender, uint amount0, uint amount1);\n event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);\n event Swap(\n address indexed sender,\n uint amount0In,\n uint amount1In,\n uint amount0Out,\n uint amount1Out,\n address indexed to\n );\n event Sync(uint112 reserve0, uint112 reserve1);\n\n constructor() public {\n factory = msg.sender;\n }\n\n // called once by the factory at time of deployment\n function initialize(address _token0, address _token1) external {\n require(msg.sender == factory, 'UniswapV2: FORBIDDEN'); // sufficient check\n token0 = _token0;\n token1 = _token1;\n }\n\n // update reserves and, on the first call per block, price accumulators\n function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private {\n require(balance0 <= uint112(-1) && balance1 <= uint112(-1), 'UniswapV2: OVERFLOW');\n uint32 blockTimestamp = uint32(block.timestamp % 2**32);\n uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired\n if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {\n // * never overflows, and + overflow is desired\n price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed;\n price1CumulativeLast += uint(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed;\n }\n reserve0 = uint112(balance0);\n reserve1 = uint112(balance1);\n blockTimestampLast = blockTimestamp;\n emit Sync(reserve0, reserve1);\n }\n\n // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k)\n function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {\n address feeTo = IUniswapV2Factory(factory).feeTo();\n feeOn = feeTo != address(0);\n uint _kLast = kLast; // gas savings\n if (feeOn) {\n if (_kLast != 0) {\n uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));\n uint rootKLast = Math.sqrt(_kLast);\n if (rootK > rootKLast) {\n uint numerator = totalSupply.mul(rootK.sub(rootKLast));\n uint denominator = rootK.mul(LP_FEE_RATIO).add(rootKLast);\n uint liquidity = numerator / denominator;\n if (liquidity > 0) _mint(feeTo, liquidity);\n }\n }\n } else if (_kLast != 0) {\n kLast = 0;\n }\n }\n\n // this low-level function should be called from a contract which performs important safety checks\n function mint(address to) external lock returns (uint liquidity) {\n (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings\n uint balance0 = IERC20Uniswap(token0).balanceOf(address(this));\n uint balance1 = IERC20Uniswap(token1).balanceOf(address(this));\n uint amount0 = balance0.sub(_reserve0);\n uint amount1 = balance1.sub(_reserve1);\n\n bool feeOn = _mintFee(_reserve0, _reserve1);\n uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee\n if (_totalSupply == 0) {\n address migrator = IUniswapV2Factory(factory).migrator();\n if (msg.sender == migrator) {\n liquidity = IMigrator(migrator).desiredLiquidity();\n require(liquidity > 0 && liquidity != uint256(-1), \"Bad desired liquidity\");\n } else {\n require(migrator == address(0), \"Must not have migrator\");\n liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);\n _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens\n }\n } else {\n liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);\n }\n require(liquidity > 0, 'UniswapV2: INSUFFICIENT_LIQUIDITY_MINTED');\n _mint(to, liquidity);\n\n _update(balance0, balance1, _reserve0, _reserve1);\n if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date\n emit Mint(msg.sender, amount0, amount1);\n }\n\n // this low-level function should be called from a contract which performs important safety checks\n function burn(address to) external lock returns (uint amount0, uint amount1) {\n (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings\n address _token0 = token0; // gas savings\n address _token1 = token1; // gas savings\n uint balance0 = IERC20Uniswap(_token0).balanceOf(address(this));\n uint balance1 = IERC20Uniswap(_token1).balanceOf(address(this));\n uint liquidity = balanceOf[address(this)];\n\n bool feeOn = _mintFee(_reserve0, _reserve1);\n uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee\n amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution\n amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution\n require(amount0 > 0 && amount1 > 0, 'UniswapV2: INSUFFICIENT_LIQUIDITY_BURNED');\n _burn(address(this), liquidity);\n _safeTransfer(_token0, to, amount0);\n _safeTransfer(_token1, to, amount1);\n balance0 = IERC20Uniswap(_token0).balanceOf(address(this));\n balance1 = IERC20Uniswap(_token1).balanceOf(address(this));\n\n _update(balance0, balance1, _reserve0, _reserve1);\n if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date\n emit Burn(msg.sender, amount0, amount1, to);\n }\n\n // this low-level function should be called from a contract which performs important safety checks\n function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock {\n require(amount0Out > 0 || amount1Out > 0, 'UniswapV2: INSUFFICIENT_OUTPUT_AMOUNT');\n (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings\n require(amount0Out < _reserve0 && amount1Out < _reserve1, 'UniswapV2: INSUFFICIENT_LIQUIDITY');\n\n uint balance0;\n uint balance1;\n { // scope for _token{0,1}, avoids stack too deep errors\n address _token0 = token0;\n address _token1 = token1;\n require(to != _token0 && to != _token1, 'UniswapV2: INVALID_TO');\n if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens\n if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens\n if (data.length > 0) IUniswapV2Callee(to).uniswapV2Call(msg.sender, amount0Out, amount1Out, data);\n balance0 = IERC20Uniswap(_token0).balanceOf(address(this));\n balance1 = IERC20Uniswap(_token1).balanceOf(address(this));\n }\n uint amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0;\n uint amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0;\n require(amount0In > 0 || amount1In > 0, 'UniswapV2: INSUFFICIENT_INPUT_AMOUNT');\n { // scope for reserve{0,1}Adjusted, avoids stack too deep errors\n uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3));\n uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));\n require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'UniswapV2: K');\n }\n\n _update(balance0, balance1, _reserve0, _reserve1);\n emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);\n }\n\n // force balances to match reserves\n function skim(address to) external lock {\n address _token0 = token0; // gas savings\n address _token1 = token1; // gas savings\n _safeTransfer(_token0, to, IERC20Uniswap(_token0).balanceOf(address(this)).sub(reserve0));\n _safeTransfer(_token1, to, IERC20Uniswap(_token1).balanceOf(address(this)).sub(reserve1));\n }\n\n // force reserves to match balances\n function sync() external lock {\n _update(IERC20Uniswap(token0).balanceOf(address(this)), IERC20Uniswap(token1).balanceOf(address(this)), reserve0, reserve1);\n }\n}\n", "name": "UniswapV2Pair.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/UniswapV2Pair.sol" - }, - { - "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.5.0;\n\ninterface IERC20Uniswap {\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function decimals() external view returns (uint8);\n function totalSupply() external view returns (uint);\n function balanceOf(address owner) external view returns (uint);\n function allowance(address owner, address spender) external view returns (uint);\n\n function approve(address spender, uint value) external returns (bool);\n function transfer(address to, uint value) external returns (bool);\n function transferFrom(address from, address to, uint value) external returns (bool);\n}\n", - "name": "IERC20.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/interfaces/IERC20.sol" + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/UniswapV2Pair.sol" }, { - "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.5.0;\n\ninterface IUniswapV2Callee {\n function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;\n}\n", - "name": "IUniswapV2Callee.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/interfaces/IUniswapV2Callee.sol" - }, - { - "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.5.0;\n\ninterface IUniswapV2Factory {\n event PairCreated(address indexed token0, address indexed token1, address pair, uint);\n\n function feeTo() external view returns (address);\n function feeToSetter() external view returns (address);\n function migrator() external view returns (address);\n\n function getPair(address tokenA, address tokenB) external view returns (address pair);\n function allPairs(uint) external view returns (address pair);\n function allPairsLength() external view returns (uint);\n\n function createPair(address tokenA, address tokenB) external returns (address pair);\n\n function setFeeTo(address) external;\n function setFeeToSetter(address) external;\n function setMigrator(address) external;\n}\n", - "name": "IUniswapV2Factory.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/interfaces/IUniswapV2Factory.sol" + "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity =0.6.12;\n\nimport './libraries/SafeMath.sol';\n\ncontract UniswapV2ERC20 {\n using SafeMathUniswap for uint;\n\n string public constant name = 'YuzuSwap LP Token';\n string public constant symbol = 'LPT';\n uint8 public constant decimals = 18;\n uint public totalSupply;\n mapping(address => uint) public balanceOf;\n mapping(address => mapping(address => uint)) public allowance;\n\n bytes32 public DOMAIN_SEPARATOR;\n // keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\");\n bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;\n mapping(address => uint) public nonces;\n\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n constructor() public {\n uint chainId;\n assembly {\n chainId := chainid()\n }\n DOMAIN_SEPARATOR = keccak256(\n abi.encode(\n keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),\n keccak256(bytes(name)),\n keccak256(bytes('1')),\n chainId,\n address(this)\n )\n );\n }\n\n function _mint(address to, uint value) internal {\n totalSupply = totalSupply.add(value);\n balanceOf[to] = balanceOf[to].add(value);\n emit Transfer(address(0), to, value);\n }\n\n function _burn(address from, uint value) internal {\n balanceOf[from] = balanceOf[from].sub(value);\n totalSupply = totalSupply.sub(value);\n emit Transfer(from, address(0), value);\n }\n\n function _approve(address owner, address spender, uint value) private {\n allowance[owner][spender] = value;\n emit Approval(owner, spender, value);\n }\n\n function _transfer(address from, address to, uint value) private {\n balanceOf[from] = balanceOf[from].sub(value);\n balanceOf[to] = balanceOf[to].add(value);\n emit Transfer(from, to, value);\n }\n\n function approve(address spender, uint value) external returns (bool) {\n _approve(msg.sender, spender, value);\n return true;\n }\n\n function transfer(address to, uint value) external returns (bool) {\n _transfer(msg.sender, to, value);\n return true;\n }\n\n function transferFrom(address from, address to, uint value) external returns (bool) {\n if (allowance[from][msg.sender] != uint(-1)) {\n allowance[from][msg.sender] = allowance[from][msg.sender].sub(value);\n }\n _transfer(from, to, value);\n return true;\n }\n\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {\n require(deadline >= block.timestamp, 'UniswapV2: EXPIRED');\n bytes32 digest = keccak256(\n abi.encodePacked(\n '\\x19\\x01',\n DOMAIN_SEPARATOR,\n keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))\n )\n );\n address recoveredAddress = ecrecover(digest, v, r, s);\n require(recoveredAddress != address(0) && recoveredAddress == owner, 'UniswapV2: INVALID_SIGNATURE');\n _approve(owner, spender, value);\n }\n}\n", + "name": "UniswapV2ERC20.sol", + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/UniswapV2ERC20.sol" }, { "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity =0.6.12;\n\n// a library for performing various math operations\n\nlibrary Math {\n function min(uint x, uint y) internal pure returns (uint z) {\n z = x < y ? x : y;\n }\n\n // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)\n function sqrt(uint y) internal pure returns (uint z) {\n if (y > 3) {\n z = y;\n uint x = y / 2 + 1;\n while (x < z) {\n z = x;\n x = (y / x + x) / 2;\n }\n } else if (y != 0) {\n z = 1;\n }\n }\n}\n", "name": "Math.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/libraries/Math.sol" + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/libraries/Math.sol" + }, + { + "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.5.0;\n\ninterface IERC20Uniswap {\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function decimals() external view returns (uint8);\n function totalSupply() external view returns (uint);\n function balanceOf(address owner) external view returns (uint);\n function allowance(address owner, address spender) external view returns (uint);\n\n function approve(address spender, uint value) external returns (bool);\n function transfer(address to, uint value) external returns (bool);\n function transferFrom(address from, address to, uint value) external returns (bool);\n}\n", + "name": "IERC20.sol", + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/interfaces/IERC20.sol" }, { "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity =0.6.12;\n\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\n\nlibrary SafeMathUniswap {\n function add(uint x, uint y) internal pure returns (uint z) {\n require((z = x + y) >= x, 'ds-math-add-overflow');\n }\n\n function sub(uint x, uint y) internal pure returns (uint z) {\n require((z = x - y) <= x, 'ds-math-sub-underflow');\n }\n\n function mul(uint x, uint y) internal pure returns (uint z) {\n require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\n }\n}\n", "name": "SafeMath.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/libraries/SafeMath.sol" + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/libraries/SafeMath.sol" }, { "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity =0.6.12;\n\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\n\n// range: [0, 2**112 - 1]\n// resolution: 1 / 2**112\n\nlibrary UQ112x112 {\n uint224 constant Q112 = 2**112;\n\n // encode a uint112 as a UQ112x112\n function encode(uint112 y) internal pure returns (uint224 z) {\n z = uint224(y) * Q112; // never overflows\n }\n\n // divide a UQ112x112 by a uint112, returning a UQ112x112\n function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {\n z = x / uint224(y);\n }\n}\n", "name": "UQ112x112.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/libraries/UQ112x112.sol" + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/libraries/UQ112x112.sol" + }, + { + "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.5.0;\n\ninterface IUniswapV2Callee {\n function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;\n}\n", + "name": "IUniswapV2Callee.sol", + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/interfaces/IUniswapV2Callee.sol" + }, + { + "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.5.0;\n\ninterface IUniswapV2Factory {\n event PairCreated(address indexed token0, address indexed token1, address pair, uint);\n\n function feeTo() external view returns (address);\n function feeToSetter() external view returns (address);\n function migrator() external view returns (address);\n\n function getPair(address tokenA, address tokenB) external view returns (address pair);\n function allPairs(uint) external view returns (address pair);\n function allPairsLength() external view returns (uint);\n\n function createPair(address tokenA, address tokenB) external returns (address pair);\n\n function setFeeTo(address) external;\n function setFeeToSetter(address) external;\n function setMigrator(address) external;\n}\n", + "name": "IUniswapV2Factory.sol", + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/interfaces/IUniswapV2Factory.sol" } ], "verification_level": "partial" diff --git a/tests/e2e_regression/damask/rpc-cache/https_sourcify_dev_server/00000-1.psg b/tests/e2e_regression/damask/rpc-cache/https_sourcify_dev_server/00000-1.psg index 75e9277d1..8a7cc043d 100644 --- a/tests/e2e_regression/damask/rpc-cache/https_sourcify_dev_server/00000-1.psg +++ b/tests/e2e_regression/damask/rpc-cache/https_sourcify_dev_server/00000-1.psg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9c9e0f0455d263a65d00ee5ff4c7924c16741eee5eec388e0d6556340674fc2 -size 5085204 +oid sha256:afaf2f86335d3a683b2d5a2a9e97bbc693544ca8393325f9b44231be96006942 +size 3963918 diff --git a/tests/e2e_regression/damask/rpc-cache/https_sourcify_dev_server/main.pix b/tests/e2e_regression/damask/rpc-cache/https_sourcify_dev_server/main.pix index ca67e8007..553c76758 100644 --- a/tests/e2e_regression/damask/rpc-cache/https_sourcify_dev_server/main.pix +++ b/tests/e2e_regression/damask/rpc-cache/https_sourcify_dev_server/main.pix @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f80caa094855567ab48e0ec4d514a5b2c244918d5c527200fd80aeb907966f04 +oid sha256:5c38c463e03fa6bf5746df946eb85b7cf94105ca373f39626fc4730a4164f6ca size 2560 diff --git a/tests/e2e_regression/damask/rpc-cache/https_sourcify_dev_server/overflow.pix b/tests/e2e_regression/damask/rpc-cache/https_sourcify_dev_server/overflow.pix index 8833e9889..eb0648bd0 100644 --- a/tests/e2e_regression/damask/rpc-cache/https_sourcify_dev_server/overflow.pix +++ b/tests/e2e_regression/damask/rpc-cache/https_sourcify_dev_server/overflow.pix @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8f50fac4d9ac89ecc22d8a39769fabf88332d09a16e5d4d805eaa23a30c50e64 -size 512 +oid sha256:c7efaf464af66b163423056add9c139bbc773b491cc0af3cc6d19988bf7268ca +size 1024 diff --git a/tests/e2e_regression/eden/expected/db__contract_gas_use.csv b/tests/e2e_regression/eden/expected/db__contract_gas_use.csv index 8c35c0c2c..947a4bdfb 100644 --- a/tests/e2e_regression/eden/expected/db__contract_gas_use.csv +++ b/tests/e2e_regression/eden/expected/db__contract_gas_use.csv @@ -1,5 +1,6 @@ runtime,contract_address,gas_used,created_at emerald,oasis1qp09pty0mw4ul7qqlev3gy5f6q00qv2z3yxl9gk2,, +emerald,oasis1qp2n5crda4ardp34y2hefrzj94hpnwz8mvclc89f,, emerald,oasis1qp2z4pf2hl6r88qyglka3hcnjnw2l56sgq72s3yl,3637923, emerald,oasis1qp40vf7w2etyhfqaxeq9hx8zngwyfz9s3qj38gw3,, emerald,oasis1qp6w9twdl90uka6hdyz9d77n4p6h9s2tw52ykgdc,1117885, @@ -22,6 +23,7 @@ emerald,oasis1qpu0nr8sg3uecyl0yusajumnxdjvf7njtymw5neq,, emerald,oasis1qpu6mmpr0j0xn64re8vdfdkphcn44jkp45zhkcfr,, emerald,oasis1qpzdjjhnhddd2ry46hnemw0ahanf907xdcg77u6q,0, emerald,oasis1qq0zfahg9s3majhhdmhey4k32hs0tufzes8axptt,, +emerald,oasis1qq4hp3mfsp2vvfqlt35tn59h4cx08wyd2vlrpxx7,, emerald,oasis1qq5wgup84qrap8k9hq9d99zx35rqj0hx9spz9ld0,, emerald,oasis1qq60pyh8rrrmnpv3q222wp0t7qe4q75pavp682zk,, emerald,oasis1qq7skvgv97fqerg9atlauuj9fhk7dm6yqcnxtzsq,444581, @@ -38,6 +40,7 @@ emerald,oasis1qqjkthcmc78v606vklceh23mzhrylser4c8rs0kr,, emerald,oasis1qqjv74rz8e6v9q6yn7y76zvf0yv5299ejsaxnjqu,549264, emerald,oasis1qqkcynmpm5tj9thyfq0fg5k2slvdap9teu02n77d,, emerald,oasis1qqktf2lksvculs4xujqfrpfph6guqllydvucy6z8,35614, +emerald,oasis1qqkyg72kffgjyxtcdv0qqrg029c0jtrd9ssz9p4m,, emerald,oasis1qqnu9prrj5nddz3ccpnm5vkq92j3cncy5vdasvsm,, emerald,oasis1qqqr6r25urm0y8dy5nj3sdwghv2q8h05r523cc4a,, emerald,oasis1qqrrud0dzcdhxfxcj4nj0ag4ydr7xdxxwqx2epy2,, @@ -73,6 +76,7 @@ emerald,oasis1qrr6tjx0tkxe9cnew9gcu6gxjs0dy9spjyrszlf4,, emerald,oasis1qrxwxmc6x79mfypgvnpjtadq432yeu04us4qkkss,, emerald,oasis1qz29t7nxkwfqgfk36uqqs9pzuzdt8zmrjud5mehx,2585119,2023-12-12 08:28:36+00 emerald,oasis1qz2rynvcmrkwd57v00298uc2vtzgatde3cjpy72f,, +emerald,oasis1qz3vfhgy3wvf5djhnjlmxf6lpxkmt86lzys8cpwl,, emerald,oasis1qz5psjrn94jrsa4k4fkjwjg39uga0mce5cuaj9la,, emerald,oasis1qz6uvey3ge99kvj5z8yl4hs635gunehyc54adgk6,, emerald,oasis1qz6zpqqllhqk0wjz2uqgwfzdan9k38npqqd4l25x,, @@ -84,6 +88,7 @@ emerald,oasis1qzfekqu9xc6srvhm2gg7l37qhwjnwdm605txmcfr,146228, emerald,oasis1qzftgnpq09kj3745p4pdvdekgfjz8k24qg006rgf,, emerald,oasis1qzga6l8qt7fqj6yycza2yknur45yvzseyy7lqk5w,, emerald,oasis1qzj2hwfs3yjm20jz5h70yk3etsst0k8s3cnl6l08,0, +emerald,oasis1qzjjq5zutzc047lzm5yxvnjp348zacxmvckzwqj0,, emerald,oasis1qzkrq8jrrt96fzxq8j0z88683e4vhf4a5cy3qrc5,, emerald,oasis1qzl7w57gags5wlmhhxe22h5tqx7ggw8jfq0ryr93,464617, emerald,oasis1qzmdhwdwfl4ycwckf4dqj4705h7kf4uj0ypz6k2m,, diff --git a/tests/e2e_regression/eden/expected/db__evm_contracts.csv b/tests/e2e_regression/eden/expected/db__evm_contracts.csv index d75b513d5..3f45a289e 100644 --- a/tests/e2e_regression/eden/expected/db__evm_contracts.csv +++ b/tests/e2e_regression/eden/expected/db__evm_contracts.csv @@ -1,5 +1,6 @@ runtime,contract_address,creation_tx,abi_md5 emerald,oasis1qp09pty0mw4ul7qqlev3gy5f6q00qv2z3yxl9gk2,,37f73a0d935e20288628373578da84c2 +emerald,oasis1qp2n5crda4ardp34y2hefrzj94hpnwz8mvclc89f,,3fab402c39c3cf4588bd8a5179c3c8bf emerald,oasis1qp2z4pf2hl6r88qyglka3hcnjnw2l56sgq72s3yl,, emerald,oasis1qp40vf7w2etyhfqaxeq9hx8zngwyfz9s3qj38gw3,,6116322dfe48a0b922335a7ec6d630d7 emerald,oasis1qp6w9twdl90uka6hdyz9d77n4p6h9s2tw52ykgdc,, @@ -8,7 +9,7 @@ emerald,oasis1qp8x3hp8d00skra5pgjp7dvqum29en8vcg8hjvuc,,aba60080aaccbcf09b88d499 emerald,oasis1qpac768gep2hrnvuy4f4euhmynjgm6wg9uph38a3,,15c47d824aebd80e345231f872a290c1 emerald,oasis1qpal7x2mn0d0jqa7wtyh7wf3klftp6aufcgzjekt,,b67b4aeee9aa7f800d56d05e0008e06e emerald,oasis1qpc5cf65jykyxeu9kmnyexftwmxaz07wvypkjny6,, -emerald,oasis1qpdjtgwrh5q4r9vlzkkvryypy6y67muw5sa6r60e,,5fa5276bd46194da193606a06d89982a +emerald,oasis1qpdjtgwrh5q4r9vlzkkvryypy6y67muw5sa6r60e,,7a7bc7884b02f7249ecf20a4b03dfd0c emerald,oasis1qpdnr0hsh6nhxw4tn8jdz2l7lnn26aqlgvn8vuqk,, emerald,oasis1qpe2wmc3ejv72veal0eqyjwlhn0d3hgwyuxaw32u,,589ccfb03d2fdd2cf9a44c8a96a494dd emerald,oasis1qpfgyflwtk6a6f6vyc5zkp9dmnlnfy5kcc3ty6ug,,a69d4300d7ee84a79b99ef1379b82dc8 @@ -22,6 +23,7 @@ emerald,oasis1qpu0nr8sg3uecyl0yusajumnxdjvf7njtymw5neq,,aba60080aaccbcf09b88d499 emerald,oasis1qpu6mmpr0j0xn64re8vdfdkphcn44jkp45zhkcfr,,fd029f87a39a1743ef37d37a08be2387 emerald,oasis1qpzdjjhnhddd2ry46hnemw0ahanf907xdcg77u6q,,f15bcafe906358e49c4cbb2247bca0d9 emerald,oasis1qq0zfahg9s3majhhdmhey4k32hs0tufzes8axptt,,3973c271618ca4e5aac7743c6d8197c4 +emerald,oasis1qq4hp3mfsp2vvfqlt35tn59h4cx08wyd2vlrpxx7,,5b0bf1f49d50097cf842cbdc456e470b emerald,oasis1qq5wgup84qrap8k9hq9d99zx35rqj0hx9spz9ld0,,36a90464ca126c115de42ce274954e6d emerald,oasis1qq60pyh8rrrmnpv3q222wp0t7qe4q75pavp682zk,,93be14273840269309380506300c90e1 emerald,oasis1qq7skvgv97fqerg9atlauuj9fhk7dm6yqcnxtzsq,, @@ -38,6 +40,7 @@ emerald,oasis1qqjkthcmc78v606vklceh23mzhrylser4c8rs0kr,,6fc0ddfa5f061ab14f52ef63 emerald,oasis1qqjv74rz8e6v9q6yn7y76zvf0yv5299ejsaxnjqu,, emerald,oasis1qqkcynmpm5tj9thyfq0fg5k2slvdap9teu02n77d,,9bf4ffba7a8bd1efeeaef57b71e183ad emerald,oasis1qqktf2lksvculs4xujqfrpfph6guqllydvucy6z8,, +emerald,oasis1qqkyg72kffgjyxtcdv0qqrg029c0jtrd9ssz9p4m,,08c7610a303ab55ebe5a2fa0dc82b004 emerald,oasis1qqnu9prrj5nddz3ccpnm5vkq92j3cncy5vdasvsm,,4873684c5e22769e0d76327ee3c2de2c emerald,oasis1qqqr6r25urm0y8dy5nj3sdwghv2q8h05r523cc4a,,448a1263e2f6d68c49a8ba3f0e104821 emerald,oasis1qqrrud0dzcdhxfxcj4nj0ag4ydr7xdxxwqx2epy2,,184e087e271e4b969c501ba3750b24ff @@ -73,7 +76,8 @@ emerald,oasis1qrr6tjx0tkxe9cnew9gcu6gxjs0dy9spjyrszlf4,,fe3d71f543e79c76c9fd14b4 emerald,oasis1qrxwxmc6x79mfypgvnpjtadq432yeu04us4qkkss,,960b5cfd07fb2dcc1acfc49039721915 emerald,oasis1qz29t7nxkwfqgfk36uqqs9pzuzdt8zmrjud5mehx,ddbd6d4af2372b828ae78b1e13ad54ce2c88d58b388775cee61341e8867bb9b4, emerald,oasis1qz2rynvcmrkwd57v00298uc2vtzgatde3cjpy72f,,f15bcafe906358e49c4cbb2247bca0d9 -emerald,oasis1qz5psjrn94jrsa4k4fkjwjg39uga0mce5cuaj9la,,5fa5276bd46194da193606a06d89982a +emerald,oasis1qz3vfhgy3wvf5djhnjlmxf6lpxkmt86lzys8cpwl,,6d19ab45e4d109bfb3aacabf883302f7 +emerald,oasis1qz5psjrn94jrsa4k4fkjwjg39uga0mce5cuaj9la,,7a7bc7884b02f7249ecf20a4b03dfd0c emerald,oasis1qz6uvey3ge99kvj5z8yl4hs635gunehyc54adgk6,,ea1b4e8f707451248c5ee84f4968091d emerald,oasis1qz6zpqqllhqk0wjz2uqgwfzdan9k38npqqd4l25x,,aba60080aaccbcf09b88d49906befdea emerald,oasis1qz7dwqren7fh80l9zv7hd0w8x83x6q4nwqcjz4kq,,0496b3be2184ea83d022209667f00905 @@ -84,6 +88,7 @@ emerald,oasis1qzfekqu9xc6srvhm2gg7l37qhwjnwdm605txmcfr,, emerald,oasis1qzftgnpq09kj3745p4pdvdekgfjz8k24qg006rgf,,672586d52e0b7f8745ca375d6881069c emerald,oasis1qzga6l8qt7fqj6yycza2yknur45yvzseyy7lqk5w,,1bbfce8db3733e2f0f2ce33de3298c5b emerald,oasis1qzj2hwfs3yjm20jz5h70yk3etsst0k8s3cnl6l08,,f15bcafe906358e49c4cbb2247bca0d9 +emerald,oasis1qzjjq5zutzc047lzm5yxvnjp348zacxmvckzwqj0,,c78ab33fc0c0047e7c894e14252f8305 emerald,oasis1qzkrq8jrrt96fzxq8j0z88683e4vhf4a5cy3qrc5,,3402c18ed97fdae16f23a6f00f1e1ae6 emerald,oasis1qzl7w57gags5wlmhhxe22h5tqx7ggw8jfq0ryr93,, emerald,oasis1qzmdhwdwfl4ycwckf4dqj4705h7kf4uj0ypz6k2m,,bd90d0504f98aa7ee773a198cefaf3dc diff --git a/tests/e2e_regression/eden/expected/emerald_contract_account.body b/tests/e2e_regression/eden/expected/emerald_contract_account.body index 19b511e3f..0b01bee92 100644 --- a/tests/e2e_regression/eden/expected/emerald_contract_account.body +++ b/tests/e2e_regression/eden/expected/emerald_contract_account.body @@ -777,45 +777,45 @@ "version": 1 }, "source_files": [ - { - "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity =0.6.12;\n\nimport './libraries/SafeMath.sol';\n\ncontract UniswapV2ERC20 {\n using SafeMathUniswap for uint;\n\n string public constant name = 'YuzuSwap LP Token';\n string public constant symbol = 'LPT';\n uint8 public constant decimals = 18;\n uint public totalSupply;\n mapping(address => uint) public balanceOf;\n mapping(address => mapping(address => uint)) public allowance;\n\n bytes32 public DOMAIN_SEPARATOR;\n // keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\");\n bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;\n mapping(address => uint) public nonces;\n\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n constructor() public {\n uint chainId;\n assembly {\n chainId := chainid()\n }\n DOMAIN_SEPARATOR = keccak256(\n abi.encode(\n keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),\n keccak256(bytes(name)),\n keccak256(bytes('1')),\n chainId,\n address(this)\n )\n );\n }\n\n function _mint(address to, uint value) internal {\n totalSupply = totalSupply.add(value);\n balanceOf[to] = balanceOf[to].add(value);\n emit Transfer(address(0), to, value);\n }\n\n function _burn(address from, uint value) internal {\n balanceOf[from] = balanceOf[from].sub(value);\n totalSupply = totalSupply.sub(value);\n emit Transfer(from, address(0), value);\n }\n\n function _approve(address owner, address spender, uint value) private {\n allowance[owner][spender] = value;\n emit Approval(owner, spender, value);\n }\n\n function _transfer(address from, address to, uint value) private {\n balanceOf[from] = balanceOf[from].sub(value);\n balanceOf[to] = balanceOf[to].add(value);\n emit Transfer(from, to, value);\n }\n\n function approve(address spender, uint value) external returns (bool) {\n _approve(msg.sender, spender, value);\n return true;\n }\n\n function transfer(address to, uint value) external returns (bool) {\n _transfer(msg.sender, to, value);\n return true;\n }\n\n function transferFrom(address from, address to, uint value) external returns (bool) {\n if (allowance[from][msg.sender] != uint(-1)) {\n allowance[from][msg.sender] = allowance[from][msg.sender].sub(value);\n }\n _transfer(from, to, value);\n return true;\n }\n\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {\n require(deadline >= block.timestamp, 'UniswapV2: EXPIRED');\n bytes32 digest = keccak256(\n abi.encodePacked(\n '\\x19\\x01',\n DOMAIN_SEPARATOR,\n keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))\n )\n );\n address recoveredAddress = ecrecover(digest, v, r, s);\n require(recoveredAddress != address(0) && recoveredAddress == owner, 'UniswapV2: INVALID_SIGNATURE');\n _approve(owner, spender, value);\n }\n}\n", - "name": "UniswapV2ERC20.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/UniswapV2ERC20.sol" - }, { "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity =0.6.12;\n\nimport './UniswapV2ERC20.sol';\nimport './libraries/Math.sol';\nimport './libraries/UQ112x112.sol';\nimport './interfaces/IERC20.sol';\nimport './interfaces/IUniswapV2Factory.sol';\nimport './interfaces/IUniswapV2Callee.sol';\n\ninterface IMigrator {\n // Return the desired amount of liquidity token that the migrator wants.\n function desiredLiquidity() external view returns (uint256);\n}\n\ncontract UniswapV2Pair is UniswapV2ERC20 {\n using SafeMathUniswap for uint;\n using UQ112x112 for uint224;\n\n uint public constant MINIMUM_LIQUIDITY = 10**3;\n uint public constant LP_FEE_RATIO = 0; // ratio between lp and feeSetToAddr about the fee income\n bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));\n\n address public factory;\n address public token0;\n address public token1;\n\n uint112 private reserve0; // uses single storage slot, accessible via getReserves\n uint112 private reserve1; // uses single storage slot, accessible via getReserves\n uint32 private blockTimestampLast; // uses single storage slot, accessible via getReserves\n\n uint public price0CumulativeLast;\n uint public price1CumulativeLast;\n uint public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event\n\n uint private unlocked = 1;\n modifier lock() {\n require(unlocked == 1, 'UniswapV2: LOCKED');\n unlocked = 0;\n _;\n unlocked = 1;\n }\n\n function getReserves() public view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast) {\n _reserve0 = reserve0;\n _reserve1 = reserve1;\n _blockTimestampLast = blockTimestampLast;\n }\n\n function _safeTransfer(address token, address to, uint value) private {\n (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));\n require(success && (data.length == 0 || abi.decode(data, (bool))), 'UniswapV2: TRANSFER_FAILED');\n }\n\n event Mint(address indexed sender, uint amount0, uint amount1);\n event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);\n event Swap(\n address indexed sender,\n uint amount0In,\n uint amount1In,\n uint amount0Out,\n uint amount1Out,\n address indexed to\n );\n event Sync(uint112 reserve0, uint112 reserve1);\n\n constructor() public {\n factory = msg.sender;\n }\n\n // called once by the factory at time of deployment\n function initialize(address _token0, address _token1) external {\n require(msg.sender == factory, 'UniswapV2: FORBIDDEN'); // sufficient check\n token0 = _token0;\n token1 = _token1;\n }\n\n // update reserves and, on the first call per block, price accumulators\n function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private {\n require(balance0 <= uint112(-1) && balance1 <= uint112(-1), 'UniswapV2: OVERFLOW');\n uint32 blockTimestamp = uint32(block.timestamp % 2**32);\n uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired\n if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {\n // * never overflows, and + overflow is desired\n price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed;\n price1CumulativeLast += uint(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed;\n }\n reserve0 = uint112(balance0);\n reserve1 = uint112(balance1);\n blockTimestampLast = blockTimestamp;\n emit Sync(reserve0, reserve1);\n }\n\n // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k)\n function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {\n address feeTo = IUniswapV2Factory(factory).feeTo();\n feeOn = feeTo != address(0);\n uint _kLast = kLast; // gas savings\n if (feeOn) {\n if (_kLast != 0) {\n uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));\n uint rootKLast = Math.sqrt(_kLast);\n if (rootK > rootKLast) {\n uint numerator = totalSupply.mul(rootK.sub(rootKLast));\n uint denominator = rootK.mul(LP_FEE_RATIO).add(rootKLast);\n uint liquidity = numerator / denominator;\n if (liquidity > 0) _mint(feeTo, liquidity);\n }\n }\n } else if (_kLast != 0) {\n kLast = 0;\n }\n }\n\n // this low-level function should be called from a contract which performs important safety checks\n function mint(address to) external lock returns (uint liquidity) {\n (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings\n uint balance0 = IERC20Uniswap(token0).balanceOf(address(this));\n uint balance1 = IERC20Uniswap(token1).balanceOf(address(this));\n uint amount0 = balance0.sub(_reserve0);\n uint amount1 = balance1.sub(_reserve1);\n\n bool feeOn = _mintFee(_reserve0, _reserve1);\n uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee\n if (_totalSupply == 0) {\n address migrator = IUniswapV2Factory(factory).migrator();\n if (msg.sender == migrator) {\n liquidity = IMigrator(migrator).desiredLiquidity();\n require(liquidity > 0 && liquidity != uint256(-1), \"Bad desired liquidity\");\n } else {\n require(migrator == address(0), \"Must not have migrator\");\n liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);\n _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens\n }\n } else {\n liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);\n }\n require(liquidity > 0, 'UniswapV2: INSUFFICIENT_LIQUIDITY_MINTED');\n _mint(to, liquidity);\n\n _update(balance0, balance1, _reserve0, _reserve1);\n if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date\n emit Mint(msg.sender, amount0, amount1);\n }\n\n // this low-level function should be called from a contract which performs important safety checks\n function burn(address to) external lock returns (uint amount0, uint amount1) {\n (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings\n address _token0 = token0; // gas savings\n address _token1 = token1; // gas savings\n uint balance0 = IERC20Uniswap(_token0).balanceOf(address(this));\n uint balance1 = IERC20Uniswap(_token1).balanceOf(address(this));\n uint liquidity = balanceOf[address(this)];\n\n bool feeOn = _mintFee(_reserve0, _reserve1);\n uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee\n amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution\n amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution\n require(amount0 > 0 && amount1 > 0, 'UniswapV2: INSUFFICIENT_LIQUIDITY_BURNED');\n _burn(address(this), liquidity);\n _safeTransfer(_token0, to, amount0);\n _safeTransfer(_token1, to, amount1);\n balance0 = IERC20Uniswap(_token0).balanceOf(address(this));\n balance1 = IERC20Uniswap(_token1).balanceOf(address(this));\n\n _update(balance0, balance1, _reserve0, _reserve1);\n if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date\n emit Burn(msg.sender, amount0, amount1, to);\n }\n\n // this low-level function should be called from a contract which performs important safety checks\n function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock {\n require(amount0Out > 0 || amount1Out > 0, 'UniswapV2: INSUFFICIENT_OUTPUT_AMOUNT');\n (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings\n require(amount0Out < _reserve0 && amount1Out < _reserve1, 'UniswapV2: INSUFFICIENT_LIQUIDITY');\n\n uint balance0;\n uint balance1;\n { // scope for _token{0,1}, avoids stack too deep errors\n address _token0 = token0;\n address _token1 = token1;\n require(to != _token0 && to != _token1, 'UniswapV2: INVALID_TO');\n if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens\n if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens\n if (data.length > 0) IUniswapV2Callee(to).uniswapV2Call(msg.sender, amount0Out, amount1Out, data);\n balance0 = IERC20Uniswap(_token0).balanceOf(address(this));\n balance1 = IERC20Uniswap(_token1).balanceOf(address(this));\n }\n uint amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0;\n uint amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0;\n require(amount0In > 0 || amount1In > 0, 'UniswapV2: INSUFFICIENT_INPUT_AMOUNT');\n { // scope for reserve{0,1}Adjusted, avoids stack too deep errors\n uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3));\n uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));\n require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'UniswapV2: K');\n }\n\n _update(balance0, balance1, _reserve0, _reserve1);\n emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);\n }\n\n // force balances to match reserves\n function skim(address to) external lock {\n address _token0 = token0; // gas savings\n address _token1 = token1; // gas savings\n _safeTransfer(_token0, to, IERC20Uniswap(_token0).balanceOf(address(this)).sub(reserve0));\n _safeTransfer(_token1, to, IERC20Uniswap(_token1).balanceOf(address(this)).sub(reserve1));\n }\n\n // force reserves to match balances\n function sync() external lock {\n _update(IERC20Uniswap(token0).balanceOf(address(this)), IERC20Uniswap(token1).balanceOf(address(this)), reserve0, reserve1);\n }\n}\n", "name": "UniswapV2Pair.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/UniswapV2Pair.sol" - }, - { - "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.5.0;\n\ninterface IERC20Uniswap {\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function decimals() external view returns (uint8);\n function totalSupply() external view returns (uint);\n function balanceOf(address owner) external view returns (uint);\n function allowance(address owner, address spender) external view returns (uint);\n\n function approve(address spender, uint value) external returns (bool);\n function transfer(address to, uint value) external returns (bool);\n function transferFrom(address from, address to, uint value) external returns (bool);\n}\n", - "name": "IERC20.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/interfaces/IERC20.sol" + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/UniswapV2Pair.sol" }, { - "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.5.0;\n\ninterface IUniswapV2Callee {\n function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;\n}\n", - "name": "IUniswapV2Callee.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/interfaces/IUniswapV2Callee.sol" - }, - { - "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.5.0;\n\ninterface IUniswapV2Factory {\n event PairCreated(address indexed token0, address indexed token1, address pair, uint);\n\n function feeTo() external view returns (address);\n function feeToSetter() external view returns (address);\n function migrator() external view returns (address);\n\n function getPair(address tokenA, address tokenB) external view returns (address pair);\n function allPairs(uint) external view returns (address pair);\n function allPairsLength() external view returns (uint);\n\n function createPair(address tokenA, address tokenB) external returns (address pair);\n\n function setFeeTo(address) external;\n function setFeeToSetter(address) external;\n function setMigrator(address) external;\n}\n", - "name": "IUniswapV2Factory.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/interfaces/IUniswapV2Factory.sol" + "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity =0.6.12;\n\nimport './libraries/SafeMath.sol';\n\ncontract UniswapV2ERC20 {\n using SafeMathUniswap for uint;\n\n string public constant name = 'YuzuSwap LP Token';\n string public constant symbol = 'LPT';\n uint8 public constant decimals = 18;\n uint public totalSupply;\n mapping(address => uint) public balanceOf;\n mapping(address => mapping(address => uint)) public allowance;\n\n bytes32 public DOMAIN_SEPARATOR;\n // keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\");\n bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;\n mapping(address => uint) public nonces;\n\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n constructor() public {\n uint chainId;\n assembly {\n chainId := chainid()\n }\n DOMAIN_SEPARATOR = keccak256(\n abi.encode(\n keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),\n keccak256(bytes(name)),\n keccak256(bytes('1')),\n chainId,\n address(this)\n )\n );\n }\n\n function _mint(address to, uint value) internal {\n totalSupply = totalSupply.add(value);\n balanceOf[to] = balanceOf[to].add(value);\n emit Transfer(address(0), to, value);\n }\n\n function _burn(address from, uint value) internal {\n balanceOf[from] = balanceOf[from].sub(value);\n totalSupply = totalSupply.sub(value);\n emit Transfer(from, address(0), value);\n }\n\n function _approve(address owner, address spender, uint value) private {\n allowance[owner][spender] = value;\n emit Approval(owner, spender, value);\n }\n\n function _transfer(address from, address to, uint value) private {\n balanceOf[from] = balanceOf[from].sub(value);\n balanceOf[to] = balanceOf[to].add(value);\n emit Transfer(from, to, value);\n }\n\n function approve(address spender, uint value) external returns (bool) {\n _approve(msg.sender, spender, value);\n return true;\n }\n\n function transfer(address to, uint value) external returns (bool) {\n _transfer(msg.sender, to, value);\n return true;\n }\n\n function transferFrom(address from, address to, uint value) external returns (bool) {\n if (allowance[from][msg.sender] != uint(-1)) {\n allowance[from][msg.sender] = allowance[from][msg.sender].sub(value);\n }\n _transfer(from, to, value);\n return true;\n }\n\n function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {\n require(deadline >= block.timestamp, 'UniswapV2: EXPIRED');\n bytes32 digest = keccak256(\n abi.encodePacked(\n '\\x19\\x01',\n DOMAIN_SEPARATOR,\n keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))\n )\n );\n address recoveredAddress = ecrecover(digest, v, r, s);\n require(recoveredAddress != address(0) && recoveredAddress == owner, 'UniswapV2: INVALID_SIGNATURE');\n _approve(owner, spender, value);\n }\n}\n", + "name": "UniswapV2ERC20.sol", + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/UniswapV2ERC20.sol" }, { "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity =0.6.12;\n\n// a library for performing various math operations\n\nlibrary Math {\n function min(uint x, uint y) internal pure returns (uint z) {\n z = x < y ? x : y;\n }\n\n // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)\n function sqrt(uint y) internal pure returns (uint z) {\n if (y > 3) {\n z = y;\n uint x = y / 2 + 1;\n while (x < z) {\n z = x;\n x = (y / x + x) / 2;\n }\n } else if (y != 0) {\n z = 1;\n }\n }\n}\n", "name": "Math.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/libraries/Math.sol" + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/libraries/Math.sol" + }, + { + "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.5.0;\n\ninterface IERC20Uniswap {\n event Approval(address indexed owner, address indexed spender, uint value);\n event Transfer(address indexed from, address indexed to, uint value);\n\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function decimals() external view returns (uint8);\n function totalSupply() external view returns (uint);\n function balanceOf(address owner) external view returns (uint);\n function allowance(address owner, address spender) external view returns (uint);\n\n function approve(address spender, uint value) external returns (bool);\n function transfer(address to, uint value) external returns (bool);\n function transferFrom(address from, address to, uint value) external returns (bool);\n}\n", + "name": "IERC20.sol", + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/interfaces/IERC20.sol" }, { "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity =0.6.12;\n\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\n\nlibrary SafeMathUniswap {\n function add(uint x, uint y) internal pure returns (uint z) {\n require((z = x + y) >= x, 'ds-math-add-overflow');\n }\n\n function sub(uint x, uint y) internal pure returns (uint z) {\n require((z = x - y) <= x, 'ds-math-sub-underflow');\n }\n\n function mul(uint x, uint y) internal pure returns (uint z) {\n require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\n }\n}\n", "name": "SafeMath.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/libraries/SafeMath.sol" + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/libraries/SafeMath.sol" }, { "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity =0.6.12;\n\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\n\n// range: [0, 2**112 - 1]\n// resolution: 1 / 2**112\n\nlibrary UQ112x112 {\n uint224 constant Q112 = 2**112;\n\n // encode a uint112 as a UQ112x112\n function encode(uint112 y) internal pure returns (uint224 z) {\n z = uint224(y) * Q112; // never overflows\n }\n\n // divide a UQ112x112 by a uint112, returning a UQ112x112\n function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {\n z = x / uint224(y);\n }\n}\n", "name": "UQ112x112.sol", - "path": "/home/app/repository/contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/libraries/UQ112x112.sol" + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/libraries/UQ112x112.sol" + }, + { + "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.5.0;\n\ninterface IUniswapV2Callee {\n function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;\n}\n", + "name": "IUniswapV2Callee.sol", + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/interfaces/IUniswapV2Callee.sol" + }, + { + "content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.5.0;\n\ninterface IUniswapV2Factory {\n event PairCreated(address indexed token0, address indexed token1, address pair, uint);\n\n function feeTo() external view returns (address);\n function feeToSetter() external view returns (address);\n function migrator() external view returns (address);\n\n function getPair(address tokenA, address tokenB) external view returns (address pair);\n function allPairs(uint) external view returns (address pair);\n function allPairsLength() external view returns (uint);\n\n function createPair(address tokenA, address tokenB) external returns (address pair);\n\n function setFeeTo(address) external;\n function setFeeToSetter(address) external;\n function setMigrator(address) external;\n}\n", + "name": "IUniswapV2Factory.sol", + "path": "contracts/partial_match/42262/0xa6E864266b6707a6eA9529D83d8e0499E660f566/sources/contracts/uniswapv2/interfaces/IUniswapV2Factory.sol" } ], "verification_level": "partial" diff --git a/tests/e2e_regression/eden/rpc-cache/https_sourcify_dev_server/00000-1.psg b/tests/e2e_regression/eden/rpc-cache/https_sourcify_dev_server/00000-1.psg index 1a99fbc0b..779d3921f 100644 --- a/tests/e2e_regression/eden/rpc-cache/https_sourcify_dev_server/00000-1.psg +++ b/tests/e2e_regression/eden/rpc-cache/https_sourcify_dev_server/00000-1.psg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e0060bdd5ca97d6720c2424f6999b0ed553acb3069b3e3a00035507752195a5f -size 5085204 +oid sha256:0eab394b5881c8ad74bffa2a1b374d84126b0a2a6fe815939e278f97711b4fc6 +size 3963918 diff --git a/tests/e2e_regression/eden/rpc-cache/https_sourcify_dev_server/main.pix b/tests/e2e_regression/eden/rpc-cache/https_sourcify_dev_server/main.pix index d38019101..128e6e831 100644 --- a/tests/e2e_regression/eden/rpc-cache/https_sourcify_dev_server/main.pix +++ b/tests/e2e_regression/eden/rpc-cache/https_sourcify_dev_server/main.pix @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9c99b5fc755a1645e03bf0adf57c5e60e5070cc78fa9c42741786b0adf109ef +oid sha256:ee46f1bf52539605aae1951f33cc20207e7e48194784fc5a762b7c4b68d1526c size 2560 diff --git a/tests/e2e_regression/eden/rpc-cache/https_sourcify_dev_server/overflow.pix b/tests/e2e_regression/eden/rpc-cache/https_sourcify_dev_server/overflow.pix index f874ace82..5b8887131 100644 --- a/tests/e2e_regression/eden/rpc-cache/https_sourcify_dev_server/overflow.pix +++ b/tests/e2e_regression/eden/rpc-cache/https_sourcify_dev_server/overflow.pix @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b6b81c90b28cbe1a64a99282e0acecdfbbc3bd5dfa2e0c28ef56493a5ebc7cc +oid sha256:d657fb813ea125705fbe69c85ce67d2576e580928c7b763c2bb8eb35ba50d0b6 size 1024 diff --git a/tests/e2e_regression/edenfast/rpc-cache/https_sourcify_dev_server/00000-1.psg b/tests/e2e_regression/edenfast/rpc-cache/https_sourcify_dev_server/00000-1.psg index 1a99fbc0b..ef1250e02 100644 --- a/tests/e2e_regression/edenfast/rpc-cache/https_sourcify_dev_server/00000-1.psg +++ b/tests/e2e_regression/edenfast/rpc-cache/https_sourcify_dev_server/00000-1.psg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e0060bdd5ca97d6720c2424f6999b0ed553acb3069b3e3a00035507752195a5f -size 5085204 +oid sha256:520f4a615b6d479a96d63dd9537e282e5d76b2459dfbdd5525eb4a6963ef4468 +size 3963918 diff --git a/tests/e2e_regression/edenfast/rpc-cache/https_sourcify_dev_server/main.pix b/tests/e2e_regression/edenfast/rpc-cache/https_sourcify_dev_server/main.pix index 0938453a3..193aaa480 100644 --- a/tests/e2e_regression/edenfast/rpc-cache/https_sourcify_dev_server/main.pix +++ b/tests/e2e_regression/edenfast/rpc-cache/https_sourcify_dev_server/main.pix @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:734a44ee1c9f1a46121054312a714cd8c218f0900237d943a9bd4fd7d25ba9ab +oid sha256:f962141bacad06ac945ca0dc28e979055a76e5365caca8b2f23214db6553766f size 2560