使用 Ganache-cli 运行 Web3.py 会返回以下错误:
不支持方法 eth_maxPriorityFeePerGas。
然而,当直接使用像 Ropsten 这样的测试网络而不需要 Ganache-cli 时,这确实有效。
按照教程运行此代码:
from solcx import compile_standard, install_solc
import json
from web3 import Web3
import os
from dotenv import load_dotenv
load_dotenv()
with open("./SimpleStorage.sol", "r") as file:
simple_storage_file = file.read()
install_solc("0.6.0")
compiled_sol = compile_standard(
{
"language": "Solidity",
"sources": {"SimpleStorage.sol": {"content": simple_storage_file}},
"settings": {
"outputSelection": {
"*": {"*": ["abi", "metadata", "evm.bytecode", "evm.sourceMap"]}
}
},
},
solc_version="0.6.0",
)
with open("compiled_code.json", "w") as file:
json.dump(compiled_sol, file)
bytecode = compiled_sol["contracts"]["SimpleStorage.sol"]["SimpleStorage"]["evm"][
"bytecode"
]["object"]
abi = compiled_sol["contracts"]["SimpleStorage.sol"]["SimpleStorage"]["abi"] …Run Code Online (Sandbox Code Playgroud) 我通过 geth 部署了一个私有网络,并在那里发布了一个智能合约。账户设置在创世区块中
我正在创建一个 python 函数,我想在其中调用智能合约函数
import web3
import json
class Estate():
with open("abi.txt", 'r') as file:
abi = json.load(file)
contract_address = "0x4FD52ce1140d67b8c721AB7967eeca44FE56c883"
contract_address = web3.Web3.toChecksumAddress(contract_address)
w3 = web3.Web3(web3.HTTPProvider('http://127.0.0.1:8545'))
con = w3.eth.contract(address=contract_address, abi=abi)
def create_estate(self, address, info, square):
address = web3.Web3.toChecksumAddress(address)
print(self.con.functions.create_estate(address, info, square).transact())
#self.w3.eth.waitForTransactionReceipt(tx)
c = Estate()
c.create_estate("0xE64021f5387Dc5FA859e0641437a45542D511e7E","street", 200)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
web3.exceptions.ExtraDataLengthError:字段 extraData 是 97 字节,但应该是 32。很可能您连接到了 POA 链。有关更多详细信息,请参阅http://web3py.readthedocs.io/en/stable/middleware.html#geth-style-proof-of-authority 。完整的额外数据为: HexBytes('0xda83010a0d846765746888676f312e31372e328777696e646f7773000000000053ea481c4aca3824d51d3c8103abe60179d3f1c4ec68a0c87d5 533e8e0580e14433b6cf8a285b519add550d59e70e60619721861b2d855cb7a175978610bb65500')
我已经创建了自己的 ERC-20 代币(AJR)并部署在以太坊私有节点上,现在我想按代币名称列出所有交易。
另外,我需要使用合约地址或代币名称列出所有代币持有者。
我尝试使用 web3 获取,但我只得到符号、名称、总供应量等,但没有得到代币持有者或交易
下面是我的示例代码:
from web3 import Web3
Web3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))
contract_instance = Web3.eth.contract(contract_address, abi=abi)
print(contract_instance.functions.name().call())
Run Code Online (Sandbox Code Playgroud) 我正在尝试获取 BSC 代币的购买或销售税,但我还没有找到方法。我通过(在本例中为 pancakeswap)查询 DEX router_contract.functions.getAmountsOut(web3.toWei(1, 'Ether'), [ buying_token_address, pair_token]).call(),但我相信这个值不包括代币税。
有谁知道如何计算税金?
我正在尝试使用“pipx install eth-brownie”安装 eth-brownie,但收到一条错误消息
pip failed to build package: cytoolz
Some possibly relevant errors from pip install:
build\lib.win-amd64-3.10\cytoolz\functoolz.cp310-win_amd64.pyd : fatal error LNK1120: 1 unresolved externals
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX86\\x64\\link.exe' failed with exit code 1120
Run Code Online (Sandbox Code Playgroud)
我查看了日志文件,它显示它无法构建 cytoolz。它还提到“警报:未安装 Cython。不使用 Cython 进行构建。”。根据我有限的理解,Cytoolz 是 Cython 的一部分,所以我认为 eth-brownie 安装失败的原因是它无法构建 cytoolz,因为它试图在没有 Cython 的情况下构建它。问题是我已经安装了 cython:
C:\Users\alaiy>pip install cython
Requirement already satisfied: cython in c:\python310\lib\site-packages (0.29.24)
Run Code Online (Sandbox Code Playgroud)
从日志文件中摘录(我可以粘贴整个内容,但它很长):
Building wheels for collected packages: bitarray, cytoolz, lru-dict, parsimonious, psutil, pygments-lexer-solidity, varint, websockets, wrapt
Building wheel for bitarray …Run Code Online (Sandbox Code Playgroud) 使用 web3 (python3) 我正在尝试解码 BSC 交易的输入数据,如 BscScan 上所示

在一些解决方案中,我发现正在使用以下代码:
import web3
from web3.contract import Contract
...
contract = web3.eth.contract(address=Web3.toChecksumAddress(tokenAddress), abi=abi)
contract.functions.decode_function_input(transaction.input)
Run Code Online (Sandbox Code Playgroud)
但是,abi 似乎没有定义此函数“decode_function_input”,因为我收到错误:
"web3.exceptions.ABIFunctionNotFound: ("The function 'decode_function_input' was not found in this contract's abi. ", 'Are you sure you provided the correct contract abi?')"
Run Code Online (Sandbox Code Playgroud)
我 100% 认为 abi 是正确的。此外,在 BscScan 合约原始视图中,函数“decode_function_input”确实不存在。
还有其他解决方案,如何解码输入数据?
在 Windows 10 中运行命令后 -python -m pip install web3出现以下错误 - “无法构建 bitarray cytoolz lru-dict”。
我通过安装 Visual Studio Build Tools 2019 并运行命令解决了该问题 -python -m pip install python-dev-tools
为什么这个过程中需要 python-dev-tools ?
const { OpenSeaPort, Network } = require("opensea-js");
const offer = await seaport.createBuyOrder({
asset: {
tokenId,
tokenAddress,
schemaName
},
accountAddress: WALLET_ADDRESS,
startAmount: newOffer / (10 ** 18),
expirationTime: Math.round(Date.now() / 1000 + 60 * 60 * 24)
});
Run Code Online (Sandbox Code Playgroud)
我将从opensea 空令牌中获取schemaName (如果是 ERC721 或 ERC1155):
在 opensea 的“详细信息”面板中,我可以看到合约模式名称,如下所示:Token Standard: ERC-1155
如何使用 node.js 或 python 从 opensea 令牌 url 获取模式名称?
我正在尝试批准并稍后通过 web3py 代码在 uniswap 上交换我的代币。我也在使用infura,而不是我自己的节点。然而,在交换和批准时我都遇到了 SolidityErrors。问题是,即使我签署了交易并将我的私钥传递到其中,web3 也无法识别我的帐户。关于如何让 web3 识别我的钱包有什么想法吗?
这是我的批准功能的代码。
def approve(self,token_name):
my_token = token(token_name)
contract = my_token.createContract()
spender = uni_router_address
max_amount = web3.toWei(2**64-1,'ether')
nonce = web3.eth.getTransactionCount(account)
tx = contract.functions.approve(spender,max_amount).buildTransaction({'nonce': nonce})
signed_tx = web3.eth.account.signTransaction(tx, self.pkey)
gas = signed_tx.estimateGas()
print(gas)
return
Run Code Online (Sandbox Code Playgroud)
我正在估算天然气,以便在发送之前知道要使用多少天然气。我知道我需要使用 sendRawTransaction 来获取本地私钥。文档并不清楚如何与现有智能合约的本地私钥进行交互。
我想计算 Uniswap v3 中特定池中锁定的总价值。我无法为此使用子图 API。
我可以使用 uniswapV3pool 合约函数获取当前流动性/范围内流动性:
in_range_liquidity = uniswapV3pool_contract.functions.liquidity().call()
Run Code Online (Sandbox Code Playgroud)
我得到了流动性的结果10608850786221311055。我是否需要对其进行处理才能获得美元价值或其他值?
最后,这只是当前的流动性,我需要总锁定价值,其中包括池中的活跃和不活跃流动性。