Hướng dẫn python web3 send token - python web3 gửi mã thông báo
Bạn sẽ nhận được lỗi, đôi khi, nếu giao dịch của bạn sẽ thất bại. Điều đó có thể xảy ra nếu bạn đang gửi "từ" địa chỉ sai trong khi ước tính khí. Hãy thử chỉ định địa chỉ >>> web3.eth.get_block('latest') {...}1 trong >>> web3.eth.get_block('latest') {...}2 như vậy:
Một vấn đề với phương pháp thứ hai là >>> web3.eth.get_block('latest') {...}3 sẽ cố gắng sử dụng nút của bạn để ký giao dịch. Vì bạn có khóa riêng địa phương, bạn sẽ muốn sử dụng >>> web3.eth.get_block('latest') {...}4 để đăng nhập cục bộ. Xem hướng dẫn Web3.py này, thường là về các giao dịch hợp đồng ký địa phương, nhưng tình cờ sử dụng ví dụ ERC20. Đề cương
Thí dụ Dưới đây là một số điều phổ biến bạn có thể muốn làm với Web3. Các khối có thể được tra cứu bởi số của chúng hoặc băm bằng API # get a block by number >>> web3.eth.get_block(12345) { 'author': '0xad5C1768e5974C231b2148169da064e61910f31a', 'difficulty': 735512610763, 'extraData': '0x476574682f76312e302e302f6c696e75782f676f312e342e32', 'gasLimit': 5000, 'gasUsed': 0, 'hash': '0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d', 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'miner': '0xad5c1768e5974c231b2148169da064e61910f31a', 'mixHash': '0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', 'nonce': '0x549f882c5f356f85', 'number': 12345, 'parentHash': '0x4b3c1d7e65a507b62734feca1ee9f27a5379e318bd52ae62de7ba67dbeac66a3', 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'sealFields': ['0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', '0x549f882c5f356f85'], 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', 'size': 539, 'stateRoot': '0xca495e22ed6b88c61714d129dbc8c94f5bf966ac581c09a57c0a72d0e55e7286', 'timestamp': 1438367030, 'totalDifficulty': 3862140487204603, 'transactions': [], 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'uncles': [], } # get a block by it's hash >>> web3.eth.get_block('0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d') {...} Nhận khối mới nhấtBạn cũng có thể truy xuất khối mới nhất bằng chuỗi >>> web3.eth.get_block('latest') {...}6 trong API >>> web3.eth.get_block('latest') {...}5. >>> web3.eth.get_block('latest') {...} Nếu bạn muốn biết số khối mới nhất, bạn có thể sử dụng thuộc tính >>> web3.eth.get_block('latest') {...}8. >>> web3.eth.block_number 4194803 Kiểm tra số dư của một tài khoảnĐể tìm số lượng ether thuộc sở hữu của một tài khoản, hãy sử dụng phương thức >>> web3.eth.get_block('latest') {...}9. Tại thời điểm viết, tài khoản có nhiều ether nhất có địa chỉ công khai là 0x742D35CC6634C0532925A3B844BC454E4438F44E. >>> web3.eth.get_balance('0x742d35Cc6634C0532925a3b844Bc454e4438f44e') 3841357360894980500000001 Lưu ý rằng số này không được mệnh giá trong Ether, mà thay vào đó trong đơn vị giá trị nhỏ nhất trong Ethereum, Wei. Đọc tiếp để tìm hiểu cách chuyển đổi số đó thành ether. Chuyển đổi mệnh giá tiền tệWeb3 có thể giúp bạn chuyển đổi giữa các mệnh giá. Các mệnh giá sau đây được hỗ trợ.
Chọn từ ví dụ trước, tài khoản lớn nhất chứa 38413573608949805000001 WEI. Bạn có thể sử dụng phương thức >>> web3.eth.block_number 41948030 để chuyển đổi số dư đó thành Ether (hoặc mệnh giá khác). >>> web3.fromWei(3841357360894980500000001, 'ether') Decimal('3841357.360894980500000001') Để chuyển đổi trở lại WEI, bạn có thể sử dụng hàm nghịch đảo, >>> web3.eth.block_number 41948031. Lưu ý rằng độ chính xác dấu phẩy động mặc định của Python là không đủ cho trường hợp sử dụng này, vì vậy, nó cần thiết để chuyển giá trị lên một số thập phân nếu nó đã không phải là. >>> from decimal import Decimal >>> web3.toWei(Decimal('3841357.360894980500000001'), 'ether') 3841357360894980500000001 Thực tiễn tốt nhất: Nếu bạn cần làm việc với nhiều mệnh giá tiền tệ, mặc định là WEI. Một quy trình công việc điển hình có thể yêu cầu chuyển đổi từ một số mệnh giá sang WEI, sau đó từ WEI sang bất cứ điều gì bạn cần. >>> web3.toWei(Decimal('0.000000005'), 'ether') 5000000000 >>> web3.fromWei(5000000000, 'gwei') Decimal('5') Thực hiện giao dịchCó một vài tùy chọn để thực hiện các giao dịch:
Bạn muốn tự động hóa việc ký khi sử dụng >>> web3.eth.block_number 41948036 hoặc >>> web3.eth.block_number 41948037. Ghi chúhere. Vị trí của các khóa của bạn (ví dụ: cục bộ hoặc lưu trữ) sẽ có ý nghĩa đối với các phương pháp này. Đọc về sự khác biệt ở đây.Tìm kiếm giao dịch >>> web3.eth.get_transaction('0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060') { 'blockHash': '0x4e3a3754410177e6937ef1f84bba68ea139e8d1a2258c5f85db9f1cd715a1bdd', 'blockNumber': 46147, 'condition': None, 'creates': None, 'from': '0xA1E4380A3B1f749673E270229993eE55F35663b4', 'gas': 21000, 'gasPrice': None, 'hash': '0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060', 'input': '0x', 'maxFeePerGas': 2000000000, 'maxPriorityFeePerGas': 1000000000, 'networkId': None, 'nonce': 0, 'publicKey': '0x376fc429acc35e610f75b14bc96242b13623833569a5bb3d72c17be7e51da0bb58e48e2462a59897cead8ab88e78709f9d24fd6ec24d1456f43aae407a8970e4', 'r': '0x88ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0', 'raw': '0xf86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33a', 's': '0x45e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33a', 'standardV': '0x1', 'to': '0x5DF9B87991262F6BA471F09758CDE1c0FC1De734', 'transactionIndex': 0, 'v': '0x1c', 'value': 31337, } Bạn có thể tra cứu các giao dịch bằng hàm >>> web3.eth.block_number 41948038. Nếu không có giao dịch nào cho băm đã cho có thể được tìm thấy, thì chức năng này thay vào đó sẽ trả về >>> web3.eth.block_number 4194803 9.Tìm kiếm Biên lai Biên lai giao dịch có thể được truy xuất bằng API >>> web3.eth.get_balance('0x742d35Cc6634C0532925a3b844Bc454e4438f44e') 38413573608949805000000010. 0Nếu giao dịch chưa được khai thác thì phương thức này sẽ gây ra lỗi >>> web3.eth.get_balance('0x742d35Cc6634C0532925a3b844Bc454e4438f44e') 3841357360894980500000001 1.Làm việc với Hợp đồngTương tác với các hợp đồng hiện tại 1Để sử dụng một hợp đồng hiện có, bạn sẽ cần địa chỉ được triển khai và ABI của nó. Cả hai có thể được tìm thấy bằng cách sử dụng các trình thám hiểm khối, như Etherscan. Khi bạn khởi tạo một thể hiện hợp đồng, bạn có thể đọc dữ liệu và thực hiện các giao dịch.Triển khai các hợp đồng mới 2Với tệp nguồn Solity sau được lưu trữ tại >>> web3.eth.get_balance('0x742d35Cc6634C0532925a3b844Bc454e4438f44e') 38413573608949805000000012.
3Output: 4Đang chờ một biên lai giao dịch được khai thác.Làm việc với hợp đồng thông qua ETHPM¶ Các gói ETHPM chứa các hợp đồng được cấu hình sẵn sàng để sử dụng. Mô -đun Web3 ____ ____53 ( >>> web3.eth.get_balance('0x742d35Cc6634C0532925a3b844Bc454e4438f44e') 38413573608949805000000014) mở rộng mô -đun ____55 gốc Web3, với một vài sửa đổi cho cách bạn khởi tạo các nhà máy và trường hợp >>> web3.eth.get_balance('0x742d35Cc6634C0532925a3b844Bc454e4438f44e') 38413573608949805000000015. Tất cả những gì bạn cần là tên gói, phiên bản và địa chỉ đăng ký ETHPM cho gói bạn muốn sử dụng. Đăng ký ETHPM là một kho dữ liệu trên chuỗi cho dữ liệu phát hành được liên kết với gói ETHPM. Bạn có thể tìm thấy một số đăng ký mẫu để khám phá trong sổ đăng ký ETHPM. Hãy nhớ rằng, bạn chỉ nên sử dụng các gói từ các cơ quan đăng ký mà người bảo trì mà bạn tin tưởng không phải để tiêm mã độc! Trong ví dụ này, chúng tôi sẽ sử dụng gói >>> web3.eth.get_balance('0x742d35Cc6634C0532925a3b844Bc454e4438f44e') 38413573608949805000000017 có nguồn gốc từ Cơ quan đăng ký >>> web3.eth.get_balance('0x742d35Cc6634C0532925a3b844Bc454e4438f44e') 38413573608949805000000018. 5>>> web3.eth.get_balance('0x742d35Cc6634C0532925a3b844Bc454e4438f44e') 38413573608949805000000014 sử dụng lớp >>> web3.fromWei(3841357360894980500000001, 'ether') Decimal('3841357.360894980500000001')0 để thể hiện gói ETHPM. Đối tượng này chứa tất cả các tài sản hợp đồng trong một gói và phơi bày chúng thông qua API. Vì vậy, trước khi chúng tôi có thể tương tác với gói của mình, chúng tôi cần tạo nó như một ví dụ >>> web3.fromWei(3841357360894980500000001, 'ether') Decimal('3841357.360894980500000001')0. 6Làm việc với hợp đồng mã thông báo ERC20Hầu hết các mã thông báo nấm trên blockchain Ethereum phù hợp với tiêu chuẩn ERC20. Phần này của hướng dẫn bao gồm tương tác với một hợp đồng mã thông báo hiện có phù hợp với tiêu chuẩn này. Trong hướng dẫn này, chúng tôi sẽ tương tác với một hợp đồng mã thông báo hiện tại mà chúng tôi đã triển khai đến chuỗi thử nghiệm cục bộ. Hướng dẫn này giả định:
Tạo nhà máy hợp đồngĐầu tiên chúng ta cần tạo một thể hiện hợp đồng với địa chỉ của hợp đồng mã thông báo của chúng tôi và >>> web3.fromWei(3841357360894980500000001, 'ether') Decimal('3841357.360894980500000001')6 ABI. 7Số dư tài khoản truy vấnTiếp theo, chúng tôi có thể truy vấn một số số dư tài khoản bằng cách sử dụng hàm hợp đồng ____ ____67. Hợp đồng mã thông báo mà chúng tôi đang sử dụng bắt đầu với một tài khoản duy nhất mà chúng tôi sẽ gọi là >>> web3.fromWei(3841357360894980500000001, 'ether') Decimal('3841357.360894980500000001')8 giữ tất cả các mã thông báo. 8Gửi mã thông báoTiếp theo, chúng ta có thể chuyển một số mã thông báo từ >>> web3.fromWei(3841357360894980500000001, 'ether') Decimal('3841357.360894980500000001')8 sang >>> from decimal import Decimal >>> web3.toWei(Decimal('3841357.360894980500000001'), 'ether') 38413573608949805000000010 bằng cách sử dụng hàm hợp đồng ____ ____71. 9Tạo sự chấp thuận cho chuyển nhượng bên ngoàiAlice cũng có thể phê duyệt người khác chi tiêu mã thông báo từ tài khoản của mình bằng cách sử dụng hàm >>> from decimal import Decimal >>> web3.toWei(Decimal('3841357.360894980500000001'), 'ether') 38413573608949805000000012. Chúng tôi cũng có thể truy vấn có bao nhiêu mã thông báo mà chúng tôi đã phê duyệt để sử dụng hàm >>> from decimal import Decimal >>> web3.toWei(Decimal('3841357.360894980500000001'), 'ether') 38413573608949805000000013. # get a block by number >>> web3.eth.get_block(12345) { 'author': '0xad5C1768e5974C231b2148169da064e61910f31a', 'difficulty': 735512610763, 'extraData': '0x476574682f76312e302e302f6c696e75782f676f312e342e32', 'gasLimit': 5000, 'gasUsed': 0, 'hash': '0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d', 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'miner': '0xad5c1768e5974c231b2148169da064e61910f31a', 'mixHash': '0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', 'nonce': '0x549f882c5f356f85', 'number': 12345, 'parentHash': '0x4b3c1d7e65a507b62734feca1ee9f27a5379e318bd52ae62de7ba67dbeac66a3', 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'sealFields': ['0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', '0x549f882c5f356f85'], 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', 'size': 539, 'stateRoot': '0xca495e22ed6b88c61714d129dbc8c94f5bf966ac581c09a57c0a72d0e55e7286', 'timestamp': 1438367030, 'totalDifficulty': 3862140487204603, 'transactions': [], 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'uncles': [], } # get a block by it's hash >>> web3.eth.get_block('0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d') {...}0 Thực hiện chuyển nhượng bên ngoàiKhi ai đó có trợ cấp, họ có thể chuyển các mã thông báo đó bằng hàm >>> from decimal import Decimal >>> web3.toWei(Decimal('3841357.360894980500000001'), 'ether') 38413573608949805000000014. # get a block by number >>> web3.eth.get_block(12345) { 'author': '0xad5C1768e5974C231b2148169da064e61910f31a', 'difficulty': 735512610763, 'extraData': '0x476574682f76312e302e302f6c696e75782f676f312e342e32', 'gasLimit': 5000, 'gasUsed': 0, 'hash': '0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d', 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'miner': '0xad5c1768e5974c231b2148169da064e61910f31a', 'mixHash': '0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', 'nonce': '0x549f882c5f356f85', 'number': 12345, 'parentHash': '0x4b3c1d7e65a507b62734feca1ee9f27a5379e318bd52ae62de7ba67dbeac66a3', 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'sealFields': ['0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', '0x549f882c5f356f85'], 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', 'size': 539, 'stateRoot': '0xca495e22ed6b88c61714d129dbc8c94f5bf966ac581c09a57c0a72d0e55e7286', 'timestamp': 1438367030, 'totalDifficulty': 3862140487204603, 'transactions': [], 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'uncles': [], } # get a block by it's hash >>> web3.eth.get_block('0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d') {...}1 Kiểm tra đơn vị hợp đồng trong Python¶Dưới đây là một ví dụ về cách người ta có thể sử dụng khung pytest trong Python, Web3.py, ETH-Tester và PYEVM để thực hiện các bài kiểm tra đơn vị hoàn toàn bằng Python mà không cần thêm bất kỳ nhu cầu nào về nút/máy khách Ethereum nổi bật. Để cài đặt các phụ thuộc cần thiết, bạn có thể sử dụng bổ sung được ghim cho ETH_Tester trong Web3 và Pytest: # get a block by number >>> web3.eth.get_block(12345) { 'author': '0xad5C1768e5974C231b2148169da064e61910f31a', 'difficulty': 735512610763, 'extraData': '0x476574682f76312e302e302f6c696e75782f676f312e342e32', 'gasLimit': 5000, 'gasUsed': 0, 'hash': '0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d', 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'miner': '0xad5c1768e5974c231b2148169da064e61910f31a', 'mixHash': '0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', 'nonce': '0x549f882c5f356f85', 'number': 12345, 'parentHash': '0x4b3c1d7e65a507b62734feca1ee9f27a5379e318bd52ae62de7ba67dbeac66a3', 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'sealFields': ['0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', '0x549f882c5f356f85'], 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', 'size': 539, 'stateRoot': '0xca495e22ed6b88c61714d129dbc8c94f5bf966ac581c09a57c0a72d0e55e7286', 'timestamp': 1438367030, 'totalDifficulty': 3862140487204603, 'transactions': [], 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'uncles': [], } # get a block by it's hash >>> web3.eth.get_block('0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d') {...}2 Khi bạn có một môi trường được thiết lập để kiểm tra, sau đó bạn có thể viết các bài kiểm tra của mình như vậy: # get a block by number >>> web3.eth.get_block(12345) { 'author': '0xad5C1768e5974C231b2148169da064e61910f31a', 'difficulty': 735512610763, 'extraData': '0x476574682f76312e302e302f6c696e75782f676f312e342e32', 'gasLimit': 5000, 'gasUsed': 0, 'hash': '0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d', 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'miner': '0xad5c1768e5974c231b2148169da064e61910f31a', 'mixHash': '0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', 'nonce': '0x549f882c5f356f85', 'number': 12345, 'parentHash': '0x4b3c1d7e65a507b62734feca1ee9f27a5379e318bd52ae62de7ba67dbeac66a3', 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'sealFields': ['0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', '0x549f882c5f356f85'], 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', 'size': 539, 'stateRoot': '0xca495e22ed6b88c61714d129dbc8c94f5bf966ac581c09a57c0a72d0e55e7286', 'timestamp': 1438367030, 'totalDifficulty': 3862140487204603, 'transactions': [], 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'uncles': [], } # get a block by it's hash >>> web3.eth.get_block('0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d') {...}3 Sử dụng Node Rinkeby Node¶Nhập thư viện yêu cầu của bạn # get a block by number >>> web3.eth.get_block(12345) { 'author': '0xad5C1768e5974C231b2148169da064e61910f31a', 'difficulty': 735512610763, 'extraData': '0x476574682f76312e302e302f6c696e75782f676f312e342e32', 'gasLimit': 5000, 'gasUsed': 0, 'hash': '0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d', 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'miner': '0xad5c1768e5974c231b2148169da064e61910f31a', 'mixHash': '0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', 'nonce': '0x549f882c5f356f85', 'number': 12345, 'parentHash': '0x4b3c1d7e65a507b62734feca1ee9f27a5379e318bd52ae62de7ba67dbeac66a3', 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'sealFields': ['0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', '0x549f882c5f356f85'], 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', 'size': 539, 'stateRoot': '0xca495e22ed6b88c61714d129dbc8c94f5bf966ac581c09a57c0a72d0e55e7286', 'timestamp': 1438367030, 'totalDifficulty': 3862140487204603, 'transactions': [], 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'uncles': [], } # get a block by it's hash >>> web3.eth.get_block('0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d') {...}4 Khởi tạo một thể hiện web3 với một nút infura # get a block by number >>> web3.eth.get_block(12345) { 'author': '0xad5C1768e5974C231b2148169da064e61910f31a', 'difficulty': 735512610763, 'extraData': '0x476574682f76312e302e302f6c696e75782f676f312e342e32', 'gasLimit': 5000, 'gasUsed': 0, 'hash': '0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d', 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'miner': '0xad5c1768e5974c231b2148169da064e61910f31a', 'mixHash': '0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', 'nonce': '0x549f882c5f356f85', 'number': 12345, 'parentHash': '0x4b3c1d7e65a507b62734feca1ee9f27a5379e318bd52ae62de7ba67dbeac66a3', 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'sealFields': ['0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', '0x549f882c5f356f85'], 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', 'size': 539, 'stateRoot': '0xca495e22ed6b88c61714d129dbc8c94f5bf966ac581c09a57c0a72d0e55e7286', 'timestamp': 1438367030, 'totalDifficulty': 3862140487204603, 'transactions': [], 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'uncles': [], } # get a block by it's hash >>> web3.eth.get_block('0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d') {...}5 Tiêm phần mềm trung gian vào hành tây trung gian # get a block by number >>> web3.eth.get_block(12345) { 'author': '0xad5C1768e5974C231b2148169da064e61910f31a', 'difficulty': 735512610763, 'extraData': '0x476574682f76312e302e302f6c696e75782f676f312e342e32', 'gasLimit': 5000, 'gasUsed': 0, 'hash': '0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d', 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'miner': '0xad5c1768e5974c231b2148169da064e61910f31a', 'mixHash': '0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', 'nonce': '0x549f882c5f356f85', 'number': 12345, 'parentHash': '0x4b3c1d7e65a507b62734feca1ee9f27a5379e318bd52ae62de7ba67dbeac66a3', 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'sealFields': ['0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', '0x549f882c5f356f85'], 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', 'size': 539, 'stateRoot': '0xca495e22ed6b88c61714d129dbc8c94f5bf966ac581c09a57c0a72d0e55e7286', 'timestamp': 1438367030, 'totalDifficulty': 3862140487204603, 'transactions': [], 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'uncles': [], } # get a block by it's hash >>> web3.eth.get_block('0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d') {...}6 Chỉ cần nhớ rằng bạn phải ký tất cả các giao dịch tại địa phương, vì Infura không xử lý bất kỳ khóa nào từ ví của bạn (tham khảo điều này) # get a block by number >>> web3.eth.get_block(12345) { 'author': '0xad5C1768e5974C231b2148169da064e61910f31a', 'difficulty': 735512610763, 'extraData': '0x476574682f76312e302e302f6c696e75782f676f312e342e32', 'gasLimit': 5000, 'gasUsed': 0, 'hash': '0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d', 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'miner': '0xad5c1768e5974c231b2148169da064e61910f31a', 'mixHash': '0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', 'nonce': '0x549f882c5f356f85', 'number': 12345, 'parentHash': '0x4b3c1d7e65a507b62734feca1ee9f27a5379e318bd52ae62de7ba67dbeac66a3', 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'sealFields': ['0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', '0x549f882c5f356f85'], 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', 'size': 539, 'stateRoot': '0xca495e22ed6b88c61714d129dbc8c94f5bf966ac581c09a57c0a72d0e55e7286', 'timestamp': 1438367030, 'totalDifficulty': 3862140487204603, 'transactions': [], 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'uncles': [], } # get a block by it's hash >>> web3.eth.get_block('0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d') {...}7 P.S: Hai bản cập nhật được thực hiện cho từ điển giao dịch, vì một giao dịch thô có thể không chứa số lượng gas & nonce, vì vậy bạn phải thêm chúng theo cách thủ công. Và cuối cùng, gửi giao dịch # get a block by number >>> web3.eth.get_block(12345) { 'author': '0xad5C1768e5974C231b2148169da064e61910f31a', 'difficulty': 735512610763, 'extraData': '0x476574682f76312e302e302f6c696e75782f676f312e342e32', 'gasLimit': 5000, 'gasUsed': 0, 'hash': '0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d', 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'miner': '0xad5c1768e5974c231b2148169da064e61910f31a', 'mixHash': '0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', 'nonce': '0x549f882c5f356f85', 'number': 12345, 'parentHash': '0x4b3c1d7e65a507b62734feca1ee9f27a5379e318bd52ae62de7ba67dbeac66a3', 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'sealFields': ['0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', '0x549f882c5f356f85'], 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', 'size': 539, 'stateRoot': '0xca495e22ed6b88c61714d129dbc8c94f5bf966ac581c09a57c0a72d0e55e7286', 'timestamp': 1438367030, 'totalDifficulty': 3862140487204603, 'transactions': [], 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'uncles': [], } # get a block by it's hash >>> web3.eth.get_block('0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d') {...}8 Mẹo: Sau đó, bạn có thể sử dụng giá trị được lưu trữ trong >>> from decimal import Decimal >>> web3.toWei(Decimal('3841357.360894980500000001'), 'ether') 38413573608949805000000015, trong một nhà thám hiểm như Etherscan để xem chi tiết giao dịch Điều chỉnh các cấp độ nhật kýWeb3.Py Nội bộ sử dụng hệ thống con ghi nhật ký Python. Nếu bạn muốn chạy ứng dụng đăng nhập ở chế độ gỡ lỗi, bên dưới là một ví dụ về cách làm cho một số lưu lượng truy cập JSON-RPC yên tĩnh hơn. # get a block by number >>> web3.eth.get_block(12345) { 'author': '0xad5C1768e5974C231b2148169da064e61910f31a', 'difficulty': 735512610763, 'extraData': '0x476574682f76312e302e302f6c696e75782f676f312e342e32', 'gasLimit': 5000, 'gasUsed': 0, 'hash': '0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d', 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'miner': '0xad5c1768e5974c231b2148169da064e61910f31a', 'mixHash': '0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', 'nonce': '0x549f882c5f356f85', 'number': 12345, 'parentHash': '0x4b3c1d7e65a507b62734feca1ee9f27a5379e318bd52ae62de7ba67dbeac66a3', 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'sealFields': ['0x31d9ec7e3855aeba37fd92aa1639845e70b360a60f77f12eff530429ef8cfcba', '0x549f882c5f356f85'], 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', 'size': 539, 'stateRoot': '0xca495e22ed6b88c61714d129dbc8c94f5bf966ac581c09a57c0a72d0e55e7286', 'timestamp': 1438367030, 'totalDifficulty': 3862140487204603, 'transactions': [], 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'uncles': [], } # get a block by it's hash >>> web3.eth.get_block('0x767c2bfb3bdee3f78676c1285cd757bcd5d8c272cef2eb30d9733800a78c0b6d') {...}9 Ví dụ nâng cao: Tìm nạp tất cả các sự kiện chuyển mã thông báoTrong ví dụ này, chúng tôi chỉ ra cách tìm nạp tất cả các sự kiện của một loại sự kiện nhất định từ blockchain Ethereum. Có ba thử thách khi làm việc với một bộ lớn các sự kiện:
ETH_GETLOGS Hạn chế BurCác máy chủ API Ethereum JSON-RPC, như Geth, không cung cấp dễ dàng để phân trang qua các sự kiện, chỉ qua các khối. Không có yêu cầu nào có thể tìm thấy khối đầu tiên với một sự kiện hoặc có bao nhiêu sự kiện xảy ra trong một loạt các khối. Phản hồi duy nhất dịch vụ JSON-RPC sẽ cung cấp cho bạn là liệu cuộc gọi ETH_GETLOGS có bị lỗi hay không. Trong kịch bản ví dụ này, chúng tôi cung cấp hai loại heurests để giải quyết vấn đề này. Tập lệnh quét các sự kiện trong một khối khối (số khối khởi động - số khối kết thúc). Sau đó, nó sử dụng hai phương pháp để tìm có bao nhiêu sự kiện có khả năng có trong cửa sổ khối:
Mã ví dụMã ví dụ sau được chia thành lớp >>> from decimal import Decimal >>> web3.toWei(Decimal('3841357.360894980500000001'), 'ether') 38413573608949805000000016 có thể tái sử dụng và sau đó là tập lệnh demo:
Kịch bản có thể được chạy với: >>> web3.toWei(Decimal('0.000000005'), 'ether') 5000000000 >>> web3.fromWei(5000000000, 'gwei') Decimal('5')1. >>> web3.eth.get_block('latest') {...}0 |