web3.eth API
警告
哇哦,币安智能链用户!Web3.py 是一个以太坊专用的库,在伦敦网络升级时默认为“type 2”交易。BSC 显然不支持这些较新的交易类型。
从开出的问题来看,BSC 交易似乎必须包括gasPrice
,但不包括type
、maxFeePerGas
或maxPriorityFeePerGas
。如果您还有其他问题,请找到一个合适的 BSC 论坛来提出您的问题。
*class* web3.eth.Eth
web3.eth
对象公开了以下属性和方法,以便与eth_
名称空间下的 RPC APIs 进行交互。
通常,当一个属性或方法返回一个键到值的映射时,它将返回一个类似于dict
的AttributeDict
,但是您可以将键作为属性访问,并且不能修改它的字段。例如,您可以通过以下两种方式找到最新的块号:
```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 方法
返回最近块的编号
>>> 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 方法
返回给定的account
在block_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_getBlockByNumber
或eth_getBlockByHash
RPC 方法
返回由block_identifier
指定的块。如果block_identifier
是一个整数或一个预定义的块参数'latest', 'earliest', 'pending', 'safe', 'finalized'
,则委托给eth_getBlockByNumber
,否则委托给eth_getBlockByHash
。如果没有找到块,抛出BlockNotFound
错误。
如果full_transactions
是True
,那么'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_getBlockTransactionCountByNumber
或eth_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_getUncleByBlockHashAndIndex
或eth_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_getUncleCountByBlockHash
或eth_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_getTransactionByBlockNumberAndIndex
或eth_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_getRawTransactionByBlockNumberAndIndex
或eth_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
-(可选)您愿意支付的最高金额,包括baseFeePerGas
和maxPriorityFeePerGas
。maxFeePerGas
和baseFeePerGas + maxPriorityFeePerGas
之间的差额退还给用户。maxPriorityFeePerGas
:integer or hex
-(可选)矿工获得的那部分费用gasPrice
:integer
-每笔已付气遗留气所用气价的整数-除非你有很好的理由使用gasPrice
,否则用maxFeePerGas
和maxPriorityFeePerGas
代替。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
指定了maxFeePerGas
和maxPriorityFeePerGas
值,它们必须分别大于每个字段的未决事务的值。
- 遗留事务支持(效率较低-不推荐)
如果未决事务指定了一个gasPrice
值(遗留事务),new_transaction
的gasPrice
值必须大于未决事务的gasPrice
。
如果new_transaction
没有指定gasPrice
、maxFeePerGas
或maxPriorityFeePerGas
值中的任何一个,将会发生以下情况之一:
- 如果未决事务有一个
gasPrice
值,该值将与乘数 1.125 一起使用——这通常是节点在接受替换事务之前需要的最小gasPrice
增量。 - 如果设置了燃气价格策略,将使用燃气价格策略中的
gasPrice
值(参见 燃气价格 API )。 - 如果以上都不是,客户端将最终决定
maxFeePerGas
和maxPriorityFeePerGas
的适当值。这些很可能是默认值,并可能导致未决交易的不成功替换。
该方法将替换事务的事务哈希作为 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_params
是 send_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 方法
调用者必须指定data
、hexstr
或text
中的一个。
用给定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 方法
在本地执行给定的事务,而不在区块链上创建新的事务。返回执行消耗的气体量,可用作气体估计值。
transaction
和block_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_newFilter
、eth_newBlockFilter
和eth_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
:string
或strings
列表,每个 20 字节-(可选)合约地址或日志应源自的地址列表。topics
:32 字节的列表strings
或null
-(可选)用于过滤的主题数组。主题是顺序相关的。该参数也可以是主题列表的列表,在这种情况下,过滤将匹配任何提供的主题数组。
注意
虽然"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()
****