如何修复Thirdweb Goerli测试网HTTP Error 429错误?
使用Thirdweb Python SDK在Goerli测试网铸造NFT时遭遇429请求超限错误
我正在用Thirdweb的Python SDK在Goerli测试网铸造NFT,最初使用mint方法,后来改成mint_to指定接收地址,但问题依旧存在,报错显示请求次数过多。
我的代码:
sdk = ThirdwebSDK.from_private_key(PRIVATE_KEY, NETWORK) NFT_COLLECTION_ADDRESS = contratonft nft_collection = sdk.get_nft_collection(NFT_COLLECTION_ADDRESS) urlarchivoarr = imagencert.split("/") urlarchivostr = str(urlarchivoarr[1]) urlarchivoimg = "https://files.avfenixrecords.com/" + urlarchivostr metadata = NFTMetadataInput.from_json({ "name": nombrecert, "description": descripcert, "image": urlarchivoimg }) # 指定Goerli钱包地址接收NFT tx = nft_collection.mint_to("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", metadata) receipt = tx.receipt token_id = tx.id nft = tx.data() idnft = tx.id
报错信息:
[2022-11-14 21:02:10,706] ERROR in app: Exception on /api/contracts/v1/mintnft [POST] Traceback (most recent call last): File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app response = self.full_dispatch_request() File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request rv = self.handle_user_exception(e) File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/flask_cors/extension.py", line 165, in wrapped_function return cors_after_request(app.make_response(f(*args, **kwargs))) File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request rv = self.dispatch_request() File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) File "app.py", line 1849, in mintnft tx = nft_collection.mint_to("0x98E0463643b28E24223d2B5EF19E78A9AF031505", metadata) File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/thirdweb/contracts/nft_collection.py", line 166, in mint_to receipt = self._contract_wrapper.send_transaction("mint_to", [to, uri]) File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/core/classes/contract_wrapper.py", line 112, in send_transaction nonce = provider.eth.get_transaction_count(signer.address) File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/module.py", line 57, in caller result = w3.manager.request_blocking(method_str, File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/manager.py", line 197, in request_blocking response = self._make_request(method, params) File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/manager.py", line 150, in _make_request return request_func(method, params) File "cytoolz/functoolz.pyx", line 249, in cytoolz.functoolz.curry.__call__ File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/middleware/formatting.py", line 76, in apply_formatters response = make_request(method, params) File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/middleware/gas_price_strategy.py", line 90, in middleware return make_request(method, params) File "cytoolz/functoolz.pyx", line 249, in cytoolz.functoolz.curry.__call__ File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/middleware/formatting.py", line 74, in apply_formatters response = make_request(method, formatted_params) File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/middleware/attrdict.py", line 33, in middleware response = make_request(method, params) File "cytoolz/functoolz.pyx", line 249, in cytoolz.functoolz.curry.__call__ File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/middleware/formatting.py", line 74, in apply_formatters response = make_request(method, formatted_params) File "cytoolz/functoolz.pyx", line 249, in cytoolz.functoolz.curry.__call__ File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/middleware/formatting.py", line 76, in apply_formatters response = make_request(method, params) File "cytoolz/functoolz.pyx", line 249, in cytoolz.functoolz.curry.__call__ File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/middleware/formatting.py", line 74, in apply_formatters response = make_request(method, formatted_params) File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/middleware/buffered_gas_estimate.py", line 40, in middleware return make_request(method, params) File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/middleware/exception_retry_request.py", line 105, in middleware return make_request(method, params) File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/providers/rpc.py", line 88, in make_request raw_response = make_post_request( File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/web3/_utils/request.py", line 49, in make_post_request response.raise_for_status() File "/home/ombhkqgo/virtualenv/contratos/3.8/lib/python3.8/site-packages/requests/models.py", line 1021, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 429 Client Error: Too Many Requests for url: https://eth-goerli.g.alchemy.com/v2/[redacted]
问题分析与解决建议:
这个错误的核心是Alchemy RPC节点的请求频率超限,和Thirdweb SDK的mint/mint_to方法无关,解决方向如下:
- 查看Alchemy API密钥的请求限额:免费版测试网节点有请求次数限制,短时间内发起太多请求会触发429
- 实现请求重试与指数退避:捕获429错误后等待一段时间再重试,可借助
tenacity库实现 - 控制请求频率:批量铸造时给每个请求加1-2秒间隔,避免并发请求
- 切换RPC节点:换成Infura、QuickNode的免费测试网节点,或使用公共Goerli RPC
- 检查代码逻辑:确认是否存在循环重复调用铸造接口的情况,导致短时间内请求量过大
内容的提问来源于stack exchange,提问作者Arturo Vasquez
相关产品推荐
相关产品推荐

