标签: web3py

当我尝试使用 Ganache 运行 Web3py 时,为什么会收到错误“不支持方法 eth_maxPriorityFeePerGas”?

使用 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)

python solidity ganache web3py

32
推荐指数
2
解决办法
7982
查看次数

extraData 字段是 97 字节,但应该是 32。很有可能你连接的是 POA 链

我通过 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')

python ethereum go-ethereum web3py

14
推荐指数
1
解决办法
8661
查看次数

如何从token中获取token持有者?

我已经创建了自己的 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)

python smartcontracts go-ethereum erc20 web3py

9
推荐指数
2
解决办法
2万
查看次数

如何以编程方式查找代币的税费?

我正在尝试获取 BSC 代币的购买或销售税,但我还没有找到方法。我通过(在本例中为 pancakeswap)查询 DEX router_contract.functions.getAmountsOut(web3.toWei(1, 'Ether'), [ buying_token_address, pair_token]).call(),但我相信这个值不包括代币税。

有谁知道如何计算税金?

python ethereum erc20 web3py bep20

9
推荐指数
1
解决办法
3174
查看次数

PIP 无法构建包 cytoolz

我正在尝试使用“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)

python pip cython web3py

8
推荐指数
1
解决办法
1万
查看次数

Web3 python:如何解码输入数据

使用 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”确实不存在。

还有其他解决方案,如何解码输入数据

python python-3.x blockchain ethereum web3py

8
推荐指数
1
解决办法
8736
查看次数

安装 Web3 时“无法构建 bitarray cytoolz lru-dict”

在 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 ?

python bitarray web3py

7
推荐指数
1
解决办法
1849
查看次数

如何使用node.js检查opensea上的代币是ERC721还是ERC1155

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 获取模式名称?

python node.js solidity web3py opensea

7
推荐指数
1
解决办法
6452
查看次数

如何批准代币用于支出(Uniswap 路由器合约)

我正在尝试批准并稍后通过 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 来获取本地私钥。文档并不清楚如何与现有智能合约的本地私钥进行交互。

python ethereum web3py

6
推荐指数
1
解决办法
1万
查看次数

如何计算Uniswap v3池的链上锁定总价值(TVL)?

我想计算 Uniswap v3 中特定池中锁定的总价值。我无法为此使用子图 API。

在此输入图像描述

我可以使用 uniswapV3pool 合约函数获取当前流动性/范围内流动性:

in_range_liquidity = uniswapV3pool_contract.functions.liquidity().call()
Run Code Online (Sandbox Code Playgroud)

我得到了流动性的结果10608850786221311055。我是否需要对其进行处理才能获得美元价值或其他值?

最后,这只是当前的流动性,我需要总锁定价值,其中包括池中的活跃和不活跃流动性。

python cryptocurrency web3py uniswap

6
推荐指数
1
解决办法
7661
查看次数