跳转至

web3.eth API

原文:https://web3py.readthedocs.io/en/stable/web3.eth.html

警告

哇哦,币安智能链用户!Web3.py 是一个以太坊专用的库,在伦敦网络升级时默认为“type 2”交易。BSC 显然不支持这些较新的交易类型。

从开出的问题来看,BSC 交易似乎必须包括gasPrice,但不包括typemaxFeePerGasmaxPriorityFeePerGas。如果您还有其他问题,请找到一个合适的 BSC 论坛来提出您的问题。

*class* web3.eth.Eth

web3.eth对象公开了以下属性和方法,以便与eth_名称空间下的 RPC APIs 进行交互。

通常,当一个属性或方法返回一个键到值的映射时,它将返回一个类似于dictAttributeDict,但是您可以将键作为属性访问,并且不能修改它的字段。例如,您可以通过以下两种方式找到最新的块号:

```py

block = web3.eth.get_block('latest') AttributeDict({ 'hash': '0xe8ad537a261e6fff80d551d8d087ee0f2202da9b09b64d172a5f45e818eb472a', 'number': 4022281, # ... etc ... })

block['number'] 4022281 block.number 4022281

block.number = 4022282 Traceback # ... etc ... TypeError: This data is immutable -- create a copy instead of modifying ```

T6】

性能

以下属性在web3.eth名称空间中可用。

Eth.default_account

将用作所有交易的默认from地址的以太坊地址。默认为空。

Eth.defaultAccount

警告

已弃用:此属性已弃用,取而代之的是 default_account

Eth.default_block

将用于任何接受块标识符的 RPC 方法的默认块号。默认为'latest'

Eth.defaultBlock

警告

已弃用:此属性已弃用,取而代之的是 default_block

Eth.syncing
  • 委托给eth_syncing RPC 方法

如果节点没有同步,则返回False,或者返回显示同步状态的字典。

>>> web3.eth.syncing
AttributeDict({
 'currentBlock': 2177557,
 'highestBlock': 2211611,
 'knownStates': 0,
 'pulledStates': 0,
 'startingBlock': 2177365,
}) 
Eth.coinbase
  • 委托给eth_coinbase RPC 方法

返回当前比特币基地的地址。

>>> web3.eth.coinbase
'0xd3CdA913deB6f67967B99D67aCDFa1712C293601' 
Eth.mining
  • 委托给eth_mining RPC 方法

返回关于节点当前是否正在挖掘的布尔值。

>>> web3.eth.mining
False 
Eth.hashrate
  • 委托给eth_hashrate RPC 方法

返回节点正在使用的当前每秒哈希数。

>>> web3.eth.hashrate
906 
Eth.max_priority_fee
  • 委托给eth_maxPriorityFeePerGas RPC 方法

返回对 Wei 中动态费用交易的最大优先级费用的建议。

>>> web3.eth.max_priority_fee
2000000000 
Eth.gas_price
  • 委托给eth_gasPrice RPC 方法

返回当前汽油价格,单位为魏。

>>> web3.eth.gas_price
20000000000 
Eth.gasPrice

警告

已弃用:此属性已弃用,取而代之的是 gas_price

Eth.accounts
  • 委托给eth_accounts RPC 方法

返回已知帐户的列表。

>>> web3.eth.accounts
['0xd3CdA913deB6f67967B99D67aCDFa1712C293601'] 
Eth.block_number
  • 委托给eth_blockNumber RPC 方法

返回最近块的编号

get_block_number()别名为

>>> web3.eth.block_number
2206939 
Eth.blockNumber

警告

已弃用:此属性已弃用,取而代之的是 block_number

Eth.protocol_version
  • 委托给eth_protocolVersion RPC 方法

返回当前以太坊协议版本的 id。

>>> web3.eth.protocol_version
'63' 
Eth.protocolVersion

警告

已弃用:此属性已弃用,取而代之的是 protocol_version

Eth.chain_id
  • 委托给eth_chainId RPC 方法

Returns the integer value of the currently configured "chain Id" value introduced in EIP-155 If there is no available chain Id, None is returned.

```py

web3.eth.chain_id 61 ```

注意

这个属性在验证中间件中经常被调用,但是默认情况下 chain_id 被添加到simple_cache_middleware中。将 simple_cache_middleware 添加到middleware_onion以提高性能:

```py

from web3.middleware import simple_cache_middleware w3.middleware_onion.add(simple_cache_middleare) ```

T6】

Eth.chainId

警告

已弃用:此属性已弃用,取而代之的是chain_id

方法

以下方法在web3.eth名称空间中可用。

Eth.get_balance(*account*, *block_identifier=eth.default_block*)
  • 委托给eth_getBalance RPC 方法

返回给定的accountblock_identifier指定的块上的余额。

account可能是校验和地址或 ENS 名称

>>> web3.eth.get_balance('0xd3CdA913deB6f67967B99D67aCDFa1712C293601')
77320681768999138915 
Eth.getBalance(*account*, *block_identifier=eth.default_block*)

警告

已弃用:此方法已弃用,取而代之的是get_balance()

Eth.get_block_number()
  • 委托给eth_blockNumber RPC 方法

返回最近块的编号。

>>> web3.eth.get_block_number()
2206939 
Eth.get_storage_at(*account*, *position*, *block_identifier=eth.default_block*)
  • 委托给eth_getStorageAt RPC 方法

从由block_identifier指定的块中给定的account的存储位置返回数值。

account可能是校验和地址或 ENS 名称

>>> web3.eth.get_storage_at('0x6C8f2A135f6ed072DE4503Bd7C4999a1a17F824B', 0)
'0x00000000000000000000000000000000000000000000000000120a0b063499d4' 
Eth.getStorageAt(*account*, *position*, *block_identifier=eth.default_block*)

警告

已弃用:此方法已弃用,取而代之的是 get_storage_at()

Eth.get_proof(*account*, *positions*, *block_identifier=eth.default_block*)
  • 委托给eth_getProof RPC 方法

从由block_identifier指定的块中给定的account的存储位置数组中返回值。

account可能是校验和地址或 ENS 名称

>>> web3.eth.get_proof('0x6C8f2A135f6ed072DE4503Bd7C4999a1a17F824B', [0], 3391)
AttributeDict({
 'address': '0x4CB06C43fcdABeA22541fcF1F856A6a296448B6c',
 'accountProof': ['0xf90211a03841a7ddd65c70c94b8efa79190d00f0ab134b26f18dcad508f60a7e74559d0ba0464b07429a05039e22931492d6c6251a860c018ea390045d596b1ac11b5c7aa7a011f4b89823a03c9c4b5a8ab079ee1bc0e2a83a508bb7a5dc7d7fb4f2e95d3186a0b5f7c51c3b2d51d97f171d2b38a4df1a7c0acc5eb0de46beeff4d07f5ed20e19a0b591a2ce02367eda31cf2d16eca7c27fd44dbf0864b64ea8259ad36696eb2a04a02b646a7552b8392ae94263757f699a27d6e9176b4c06b9fc0a722f893b964795a02df05d68bceb88eebf68aafde61d10ab942097afc1c58b8435ffd3895358a742a0c2f16143c4d1db03276c433696dddb3e9f3b113bcd854b127962262e98f43147a0828820316cc02bfefd899aba41340659fd06df1e0a0796287ec2a4110239f6d2a050496598670b04df7bbff3718887fa36437d6d8c7afb4eff86f76c5c7097dcc4a0c14e9060c6b3784e35b9e6ae2ad2984142a75910ccc89eb89dc1e2f44b6c58c2a009804db571d0ce07913e1cbacc4f1dc4fb8265c936f5c612e3a47e91c64d8e9fa063d96f38b3cb51b1665c6641e25ffe24803f2941e5df79942f6a53b7169647e4a0899f71abb18c6c956118bf567fac629b75f7e9526873e429d3d8abb6dbb58021a00fd717235298742623c0b3cafb3e4bd86c0b5ab1f71097b4dd19f3d6925d758da0096437146c16097f2ccc1d3e910d65a4132803baee2249e72c8bf0bcaaeb37e580',
 '0xf90151a097b17a89fd2c03ee98cb6459c08f51b269da5cee46650e84470f62bf83b43efe80a03b269d284a4c3cf8f8deacafb637c6d77f607eec8d75e8548d778e629612310480a01403217a7f1416830c870087c524dabade3985271f6f369a12b010883c71927aa0f592ac54c879817389663be677166f5022943e2fe1b52617a1d15c2f353f27dda0ac8d015a9e668f5877fcc391fae33981c00577096f0455b42df4f8e8089ece24a003ba34a13e2f2fb4bf7096540b42d4955c5269875b9cf0f7b87632585d44c9a580a0b179e3230b07db294473ae57f0170262798f8c551c755b5665ace1215cee10ca80a0552d24252639a6ae775aa1df700ffb92c2411daea7286f158d44081c8172d072a0772a87d08cf38c4c68bfde770968571abd16fd3835cb902486bd2e515d53c12d80a0413774f3d900d2d2be7a3ad999ffa859a471dc03a74fb9a6d8275455f5496a548080',
 '0xf869a020d13b52a61d3c1325ce3626a51418adebd6323d4840f1bdd93906359d11c933b846f8440180a01ab7c0b0a2a4bbb5a1495da8c142150891fc64e0c321e1feb70bd5f881951f7ea0551332d96d085185ab4019ad8bcf89c45321e136c261eb6271e574a2edf1461f'
 ],
 'balance': 0,
 'codeHash': '0x551332d96d085185ab4019ad8bcf89c45321e136c261eb6271e574a2edf1461f',
 'nonce': 1,
 'storageHash': '0x1ab7c0b0a2a4bbb5a1495da8c142150891fc64e0c321e1feb70bd5f881951f7e',
 'storageProof': [
 AttributeDict({
 'key': '0x00',
 'value': '0x48656c6c6f00000000000000000000000000000000000000000000000000000a',
 'proof': ['0xf9019180a01ace80e7bed79fbadbe390876bd1a7d9770edf9462049ef8f4b555d05715d53ea049347a3c2eac6525a3fd7e3454dab19d73b4adeb9aa27d29493b9843f3f88814a085079b4abcd07fd4a5d6c52d35f4c4574aecc85830e90c478ca8c18fcbe590de80a02e3f8ad7ea29e784007f51852b9c3e470aef06b11bac32586a8b691134e4c27da064d2157a14bc31f195f73296ea4dcdbe7698edbf3ca81c44bf7730179d98d94ca09e7dc2597c9b7f72ddf84d7eebb0fe2a2fa2ab54fe668cd14fee44d9b40b1a53a0aa5d4acc7ac636d16bc9655556770bc325e1901fb62dc53770ef9110009e080380a0d5fde962bd2fb5326ddc7a9ca7fe0ee47c5bb3227f838b6d73d3299c22457596a08691410eff46b88f929ef649ea25025f62a5362ca8dc8876e5e1f4fc8e79256d80a0673e88d3a8a4616f676793096b5ae87cff931bd20fb8dd466f97809a1126aad8a08b774a45c2273553e2daf4bbc3a8d44fb542ea29b6f125098f79a4d211b3309ca02fed3139c1791269acb9365eddece93e743900eba6b42a6a8614747752ba268f80',
 '0xf891808080a0c7d094301e0c54da37b696d85f72de5520b224ab2cf4f045d8db1a3374caf0488080a0fc5581783bfe27fab9423602e1914d719fd71433e9d7dd63c95fe7e58d10c9c38080a0c64f346fc7a21f6679cba8abdf37ca2de8c4fcd8f8bcaedb261b5f77627c93908080808080a0ddef2936a67a3ac7d3d4ff15a935a45f2cc4976c8f0310aed85daf763780e2b480',
 '0xf843a0200decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a048656c6c6f00000000000000000000000000000000000000000000000000000a'
 ]
 })
 ]
}) 
  • 使用 py-trie 进行 Merkle 证明验证。

以下示例验证 AttributeDict 中返回的值是否包含在给定 trie root的状态中。

from eth_utils import (
    keccak,
)
import rlp
from rlp.sedes import (
    Binary,
    big_endian_int,
)
from trie import (
    HexaryTrie,
)
from web3._utils.encoding import (
    pad_bytes,
)

def format_proof_nodes(proof):
    trie_proof = []
    for rlp_node in proof:
        trie_proof.append(rlp.decode(bytes(rlp_node)))
    return trie_proof

def verify_eth_get_proof(proof, root):
    trie_root = Binary.fixed_length(32, allow_empty=True)
    hash32 = Binary.fixed_length(32)

    class _Account(rlp.Serializable):
        fields = [
                    ('nonce', big_endian_int),
                    ('balance', big_endian_int),
                    ('storage', trie_root),
                    ('code_hash', hash32)
                ]
    acc = _Account(
        proof.nonce, proof.balance, proof.storageHash, proof.codeHash
    )
    rlp_account = rlp.encode(acc)
    trie_key = keccak(bytes.fromhex(proof.address[2:]))

    assert rlp_account == HexaryTrie.get_from_proof(
        root, trie_key, format_proof_nodes(proof.accountProof)
    ), "Failed to verify account proof {}".format(proof.address)

    for storage_proof in proof.storageProof:
        trie_key = keccak(pad_bytes(b'\x00', 32, storage_proof.key))
        root = proof.storageHash
        if storage_proof.value == b'\x00':
            rlp_value = b''
        else:
            rlp_value = rlp.encode(storage_proof.value)

        assert rlp_value == HexaryTrie.get_from_proof(
            root, trie_key, format_proof_nodes(storage_proof.proof)
        ), "Failed to verify storage proof {}".format(storage_proof.key)

    return True

block = w3.eth.get_block(3391)
proof = w3.eth.get_proof('0x6C8f2A135f6ed072DE4503Bd7C4999a1a17F824B', [0, 1], 3391)
assert verify_eth_get_proof(proof, block.stateRoot) 
Eth.getProof(*account*, *positions*, *block_identifier=eth.default_block*)

警告

已弃用:此方法已弃用,取而代之的是 get_proof()

Eth.get_code(*account*, *block_identifier=eth.default_block*)
  • 委托给eth_getCode RPC 方法

在由block_identifier指定的块中返回给定account的字节码。

account可能是校验和地址或 ENS 名称

# For a contract address.
>>> web3.eth.get_code('0x6C8f2A135f6ed072DE4503Bd7C4999a1a17F824B')
'0x6060604052361561027c5760e060020a60003504630199.....'
# For a private key address.
>>> web3.eth.get_code('0xd3CdA913deB6f67967B99D67aCDFa1712C293601')
'0x' 
Eth.getCode(*account*, *block_identifier=eth.default_block*)

警告

已弃用:此方法已弃用,取而代之的是 get_code()

Eth.get_block(*block_identifier=eth.default_block*, *full_transactions=False*)
  • 委托给eth_getBlockByNumbereth_getBlockByHash RPC 方法

返回由block_identifier指定的块。如果block_identifier是一个整数或一个预定义的块参数'latest', 'earliest', 'pending', 'safe', 'finalized',则委托给eth_getBlockByNumber,否则委托给eth_getBlockByHash。如果没有找到块,抛出BlockNotFound错误。

如果full_transactionsTrue,那么'transactions'键将包含完整的事务对象。否则,它将是一个事务散列数组。

>>> web3.eth.get_block(2000000)
AttributeDict({
 'difficulty': 49824742724615,
 'extraData': '0xe4b883e5bda9e7a59ee4bb99e9b1bc',
 'gasLimit': 4712388,
 'gasUsed': 21000,
 'hash': '0xc0f4906fea23cf6f3cce98cb44e8e1449e455b28d684dfa9ff65426495584de6',
 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
 'miner': '0x61c808d82a3ac53231750dadc13c777b59310bd9',
 'nonce': '0x3b05c6d5524209f1',
 'number': 2000000,
 'parentHash': '0x57ebf07eb9ed1137d41447020a25e51d30a0c272b5896571499c82c33ecb7288',
 'receiptRoot': '0x84aea4a7aad5c5899bd5cfc7f309cc379009d30179316a2a7baa4a2ea4a438ac',
 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
 'size': 650,
 'stateRoot': '0x96dbad955b166f5119793815c36f11ffa909859bbfeb64b735cca37cbf10bef1',
 'timestamp': 1470173578,
 'totalDifficulty': 44010101827705409388,
 'transactions': ['0xc55e2b90168af6972193c1f86fa4d7d7b31a29c156665d15b9cd48618b5177ef'],
 'transactionsRoot': '0xb31f174d27b99cdae8e746bd138a01ce60d8dd7b224f7c60845914def05ecc58',
 'uncles': [],
}) 
Eth.getBlock(*block_identifier=eth.default_block*, *full_transactions=False*)

警告

已弃用:此方法已弃用,取而代之的是 get_block()

Eth.get_block_transaction_count(*block_identifier*)
  • 委托给eth_getBlockTransactionCountByNumbereth_getBlockTransactionCountByHash RPC 方法

返回由block_identifier指定的块中的事务数量。如果block_identifier是整数或预定义的块参数'latest', 'earliest', 'pending', 'safe', 'finalized'之一,则委托给eth_getBlockTransactionCountByNumber,否则委托给eth_getBlockTransactionCountByHash。如果没有找到事务,抛出BlockNotFoundError

>>> web3.eth.get_block_transaction_count(46147)
1
>>> web3.eth.get_block_transaction_count('0x4e3a3754410177e6937ef1f84bba68ea139e8d1a2258c5f85db9f1cd715a1bdd')  # block 46147
1 
Eth.getBlockTransactionCount(*block_identifier*)

警告

已弃用:此方法已弃用,取而代之的是 get_block_transaction_count()

Eth.getUncle(*block_identifier*)

注意

从它的散列中获得一个叔叔的方法不能通过 RPC 获得,一个可能的替代方法是方法Eth.get_uncle_by_block

Eth.get_uncle_by_block(*block_identifier*, *uncle_index*)
  • 委托给eth_getUncleByBlockHashAndIndexeth_getUncleByBlockNumberAndIndex RPC 方法

block_identifier指定的块中返回uncle_index指定的索引处的叔叔。如果block_identifier是整数或预定义的块参数'latest', 'earliest', 'pending'之一,则委托给eth_getUncleByBlockNumberAndIndex,否则委托给eth_getUncleByBlockHashAndIndex。如果没有找到块,抛出BlockNotFound

>>> web3.eth.get_uncle_by_block(56160, 0)
AttributeDict({
 'author': '0xbe4532e1b1db5c913cf553be76180c1777055403',
 'difficulty': '0x17dd9ca0afe',
 'extraData': '0x476574682f686261722f76312e302e312f6c696e75782f676f312e342e32',
 'gasLimit': '0x2fefd8',
 'gasUsed': '0x0',
 'hash': '0xc78c35720d930f9ef34b4e6fb9d02ffec936f9b02a8f0fa858456e4afd4d5614',
 'logsBloom':'0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
 'miner': '0xbe4532e1b1db5c913cf553be76180c1777055403',
 'mixHash': '0x041e14603f35a82f6023802fec96ef760433292434a39787514f140950597e5e',
 'nonce': '0x5d2b7e3f1af09995',
 'number': '0xdb5e',
 'parentHash': '0xcc30e8a9b15c548d5bf113c834143a8f0e1909fbfea96b2a208dc154293a78cf',
 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
 'sealFields': ['0xa0041e14603f35a82f6023802fec96ef760433292434a39787514f140950597e5e', '0x885d2b7e3f1af09995'],
 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
 'size': None, 'stateRoot': '0x8ce2b1bf8e25a06a8ca34c647ff5fd0fa48ac725cc07f657ae1645ab8ef68c91',
 'timestamp': '0x55c6a972',
 'totalDifficulty': '0xce4c4f0a0b810b',
 'transactions': [],
 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
 'uncles': []
})

# You can also refer to the block by hash:
>>> web3.eth.get_uncle_by_block('0x685b2226cbf6e1f890211010aa192bf16f0a0cba9534264a033b023d7367b845', 0)
AttributeDict({
 ...
}) 
Eth.getUncleByBlock(*block_identifier*, *uncle_index*)

警告

已弃用:此方法已弃用,取而代之的是 get_uncle_by_block()

Eth.get_uncle_count(*block_identifier*)
  • 委托给eth_getUncleCountByBlockHasheth_getUncleCountByBlockNumber RPC 方法

返回与由block_identifier指定的块相关的(整数)个叔叔。如果block_identifier是整数或预定义的块参数'latest', 'earliest', 'pending'之一,则委托给eth_getUncleCountByBlockNumber,否则委托给eth_getUncleCountByBlockHash。如果没有找到该块,抛出BlockNotFound

>>> web3.eth.get_uncle_count(56160)
1

# You can also refer to the block by hash:
>>> web3.eth.get_uncle_count('0x685b2226cbf6e1f890211010aa192bf16f0a0cba9534264a033b023d7367b845')
1 
Eth.getUncleCount(*block_identifier*)

警告

已弃用:此方法已弃用,取而代之的是 get_uncle_count()

Eth.get_transaction(*transaction_hash*)
  • 委托给eth_getTransactionByHash RPC 方法

返回由transaction_hash指定的交易。如果找不到事务,抛出web3.exceptions.TransactionNotFound

>>> web3.eth.get_transaction('0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060')
AttributeDict({
 'blockHash': '0x4e3a3754410177e6937ef1f84bba68ea139e8d1a2258c5f85db9f1cd715a1bdd',
 'blockNumber': 46147,
 'from': '0xA1E4380A3B1f749673E270229993eE55F35663b4',
 'gas': 21000,
 'gasPrice': None,
 'hash': '0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060',
 'input': '0x',
 'maxFeePerGas': 2000000000,
 'maxPriorityFeePerGas': 1000000000,
 'nonce': 0,
 'to': '0x5DF9B87991262F6BA471F09758CDE1c0FC1De734',
 'transactionIndex': 0,
 'value': 31337,
}) 
Eth.getTransaction(*transaction_hash*)

警告

已弃用:此方法已弃用,取而代之的是 get_transaction

Eth.get_raw_transaction(*transaction_hash*)
  • 委托给eth_getRawTransactionByHash RPC 方法

返回由transaction_hash指定的交易的原始形式。

如果没有找到事务,则引发TransactionNotFound

>>> web3.eth.get_raw_transaction('0x86fbfe56cce542ff0a2a2716c31675a0c9c43701725c4a751d20ee2ddf8a733d')
HexBytes('0xf86907843b9aca0082520894dc544d1aa88ff8bbd2f2aec754b1f1e99e1812fd018086eecac466e115a0f9db4e25484b28f486b247a372708d4cd0643fc63e604133afac577f4cc1eab8a044841d84e799d4dc18ba146816a937e8a0be8bc296bd8bb8aea126de5e627e06') 
Eth.getTransactionFromBlock(*block_identifier*, *transaction_index*)

注意

这种方法在 EIP 1474 中被否决。

Eth.get_transaction_by_block(*block_identifier*, *transaction_index*)
  • 委托给eth_getTransactionByBlockNumberAndIndexeth_getTransactionByBlockHashAndIndex RPC 方法

从由block_identifier指定的块中返回由transaction_index指定的索引处的事务。如果block_identifier是整数或预定义的块参数'latest', 'earliest', 'pending', 'safe', 'finalized'之一,则委托给eth_getTransactionByBlockNumberAndIndex,否则委托给eth_getTransactionByBlockHashAndIndex。如果在指定的参数处没有找到事务,抛出web3.exceptions.TransactionNotFound

>>> web3.eth.get_transaction_by_block(46147, 0)
AttributeDict({
 'blockHash': '0x4e3a3754410177e6937ef1f84bba68ea139e8d1a2258c5f85db9f1cd715a1bdd',
 'blockNumber': 46147,
 'from': '0xA1E4380A3B1f749673E270229993eE55F35663b4',
 'gas': 21000,
 'gasPrice': None,
 'hash': '0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060',
 'input': '0x',
 'maxFeePerGas': 2000000000,
 'maxPriorityFeePerGas': 1000000000,
 'nonce': 0,
 'to': '0x5DF9B87991262F6BA471F09758CDE1c0FC1De734',
 'transactionIndex': 0,
 'value': 31337,
})
>>> web3.eth.get_transaction_by_block('0x4e3a3754410177e6937ef1f84bba68ea139e8d1a2258c5f85db9f1cd715a1bdd', 0)
AttributeDict({
 'blockHash': '0x4e3a3754410177e6937ef1f84bba68ea139e8d1a2258c5f85db9f1cd715a1bdd',
 'blockNumber': 46147,
 'from': '0xA1E4380A3B1f749673E270229993eE55F35663b4',
 'gas': 21000,
 'gasPrice': None,
 'hash': '0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060',
 'input': '0x',
 'maxFeePerGas': 2000000000,
 'maxPriorityFeePerGas': 1000000000,
 'nonce': 0,
 'to': '0x5DF9B87991262F6BA471F09758CDE1c0FC1De734',
 'transactionIndex': 0,
 'value': 31337,
}) 
Eth.getTransactionByBlock(*block_identifier*, *transaction_index*)

警告

已弃用:此方法已弃用,取而代之的是 get_transaction_by_block

Eth.get_raw_transaction_by_block(*block_identifier*, *transaction_index*)
  • 委托给eth_getRawTransactionByBlockNumberAndIndexeth_getRawTransactionByBlockHashAndIndex RPC 方法

从由block_identifier指定的块中返回由transaction_index指定的索引处的原始事务。如果block_identifier是整数或预定义的块参数'latest', 'earliest', 'pending', 'safe', 'finalized'之一,则委托给eth_getRawTransactionByBlockNumberAndIndex,否则委托给eth_getRawTransactionByBlockHashAndIndex。如果在指定的参数处没有找到事务,抛出web3.exceptions.TransactionNotFound

>>> web3.eth.get_raw_transaction_by_block('latest', 0)
HexBytes('0x02f87582053901843b9aca00843b9aca008301d8a894e2dfcfa89a45abdc3de91f7a2844b276b8451d2e888ac7230489e8000080c001a028dcd2e11682288c00237f377280bc6a478a6b27e9c2d745262152add1b1dfcba04e7a33b7ce2a37fc3cd3af7bdc7d7beff721664d56508defa188df35afd77c2c')
>>> web3.eth.get_raw_transaction_by_block(2, 0)
HexBytes('0x02f87582053901843b9aca00843b9aca008301d8a894e2dfcfa89a45abdc3de91f7a2844b276b8451d2e888ac7230489e8000080c001a028dcd2e11682288c00237f377280bc6a478a6b27e9c2d745262152add1b1dfcba04e7a33b7ce2a37fc3cd3af7bdc7d7beff721664d56508defa188df35afd77c2c')
>>> web3.eth.get_raw_transaction_by_block('0xca609fb606a04ce6aaec76415cd0b9d8c2bc83ad2a4d17db7fd403ee7d97bf40', 0)
HexBytes('0x02f87582053901843b9aca00843b9aca008301d8a894e2dfcfa89a45abdc3de91f7a2844b276b8451d2e888ac7230489e8000080c001a028dcd2e11682288c00237f377280bc6a478a6b27e9c2d745262152add1b1dfcba04e7a33b7ce2a37fc3cd3af7bdc7d7beff721664d56508defa188df35afd77c2c') 
Eth.wait_for_transaction_receipt(*transaction_hash*, *timeout=120*, *poll_latency=0.1*)

等待由transaction_hash指定的交易被包含在一个块中,然后返回其交易收据。

或者,以秒为单位指定一个timeout。如果在事务被添加到块之前超时,那么 wait_for_transaction_receipt() 引发web3.exceptions.TimeExhausted异常。

>>> web3.eth.wait_for_transaction_receipt('0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060')
# If transaction is not yet in a block, time passes, while the thread sleeps...
# ...
# Then when the transaction is added to a block, its receipt is returned:
AttributeDict({
 'blockHash': '0x4e3a3754410177e6937ef1f84bba68ea139e8d1a2258c5f85db9f1cd715a1bdd',
 'blockNumber': 46147,
 'contractAddress': None,
 'cumulativeGasUsed': 21000,
 'from': '0xA1E4380A3B1f749673E270229993eE55F35663b4',
 'gasUsed': 21000,
 'logs': [],
 'logsBloom': '0x000000000000000000000000000000000000000000000000...0000',
 'status': 1,
 'to': '0x5DF9B87991262F6BA471F09758CDE1c0FC1De734',
 'transactionHash': '0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060',
 'transactionIndex': 0,
}) 
Eth.waitForTransactionReceipt(*transaction_hash*, *timeout=120*, *poll_latency=0.1*)

警告

已弃用:此方法已弃用,取而代之的是 wait_for_transaction_receipt()

Eth.get_transaction_receipt(*transaction_hash*)
  • 委托给eth_getTransactionReceipt RPC 方法

返回transaction_hash指定的交易回单。如果找不到事务,抛出web3.exceptions.TransactionNotFound

如果响应中的status等于 1,则交易成功。如果它等于 0,则事务被 EVM 恢复。

>>> web3.eth.get_transaction_receipt('0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060')  # not yet mined
Traceback # ... etc ...
TransactionNotFound: Transaction with hash: 0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060 not found.

# wait for it to be mined....
>>> web3.eth.get_transaction_receipt('0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060')
AttributeDict({
 'blockHash': '0x4e3a3754410177e6937ef1f84bba68ea139e8d1a2258c5f85db9f1cd715a1bdd',
 'blockNumber': 46147,
 'contractAddress': None,
 'cumulativeGasUsed': 21000,
 'from': '0xA1E4380A3B1f749673E270229993eE55F35663b4',
 'gasUsed': 21000,
 'logs': [],
 'logsBloom': '0x000000000000000000000000000000000000000000000000...0000',
 'status': 1, # 0 or 1
 'to': '0x5DF9B87991262F6BA471F09758CDE1c0FC1De734',
 'transactionHash': '0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060',
 'transactionIndex': 0,
}) 
Eth.getTransactionReceipt(*transaction_hash*)

警告

已弃用:此方法已弃用,取而代之的是 get_transaction_receipt()

Eth.get_transaction_count(*account*, *block_identifier=web3.eth.default_block*)
  • 委托给eth_getTransactionCount RPC 方法

返回截至block_identifier指定的块时从account发送的交易数量。

account可能是校验和地址或 ENS 名称

>>> web3.eth.get_transaction_count('0xd3CdA913deB6f67967B99D67aCDFa1712C293601')
340 
Eth.getTransactionCount(*account*, *block_identifier=web3.eth.default_block*)

警告

已弃用:此方法已弃用,取而代之的是 get_transaction_count()

Eth.send_transaction(*transaction*)
  • 委托给eth_sendTransaction RPC 方法

签署并发送给定的transaction

transaction参数应该是一个包含以下字段的字典。

  • from : bytes or text,校验和地址或 ENS 名称-(可选,默认:web3.eth.defaultAccount)发送交易的地址。
  • to : bytes or text,校验和地址或 ENS 名称-(创建新合约时可选)交易指向的地址。
  • gas : integer -(可选)为交易执行提供的 gas 的整数。它将返回未使用的气体。
  • maxFeePerGas : integer or hex -(可选)您愿意支付的最高金额,包括baseFeePerGasmaxPriorityFeePerGasmaxFeePerGasbaseFeePerGas + maxPriorityFeePerGas之间的差额退还给用户。
  • maxPriorityFeePerGas : integer or hex -(可选)矿工获得的那部分费用
  • gasPrice : integer -每笔已付气遗留气所用气价的整数-除非你有很好的理由使用gasPrice,否则用maxFeePerGasmaxPriorityFeePerGas代替。
  • value : integer -(可选)随该交易发送的值的整数
  • data : bytes or text -合约的编译代码或调用的方法签名和编码参数的散列。详见以太坊合约 ABI
  • nonce : integer -(可选)随机数的整数。这允许覆盖您自己的使用相同 nonce 的未决事务。

如果transaction指定了一个data值,但没有指定gas,那么gas值将使用 estimate_gas() 函数填充,并增加一个100000气体的额外缓冲,直到最后一个块的gasLimit。在 estimate_gas() 方法返回的值大于gasLimit的情况下,将引发ValueError

# simple example (Web3.py and / or client determines gas and fees, typically defaults to a dynamic fee transaction post London fork)
>>> web3.eth.send_transaction({
  'to': '0xd3CdA913deB6f67967B99D67aCDFa1712C293601',
  'from': web3.eth.coinbase,
  'value': 12345
})

# Dynamic fee transaction, introduced by EIP-1559:
HexBytes('0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331')
>>> web3.eth.send_transaction({
  'to': '0xd3CdA913deB6f67967B99D67aCDFa1712C293601',
  'from': web3.eth.coinbase,
  'value': 12345,
  'gas': 21000,
  'maxFeePerGas': web3.toWei(250, 'gwei'),
  'maxPriorityFeePerGas': web3.toWei(2, 'gwei'),
})
HexBytes('0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331')

# Legacy transaction (less efficient)
HexBytes('0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331')
>>> web3.eth.send_transaction({
  'to': '0xd3CdA913deB6f67967B99D67aCDFa1712C293601',
  'from': web3.eth.coinbase,
  'value': 12345,
  'gas': 21000,
  'gasPrice': web3.toWei(50, 'gwei'),
})
HexBytes('0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331') 
Eth.sendTransaction(*transaction*)

警告

已弃用:此方法已弃用,取而代之的是 send_transaction()

Eth.sign_transaction(*transaction*)
  • 委托给eth_signTransaction RPC 方法。

返回已由节点的私钥签名但尚未提交的事务。可以使用Eth.send_raw_transaction提交已签名的 tx

>>> signed_txn = w3.eth.sign_transaction(dict(
 nonce=w3.eth.get_transaction_count(w3.eth.coinbase),
 maxFeePerGas=2000000000,
 maxPriorityFeePerGas=1000000000,
 gas=100000,
 to='0xd3CdA913deB6f67967B99D67aCDFa1712C293601',
 value=1,
 data=b'',
 )
)
b"\xf8d\x80\x85\x040\xe24\x00\x82R\x08\x94\xdcTM\x1a\xa8\x8f\xf8\xbb\xd2\xf2\xae\xc7T\xb1\xf1\xe9\x9e\x18\x12\xfd\x01\x80\x1b\xa0\x11\r\x8f\xee\x1d\xe5=\xf0\x87\x0en\xb5\x99\xed;\xf6\x8f\xb3\xf1\xe6,\x82\xdf\xe5\x97lF|\x97%;\x15\xa04P\xb7=*\xef \t\xf0&\xbc\xbf\tz%z\xe7\xa3~\xb5\xd3\xb7=\xc0v\n\xef\xad+\x98\xe3'"  # noqa: E501 
Eth.signTransaction(*transaction*)

警告

已弃用:此方法已弃用,取而代之的是 sign_transaction()

Eth.send_raw_transaction(*raw_transaction*)
  • 委托给eth_sendRawTransaction RPC 方法

发送已签名和序列化的事务。以 HexBytes 对象的形式返回事务哈希。

>>> signed_txn = w3.eth.account.sign_transaction(dict(
 nonce=w3.eth.get_transaction_count(public_address_of_senders_account),
 maxFeePerGas=3000000000,
 maxPriorityFeePerGas=2000000000,
 gas=100000,
 to='0xd3CdA913deB6f67967B99D67aCDFa1712C293601',
 value=12345,
 data=b'',
 type=2,  # (optional) the type is now implicitly set based on appropriate transaction params
 chainId=1,
 ),
 private_key_for_senders_account,
)
>>> w3.eth.send_raw_transaction(signed_txn.rawTransaction)
HexBytes('0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331') 
Eth.sendRawTransaction(*raw_transaction*)

警告

已弃用:此方法已弃用,取而代之的是 send_raw_transaction()

Eth.replace_transaction(*transaction_hash*, *new_transaction*)
  • 委托给eth_sendTransaction RPC 方法

发送用transaction_hash替换事务的事务。

transaction_hash必须是未决事务的散列。

new_transaction参数应该是一个字典,包含 send_transaction() 要求的交易字段。它将用于完全替换transaction_hash的交易,而不使用任何未决交易的值。

如果new_transaction指定了一个nonce值,它必须匹配未决事务的 nonce。

如果new_transaction指定了maxFeePerGasmaxPriorityFeePerGas值,它们必须分别大于每个字段的未决事务的值。

  • 遗留事务支持(效率较低-不推荐)

如果未决事务指定了一个gasPrice值(遗留事务),new_transactiongasPrice值必须大于未决事务的gasPrice

如果new_transaction没有指定gasPricemaxFeePerGasmaxPriorityFeePerGas值中的任何一个,将会发生以下情况之一:

  • 如果未决事务有一个gasPrice值,该值将与乘数 1.125 一起使用——这通常是节点在接受替换事务之前需要的最小gasPrice增量。
  • 如果设置了燃气价格策略,将使用燃气价格策略中的gasPrice值(参见 燃气价格 API )。
  • 如果以上都不是,客户端将最终决定maxFeePerGasmaxPriorityFeePerGas的适当值。这些很可能是默认值,并可能导致未决交易的不成功替换。

该方法将替换事务的事务哈希作为 HexBytes 对象返回。

>>> tx = web3.eth.send_transaction({
 'to': '0xd3CdA913deB6f67967B99D67aCDFa1712C293601',
 'from': web3.eth.coinbase,
 'value': 1000
 })
HexBytes('0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331')
>>> web3.eth.replace_transaction('0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331', {
 'to': '0xd3CdA913deB6f67967B99D67aCDFa1712C293601',
 'from': web3.eth.coinbase,
 'value': 2000
 })
HexBytes('0x4177e670ec6431606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1528989') 
Eth.replaceTransaction(*transaction_hash*, *new_transaction*)

警告

已弃用:此方法已弃用,取而代之的是 replace_transaction()

Eth.modify_transaction(*transaction_hash*, ***transaction_params*)
  • 委托给eth_sendTransaction RPC 方法

发送用transaction_hash修改交易的交易。

transaction_paramssend_transaction() 要求的有效交易参数对应的关键字参数。参数值将覆盖待定事务的值,以创建要发送的替换事务。

同样的验证和默认规则 replace_transaction() 也适用。

该方法将新修改的事务的事务哈希作为 HexBytes 对象返回。

>>> tx = web3.eth.send_transaction({
 'to': '0xd3CdA913deB6f67967B99D67aCDFa1712C293601',
 'from': web3.eth.coinbase,
 'value': 1000
 })
HexBytes('0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331')
>>> web3.eth.modify_transaction('0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331', value=2000)
HexBytes('0xec6434e6701771606e55d6b4ca35a1a6b75ee3d73315145a921026d15299d05') 
Eth.modifyTransaction(*transaction_hash*, ***transaction_params*)

警告

已弃用:此方法已弃用,取而代之的是 modify_transaction()

Eth.sign(*account*, *data=None*, *hexstr=None*, *text=None*)
  • 委托给eth_sign RPC 方法

调用者必须指定datahexstrtext中的一个。

用给定account的私钥签署给定数据。帐户必须解锁。

account可能是校验和地址或 ENS 名称

>>> web3.eth.sign(
 '0xd3CdA913deB6f67967B99D67aCDFa1712C293601',
 text='some-text-tö-sign')
'0x1a8bbe6eab8c72a219385681efefe565afd3accee35f516f8edf5ae82208fbd45a58f9f9116d8d88ba40fcd29076d6eada7027a3b412a9db55a0164547810cc401'

>>> web3.eth.sign(
 '0xd3CdA913deB6f67967B99D67aCDFa1712C293601',
 data=b'some-text-t\xc3\xb6-sign')
'0x1a8bbe6eab8c72a219385681efefe565afd3accee35f516f8edf5ae82208fbd45a58f9f9116d8d88ba40fcd29076d6eada7027a3b412a9db55a0164547810cc401'

>>> web3.eth.sign(
 '0xd3CdA913deB6f67967B99D67aCDFa1712C293601',
 hexstr='0x736f6d652d746578742d74c3b62d7369676e')
'0x1a8bbe6eab8c72a219385681efefe565afd3accee35f516f8edf5ae82208fbd45a58f9f9116d8d88ba40fcd29076d6eada7027a3b412a9db55a0164547810cc401' 
Eth.sign_typed_data(*account*, *jsonMessage*)
  • 委托给eth_signTypedData RPC 方法

请注意,jsonMessage参数是加载的 JSON 对象,而不是JSON 字符串本身。

用给定account的私钥签署Structured Data(或Typed Data)。帐户必须解锁。

account可能是校验和地址或 ENS 名称

Eth.signTypedData(*account*, *jsonMessage*)

警告

已弃用:此属性已弃用,取而代之的是 sign_typed_data()

Eth.call(*transaction*, *block_identifier=web3.eth.default_block*, *state_override=None*)
  • 委托给eth_call RPC 方法

在本地执行给定的事务,而不在区块链上创建新的事务。返回已执行协定的返回值。

transaction参数的处理方式与 send_transaction() 方法相同。

>>> myContract.functions.setVar(1).transact()
HexBytes('0x79af0c7688afba7588c32a61565fd488c422da7b5773f95b242ea66d3d20afda')
>>> myContract.functions.getVar().call()
1
# The above call equivalent to the raw call:
>>> w3.eth.call({'value': 0, 'gas': 21736, 'maxFeePerGas': 2000000000, 'maxPriorityFeePerGas': 1000000000, 'to': '0xc305c901078781C232A2a521C2aF7980f8385ee9', 'data': '0x477a5c98'})
HexBytes('0x0000000000000000000000000000000000000000000000000000000000000001') 

大多数情况下最好通过 web3.contract.Contract 接口进行合约函数调用。

覆盖状态是 Geth 客户端中可用的调试功能。查看它们的使用文档以获得可能的参数列表。

Eth.fee_history(*block_count*, *newest_block*, *reward_percentiles=None*)
  • 委托给eth_feeHistory RPC 方法

返回多达 1,024 个块的交易费用数据。

| 参数: |

  • block _ count ( int or hex string )-the number of blocks in the requested range. Depending on the client, the value should be int or a hexadecimal string between 1 and 1024. If not all blocks are available, less than the requested quantity may be returned.
  • Latest _ block ( int or block params )-the latest block with the highest number in the request range. The value can be a int or a predefined block parameter 'latest', 'earliest' or 'pending'.
  • reward _ percentages ( list [ float or none ) Monotonic increasing list of percentile values, sampled from the effective priority cost of each gas in each block in ascending order, weighted by the gas used.

| | 退货: | 一个包含以下键的AttributeDict: |

  • 最老的块(int)–请求范围内最老的、编号最小的块,作为具有 int 值的BlockNumber类型。
  • (列表【魏】)-每种气体的区块基本费用的数组。这包括返回范围中最新块之后的下一个块,因为该值可以从最新块中导出。对于 EIP 1559 年以前的块,返回零。 *** gasused ratio(List[float])–所请求块的一组gasUsed / gasLimit浮点值。 (List[List[Wei]])(可选)在请求的区块百分位数处每种气体的有效优先权费用的二维数组。*
>>> w3.eth.fee_history(4, 'latest', [10, 90])
AttributeDict({
 'oldestBlock': 3,
 'reward': [[220, 7145389], [1000000, 6000213], [550, 550], [125, 12345678]],
 'baseFeePerGas': [202583058, 177634473, 155594425, 136217133, 119442408],
 'gasUsedRatio': [0.007390479689642084, 0.0036988514889990873, 0.0018512333048507866, 0.00741217041320997]
}) 
Eth.estimate_gas(*transaction*, *block_identifier=None*)
  • 委托给eth_estimateGas RPC 方法

在本地执行给定的事务,而不在区块链上创建新的事务。返回执行消耗的气体量,可用作气体估计值。

transactionblock_identifier参数的处理方式与 send_transaction() 方法相同。

>>> web3.eth.estimate_gas({'to': '0xd3CdA913deB6f67967B99D67aCDFa1712C293601', 'from':web3.eth.coinbase, 'value': 12345})
21000 
Eth.estimateGas(*transaction*, *block_identifier=None*)

警告

已弃用:此方法已弃用,取而代之的是 estimate_gas()

Eth.generate_gas_price(*transaction_params=None*)

使用选定的燃气价格策略来计算燃气价格。此方法返回以魏为单位的燃气价格。

transaction_params参数是可选的,但是一些燃气价格策略可能要求 it 能够生成燃气价格。

>>> web3.eth.generate_gas_price()
20000000000 

注意

有关如何在 web3 中定制燃气价格的信息,请参见 燃气价格 API

Eth.generateGasPrice(*transaction_params=None*)

警告

已弃用:此方法已弃用,取而代之的是 generate_gas_price()

Eth.set_gas_price_strategy(*gas_price_strategy*)

设置所选的气价策略。这肯定是一个署名(web3, transaction_params)的方法,返回一个以魏计价的气价。

Eth.setGasPriceStrategy(*gas_price_strategy*)

警告

已弃用:此方法已弃用,取而代之的是 set_gas_price_strategy()* *## 过滤

以下方法可用于与过滤 API 交互的web3.eth对象。

Eth.filter(*filter_params*)
  • eth_newFiltereth_newBlockFiltereth_newPendingTransactionFilter RPC 方法的委托。

这个方法根据filter_params的值委托给三个 RPC 方法之一。

  • 如果filter_params是字符串'pending',那么使用eth_newPendingTransactionFilter RPC 方法注册一个新的过滤器。这将创建一个新的过滤器,为节点接收的每个新的未挖掘事务调用该过滤器。
  • 如果filter_params是字符串'latest',那么使用eth_newBlockFilter RPC 方法注册一个新的过滤器。这将创建一个新的过滤器,该过滤器将在每次节点接收到新的块时被调用。
  • 如果filter_params是一个字典,那么使用eth_newFilter RPC 方法注册一个新的过滤器。这将创建一个新的过滤器,所有匹配所提供的filter_params的日志条目都将调用这个过滤器。

该方法返回一个web3.utils.filters.Filter对象,该对象可用于直接获取过滤器的结果或注册回调函数,这些函数将被过滤器的每个结果调用。

当创建一个新的日志过滤器时,filter_params应该是一个包含以下键的字典。

  • fromBlock : integer/tag -(可选,默认:“最新”)整数块号,或预定义块标识符“最新”、“待定”、“最早”、“安全”或“已完成”之一。
  • toBlock : integer/tag -(可选,默认:“最新”)整数块号,或预定义块标识符“最新”、“待定”、“最早”、“安全”或“已完成”之一。
  • address : stringstrings列表,每个 20 字节-(可选)合约地址或日志应源自的地址列表。
  • topics:32 字节的列表stringsnull -(可选)用于过滤的主题数组。主题是顺序相关的。该参数也可以是主题列表的列表,在这种情况下,过滤将匹配任何提供的主题数组。

注意

虽然"latest""safe"块标识符还不是eth_newFilter规范的一部分,但它们受到 web3.py 的支持,并且根据被访问的节点,可能会也可能不会产生预期的结果。

关于过滤的更多信息,请参见 过滤

>>> web3.eth.filter('latest')
<BlockFilter at 0x10b72dc28>
>>> web3.eth.filter('pending')
<TransactionFilter at 0x10b780340>
>>> web3.eth.filter({'fromBlock': 1000000, 'toBlock': 1000100, 'address': '0x6C8f2A135f6ed072DE4503Bd7C4999a1a17F824B'})
<LogFilter at 0x10b7803d8> 
Eth.get_filter_changes(*self*, *filter_id*)
  • 委托给eth_getFilterChanges RPC 方法。

对于给定的filter_id,返回自上次调用此方法以来出现的所有新条目

>>> filter = web3.eth.filter()
>>> web3.eth.get_filter_changes(filter.filter_id)
[
 {
 'address': '0xDc3A9Db694BCdd55EBaE4A89B22aC6D12b3F0c24',
 'blockHash': '0xb72256286ca528e09022ffd408856a73ef90e7216ac560187c6e43b4c4efd2f0',
 'blockNumber': 2217196,
 'data': '0x0000000000000000000000000000000000000000000000000000000000000001',
 'logIndex': 0,
 'topics': ['0xe65b00b698ba37c614af350761c735c5f4a82b4ab365a1f1022d49d9dfc8e930',
 '0x000000000000000000000000754c50465885f1ed1fa1a55b95ee8ecf3f1f4324',
 '0x296c7fb6ccafa3e689950b947c2895b07357c95b066d5cdccd58c301f41359a3'],
 'transactionHash': '0xfe1289fd3915794b99702202f65eea2e424b2f083a12749d29b4dd51f6dce40d',
 'transactionIndex': 1,
 },
 ...
] 
Eth.getFilterChanges(*self*, *filter_id*)

警告

已弃用:此属性已弃用,取而代之的是 get_filter_changes()

Eth.get_filter_logs(*self*, *filter_id*)
  • 委托给eth_getFilterLogs RPC 方法。

返回给定filter_id的所有条目

>>> filter = web3.eth.filter()
>>> web3.eth.get_filter_logs(filter.filter_id)
[
 {
 'address': '0xDc3A9Db694BCdd55EBaE4A89B22aC6D12b3F0c24',
 'blockHash': '0xb72256286ca528e09022ffd408856a73ef90e7216ac560187c6e43b4c4efd2f0',
 'blockNumber': 2217196,
 'data': '0x0000000000000000000000000000000000000000000000000000000000000001',
 'logIndex': 0,
 'topics': ['0xe65b00b698ba37c614af350761c735c5f4a82b4ab365a1f1022d49d9dfc8e930',
 '0x000000000000000000000000754c50465885f1ed1fa1a55b95ee8ecf3f1f4324',
 '0x296c7fb6ccafa3e689950b947c2895b07357c95b066d5cdccd58c301f41359a3'],
 'transactionHash': '0xfe1289fd3915794b99702202f65eea2e424b2f083a12749d29b4dd51f6dce40d',
 'transactionIndex': 1,
 },
 ...
] 
Eth.getFilterLogs(*self*, *filter_id*)

警告

已弃用:此方法已弃用,取而代之的是 get_filter_logs()

Eth.uninstall_filter(*self*, *filter_id*)
  • 委托给eth_uninstallFilter RPC 方法。

卸载由给定的filter_id指定的过滤器。返回有关筛选器是否成功卸载的布尔值。

>>> filter = web3.eth.filter()
>>> web3.eth.uninstall_filter(filter.filter_id)
True
>>> web3.eth.uninstall_filter(filter.filter_id)
False  # already uninstalled. 
Eth.uninstallFilter(*self*, *filter_id*)

警告

已弃用:此方法已弃用,取而代之的是 uninstall_filter()

Eth.get_logs(*filter_params*)

这相当于:创建一个新的过滤器,运行 get_filter_logs() ,然后卸载该过滤器。关于允许的滤波器参数的详细信息,请参见 filter()

Eth.getLogs(*filter_params*)

警告

已弃用:此属性已弃用,取而代之的是 get_logs()

Eth.submit_hashrate(*hashrate*, *nodeid*)
  • 委托给eth_submitHashrate RPC 方法
>>> node_id = '59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c'
>>> web3.eth.submit_hashrate(5000, node_id)
True 
Eth.submitHashrate(*hashrate*, *nodeid*)

警告

已弃用:此属性已弃用,取而代之的是 submit_hashrate()

Eth.submit_work(*nonce*, *pow_hash*, *mix_digest*)
  • 委托给eth_submitWork RPC 方法。
>>> web3.eth.submit_work(
 1,
 '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef',
 '0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000',
 )
True 
Eth.submitWork(*nonce*, *pow_hash*, *mix_digest*)

警告

已弃用:此属性已弃用,取而代之的是 submit_work()

合约

Eth.contract(*address=None*, *contract_name=None*, *ContractFactoryClass=Contract*, ***contract_factory_kwargs*)

如果提供了address,那么这个方法将返回由abi定义的合约的一个实例。该地址可能是一个校验和字符串,或者是一个类似'mycontract.eth'的 ENS 名称。

from web3 import Web3

w3 = Web3(...)

contract = w3.eth.contract(address='0x000000000000000000000000000000000000dEaD', abi=...)

# alternatively:
contract = w3.eth.contract(address='mycontract.eth', abi=...) 

注意

如果您使用 ENS 名称来初始化合约,则每次使用时将按名称查找合约。如果名称可能被恶意更改,首先 查找 ENS 名称 的地址,然后使用校验和地址创建合约。

如果address未提供,则返回新创建的合约类。然后,通过提供地址来初始化该类。

from web3 import Web3

w3 = Web3(...)

Contract = w3.eth.contract(abi=...)

# later, initialize contracts with the same metadata at different addresses:
contract1 = Contract(address='0x000000000000000000000000000000000000dEaD')
contract2 = Contract(address='mycontract.eth') 

contract_name将被用作合约类的名称。如果是None,那么将使用ContractFactoryClass的名称。

ContractFactoryClass将被用作基本合约类。

以下参数可用于创建合约类。

  • abi
  • asm
  • ast
  • bytecode
  • bytecode_runtime
  • clone_bin
  • dev_doc
  • interface
  • metadata
  • opcodes
  • src_map
  • src_map_runtime
  • user_doc

关于如何使用合约的更多信息,请参见 合约

Eth.set_contract_factory(*contractFactoryClass*)

将默认合约工厂从Contract修改为contractFactoryClass。未来对Eth.contract()的呼叫将默认为contractFactoryClass

替代合约工厂的一个例子是ConciseContract

Eth.setContractFactory(*contractFactoryClass*)

警告

已弃用:此方法已弃用,取而代之的是 set_contract_factory()****



回到顶部