Package: 0x-sra-client
0x-sra-clientA Python client for interacting with servers conforming tothe Standard Relayer API specification.Read thedocumentationSchemasTheJSON schemasfor the API payloads and responses can be found in@0xproject/json-schemas. Examples of each payload and response can be found in the 0x.js library'stest suite.pipinstall0x-json-schemasYou can easily validate your API's payloads and responses using the0x-json-schemaspackage:fromzero_ex.json_schemasimportassert_validfromzero_ex.order_utilsimportOrderorder:Order={'makerAddress':"0x0000000000000000000000000000000000000000",'takerAddress':"0x0000000000000000000000000000000000000000",'feeRecipientAddress':"0x0000000000000000000000000000000000000000",'senderAddress':"0x0000000000000000000000000000000000000000",'makerAssetAmount':"1000000000000000000",'takerAssetAmount':"1000000000000000000",'makerFee':"0",'takerFee':"0",'expirationTimeSeconds':"12345",'salt':"12345",'makerAssetData':"0x0000000000000000000000000000000000000000",'takerAssetData':"0x0000000000000000000000000000000000000000",'exchangeAddress':"0x0000000000000000000000000000000000000000",}assert_valid(order,"/orderSchema")PaginationRequests that return potentially large collections should respond to the?pageand?perPageparameters. For example:$curlhttps://api.example-relayer.com/v2/asset_pairs?page=3&perPage=20Page numbering should be 1-indexed, not 0-indexed. If a query provides an unreasonable (ie. too high)perPagevalue, the response can return a validation error as specified in theerrors section. If the query specifies apagethat does not exist (ie. there are not enoughrecords), the response should just return an emptyrecordsarray.All endpoints that are paginated should return atotal,page,perPageand arecordsvalue in the top level of the collection. The value oftotalshould be the total number of records for a given query, whereasrecordsshould be an array representing the response to the query for that page.pageandperPage, are the same values that were specified in the request. See the note inmiscellaneousabout formattingsnake_casevs.lowerCamelCase.These requests include the/v2/asset_pairs,/v2/orders,/v2/fee_recipientsand/v2/orderbookendpoints.Network IdAll requests should be able to specify a?networkIdquery param for all supported networks. For example:$curlhttps://api.example-relayer.com/v2/asset_pairs?networkId=1If the query param is not provided, it should default to1(mainnet).Networks and their Ids:Network IdNetwork Name1Mainnet42Kovan3Ropsten4RinkebyIf a certain network is not supported, the response should400as specified in theerror responsesection. For example:{\"code\": 100,\"reason\": \"Validation failed\",\"validationErrors\": [{\"field\": \"networkId\",\"code\": 1006,\"reason\": \"Network id 42 is not supported\"}]}Link HeaderALink Headercan be included in a response to provide clients with more context about paging
For example:Link:<https://api.example-relayer.com/v2/asset_pairs?page=3&perPage=20>;rel=\"next\",
<https://api.github.com/user/repos?page=10&perPage=20>;rel=\"last\"ThisLinkresponse header contains one or more Hypermedia link relations.The possiblerelvalues are:NameDescriptionnextThe link relation for the immediate next page of results.lastThe link relation for the last page of results.firstThe link relation for the first page of results.prevThe link relation for the immediate previous page of results.Rate LimitsRate limit guidance for clients can be optionally returned in the response headers:Header NameDescriptionX-RateLimit-LimitThe maximum number of requests you're permitted to make per hour.X-RateLimit-RemainingThe number of requests remaining in the current rate limit window.X-RateLimit-ResetThe time at which the current rate limit window resets in UTC epoch seconds.For example:$curl-ihttps://api.example-relayer.com/v2/asset_pairs
HTTP/1.1200OK
Date:Mon,20Oct201712:30:06GMT
Status:200OK
X-RateLimit-Limit:60X-RateLimit-Remaining:56X-RateLimit-Reset:1372700873When a rate limit is exceeded, a status of429 Too Many Requestsshould be returned.ErrorsUnless the spec defines otherwise, errors to bad requests should respond with HTTP 4xx or status codes.Common error codesCodeReason400Bad Request – Invalid request format404Not found429Too many requests - Rate limit exceeded500Internal Server Error501Not ImplementedError reporting formatFor all400responses, see theerror response schema.{\"code\": 101,\"reason\": \"Validation failed\",\"validationErrors\": [{\"field\": \"maker\",\"code\": 1002,\"reason\": \"Invalid address\"}]}General error codes:100-ValidationFailed101-MalformedJSON102-Ordersubmissiondisabled103-ThrottledValidation error codes:1000-Requiredfield1001-Incorrectformat1002-Invalidaddress1003-Addressnotsupported1004-Valueoutofrange1005-Invalidsignatureorhash1006-UnsupportedoptionAsset Data EncodingAs we now support multipletoken transfer proxies, the identifier of which proxy to use for the token transfer must be encoded, along with the token information. Each proxy in 0x v2 has a unique identifier. If you're using 0x.js there will be helper methods for thisencodinganddecoding.The identifier for the Proxy uses a similar scheme toABI function selectors.// ERC20 Proxy ID  0xf47261b0bytes4(keccak256('ERC20Token(address)'));// ERC721 Proxy ID 0x02571792bytes4(keccak256('ERC721Token(address,uint256)'));Asset data is encoded usingABI encoding.For example, encoding the ERC20 token contract (address: 0x1dc4c1cefef38a777b15aa20260a54e584b16c48) using the ERC20 Transfer Proxy (id: 0xf47261b0) would be:0xf47261b00000000000000000000000001dc4c1cefef38a777b15aa20260a54e584b16c48Encoding the ERC721 token contract (address:0x371b13d97f4bf77d724e78c16b7dc74099f40e84), token id (id:99, which hex encoded is0x63) and the ERC721 Transfer Proxy (id: 0x02571792) would be:0x02571792000000000000000000000000371b13d97f4bf77d724e78c16b7dc74099f40e840000000000000000000000000000000000000000000000000000000000000063For more information seethe Asset Proxysection of the v2 spec and theEthereum ABI Spec.Meta Data in Order ResponsesIn v2 of the standard relayer API we added themetaDatafield. It is meant to provide a standard place for relayers to put optional, custom or non-standard fields that may of interest to the consumer of the API.A good example of such a field isremainingTakerAssetAmount, which is a convenience field that communicates how much of a 0x order is potentially left to be filled. Unlike the other fields in a 0x order, it is not guaranteed to be correct as it is derived from whatever mechanism the implementer (ie. the relayer) is using. While convenient for prototyping and low stakes situations, we recommend validating the value of the field by checking the state of the blockchain yourself.Misc.All requests and responses should be ofapplication/jsoncontent typeAll token amounts are sent in amounts of the smallest level of precision (base units). (e.g if a token has 18 decimal places, selling 1 token would show up as selling'1000000000000000000'units by this API).All addresses are sent as lower-case (non-checksummed) Ethereum addresses with the0xprefix.All parameters are to be written inlowerCamelCase.This Python package is automatically generated by theOpenAPI Generatorproject:API version: 2.0.0Package version: 1.0.0Build package: org.openapitools.codegen.languages.PythonClientCodegenRequirements.Python 2.7 and 3.4+Installation & Usagepip installIf the python package is hosted on Github, you can install directly from Githubpipinstallgit+https://github.com/GIT_USER_ID/GIT_REPO_ID.git(you may need to runpipwith root permission:sudo pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git)Then import the package:importsra_clientSetuptoolsInstall viaSetuptools.pythonsetup.pyinstall--user(orsudo python setup.py installto install the package for all users)Then import the package:importsra_clientGetting StartedPlease follow theinstallation procedureand then run the following:from__future__importprint_functionimporttimeimportsra_clientfromsra_client.restimportApiExceptionfrompprintimportpprint# create an instance of the API classapi_instance=sra_client.DefaultApi(sra_client.ApiClient(configuration))asset_data_a=0xf47261b04c32345ced77393b3530b1eed0f346429d# str | The assetData value for the first asset in the pair. (optional)asset_data_b=0x0257179264389b814a946f3e92105513705ca6b990# str | The assetData value for the second asset in the pair. (optional)network_id=42# float | The id of the Ethereum network (optional) (default to 1)page=3# float | The number of the page to request in the collection. (optional) (default to 1)per_page=10# float | The number of records to return per page. (optional) (default to 100)try:api_response=api_instance.get_asset_pairs(asset_data_a=asset_data_a,asset_data_b=asset_data_b,network_id=network_id,page=page,per_page=per_page)pprint(api_response)exceptApiExceptionase:print("Exception when calling DefaultApi->get_asset_pairs:%s\n"%e)ContributingWe welcome improvements and fixes from the wider community! To report bugs within this package, please create an issue in this repository.Please read ourcontribution guidelinesbefore getting started.Install Code and DependenciesEnsure that you have installed Python >=3.6, Docker, and docker-compose. Then:pipinstall-e.[dev]TestTests depend on a running instance of 0x-launch-kit-backend, backed by a Ganache node with the 0x contracts deployed in it. For convenience, a docker-compose file is provided that creates this environment. And a shortcut is provided to interface with that file:./setup.py start_test_relayerwill start those services. With them running, the tests can be run with./setup.py test. When you're done with testing, you can./setup.py stop_test_relayer.Clean./setup.py clean --allLint./setup.py lintBuild Documentation./setup.py build_sphinxMoreSee./setup.py --help-commandsfor more info.Documentation for API EndpointsAll URIs are relative tohttp://localhostClassMethodHTTP requestDescriptionDefaultApiget_asset_pairsGET/v2/asset_pairsDefaultApiget_fee_recipientsGET/v2/fee_recipientsDefaultApiget_orderGET/v2/order/{orderHash}DefaultApiget_order_configPOST/v2/order_configDefaultApiget_orderbookGET/v2/orderbookDefaultApiget_ordersGET/v2/ordersDefaultApipost_orderPOST/v2/orderDocumentation For ModelsOrderSchemaPaginatedCollectionSchemaRelayerApiAssetDataPairsResponseSchemaRelayerApiAssetDataTradeInfoSchemaRelayerApiErrorResponseSchemaRelayerApiErrorResponseSchemaValidationErrorsRelayerApiFeeRecipientsResponseSchemaRelayerApiOrderConfigPayloadSchemaRelayerApiOrderConfigResponseSchemaRelayerApiOrderSchemaRelayerApiOrderbookResponseSchemaRelayerApiOrdersChannelSubscribePayloadSchemaRelayerApiOrdersChannelSubscribeSchemaRelayerApiOrdersChannelUpdateSchemaRelayerApiOrdersResponseSchemaSignedOrderSchemaDocumentation For AuthorizationAll endpoints do not require authorization.