Web3py로 거래 보내기

12311 단어 pythonweb3
Web3는 Ethereum 네트워크와 상호 작용하기 위한 라이브러리입니다. 라이브러리는 Python과 JavaScript 모두에 존재합니다. 블록체인과의 상호 작용에는 트랜잭션 전송 또는 스마트 계약과의 상호 작용이 포함됩니다. 이 기사에서는 Python에서 Web3를 사용하여 Ethereum에서 트랜잭션을 만드는 방법을 배웁니다.

전제 조건



이 문서를 완전히 이해하려면 다음이 필요합니다.
  • web3py 라이브러리에 대한 모든 지식.
  • Python 코드에 대한 이해.

  • 블록체인이란 무엇입니까?



    블록체인은 서로 연결된 블록으로 구성된 데이터 구조입니다. 그만큼
    각 블록의 배열은 추가된 시기에 따라 다릅니다. 블록은
    immutable은 다른 블록의 끝에 추가됩니다.

    암호화폐에서 블록체인은 두 계정 간의 트랜잭션을 기록하는 데 사용됩니다. *노드*라고 하는 서로 다른 컴퓨터가 함께 작동하여 블록을 체인으로 마이닝합니다. 한 번 블록
    노드는 채굴된 블록을 블록체인 네트워크에 추가합니다. 마이닝은 새 블록을 안전하게 부착하기 위해 해시 계산을 포함하는 컴퓨팅 집약적인 작업입니다.

    로컬 네트워크 설정



    ethereum 네트워크로 개발하려면 Geth 과 같은 로컬 서버를 설정해야 합니다. 로컬 서버를 사용하면 컴퓨터에서 블록체인 네트워크를 시뮬레이션할 수 있습니다. Geth를 사용하면 공용 Ethereum 네트워크를 분기할 수 있습니다.



    geth --syncmode light -[network] --http
    



    그런 다음 [네트워크]를 네트워크 이름으로 바꿉니다. Ethereum 네트워크에는 다양한 유형이 있습니다. 이러한 유형은 메인넷, rinkeby, ropsten, goerli 등이 될 수 있습니다. [Geth 문서의 명령줄 섹션](https://geth.ethereum.org/docs/interface/command-line-options)에서 다른 명령에 대해 자세히 알아볼 수 있습니다.

    Geth 서버에서 트랜잭션을 수행하기 전에 Ethereum 계정이 사용 중인 네트워크에 자금이 있는지 확인하십시오. 로컬 서버에서 수행하는 모든 거래는 공용 네트워크에 영향을 미치지 않습니다.

    잠금 해제된 계정으로 거래 보내기



    잠금 해제된 계정에는 액세스하는 데 특별한 키가 필요하지 않습니다. 거래를 보내고 계정으로 다른 작업을 수행하려면 계정에 대한 액세스 권한이 필요합니다. 다음은 `sender`에서 `receiver`로 5개의 에테르를 보내는 Python 스크립트의 간단한 예입니다.



    from web3 import Web3
    
    # create an instance of `Web3` connected to the geth server
    w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))      # `geth` creates the server at `http://127.0.0.8545`
    
    
    sender = '0x12345......'          # sender's address
    receiver = '0xabcdef......'        # receiver's address
    
    # create and sign a transaction
    tx_hash = w3.eth.send_transaction({        # `w3.eth.send_transaction` returns a transaction hash
        'to': receiver,
        'from': sender,
        'value': w3.toWei(5, 'ether'),    # convert the amount of ethers to Wei
    })
    
    # Wait for Geth to mine the transaction
    receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
    
    # Confirm that the Ethers were sent
    print("sender's account: ", w3.eth.get_balance(sender))
    print("receiver's account: ", w3.eth.get_balance(receiver))
    


    Note: One Wei equals 10^-18 Eth. You can reduce the amount of Ethers to send depending on your available amount. The account will not be deducted in the public network.



    이제 코드를 실행하면 발신자의 계정은 5ethers 감소하고 수신자의 계정은 5ethers 증가해야 합니다. 오류 메시지가 표시되면 최대 5개의 이더가 없거나 계정이 잠긴 것입니다.

    잠긴 계정으로 보내기



    잠긴 계정에 액세스하려면 인증 방법이 필요합니다. 잠긴 계정에 액세스하려면 개인 키 또는 니모닉이 필요합니다. 다음은 잠긴 `sender` 계정에서 `receiver`로 5개의 에테르를 보내는 Python 스크립트의 예입니다.



    from web3 import Web3
    
    # create an instance of `Web3` connected to the geth server
    w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))
    
    # collect the sender and receiver address
    sender_address = '0xabcd..............................'
    receiver = '0x1234.....................'
    
    # gain access to the sender's account  
    sender = w3.eth.account.from_key('05d6c...............e')      # pass the sender's private key
    
    # sign a transaction with the sender's account
    signed_txn = sender.sign_transaction({
        'nonce': w3.eth.get_transaction_count(sender_address),
        'gas': 100000,
        'gasPrice': 100000,
        'to': receiver,                  # you don't need to specify the sender
        'value': w3.toWei(5, 'ether')
    })
    
    # extract raw transaction object from `signed_txn`
    raw_transaction = signed_txn.rawTransaction
    
    # send the transaction with the raw transaction
    tx_hash = w3.eth.send_raw_transaction(raw_transaction)
    
    # Wait for Geth to mine the transaction
    receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
    
    # Confirm that the Ethers were sent
    print("sender's account: ", w3.eth.get_balance(sender_address))
    print("receiver's account: ", w3.eth.get_balance(receiver))
    


    트랜잭션 개체에서 다음이 혼동될 수 있습니다.

  • Nonce: w3.eth.get_transaction_count() 함수에서 가져옵니다.

  • Gas: 트랜잭션이 사용할 수 있는 최대 가스 수수료를 나타냅니다.

  • GasPrice: 각 유료 가스에 사용되는 정수입니다.

  • Note: The gasPrice value is required if you are making legacy
    transactions. Use maxFeePerGas andmaxPriorityFeePerGas unless it is necessary to use gasPrice. Using those two instead of gasPrice is more efficient method.

    signed_txn = sender.sign_transaction({
        'nonce': w3.eth.get_transaction_count(sender_address),
        'gas': 100000,
        'maxFeePerGas': 3000000000,        # replacement for `gasPrice`
        'maxPriorityFeePerGas': 2000000000,       # replacement for `gasPrice`
        'to': receiver,
        'value': w3.toWei(5, 'ether')
    })
    


    그런 다음 코드를 실행하면 보낸 사람의 계정이 축소된 것을 볼 수 있습니다.
    5 에테르로 수신자는 5 에테르로 증가했습니다.

    결론



    이 기사는 한 계정에서 다른 계정으로 Ethers를 보내는 과정을 다룹니다. 이 기사가 네트워크를 통해 거래가 이루어지는 방식을 이해하는 데 도움이 되었기를 바랍니다. 주제에 대한 지식을 넓히려면 다음 링크를 확인하십시오.
  • Web3.py - Read the Docs
  • A guide to Ethereum blockchain development with Python
  • Intro to Web3.py · Ethereum For Python Developers
  • 좋은 웹페이지 즐겨찾기