블록체인 (Block Chain)/이더리움

[브라우니 (Brownie)] 12. 블록체인과 상호작용하기

2023. 6. 16. 16:47
728x90
반응형
SMALL

 

블록 정보에 액세스하기

chain으로 사용 가능한 Chain 객체는 리스트와 같은 구문을 사용하여 블록 정보에 액세스할 수 있습니다:

>>> chain
<Chain object (chainid=1, height=12965000)>

>>> chain[12965000]
AttributeDict({
    'baseFeePerGas': 1000000000,
    'difficulty': 7742494561645080,
    'extraData': HexBytes('0x68747470733a2f2f7777772e6b7279707465782e6f7267'),
    'gasLimit': 30029122,
    'gasUsed': 30025257,
    'hash': HexBytes('0x9b83c12c69edb74f6c8dd5d052765c1adf940e320bd1291696e6fa07829eee71'),
    'logsBloom': HexBytes('0x24e74ad77d9a2b27bdb8f6d6f7f1cffdd8cfb47fdebd433f011f7dfcfbb7db638fadd5ff66ed134ede2879ce61149797fbcdf7b74f6b7de153ec61bdaffeeb7b59c3ed771a2fe9eaed8ac70e335e63ff2bfe239eaff8f94ca642fdf7ee5537965be99a440f53d2ce057dbf9932be9a7b9a82ffdffe4eeee1a66c4cfb99fe4540fbff936f97dde9f6bfd9f8cefda2fc174d23dfdb7d6f7dfef5f754fe6a7eec92efdbff779b5feff3beafebd7fd6e973afebe4f5d86f3aafb1f73bf1e1d0cdd796d89827edeffe8fb6ae6d7bf639ec5f5ff4c32f31f6b525b676c7cdf5e5c75bfd5b7bd1928b6f43aac7fa0f6336576e5f7b7dfb9e8ebbe6f6efe2f9dfe8b3f56'),
    'miner': '0x7777788200B672A42421017F65EDE4Fc759564C8',
    'mixHash': HexBytes('0x9620b46a81a4795cf4449d48e3270419f58b09293a5421205f88179b563f815a'),
    'nonce': HexBytes('0xb223da049adf2216'),
    'number': 12965000,
    'parentHash': HexBytes('0x3de6bb3849a138e6ab0b83a3a00dc7433f1e83f7fd488e4bba78f2fe2631a633'),
    'receiptsRoot': HexBytes('0x8a8865cd785e2e9dfce7da83aca010b10b9af2abbd367114b236f149534c821d'),
    'sha3Uncles': HexBytes('0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'),
    'size': 137049,
    'stateRoot': HexBytes('0x41cf6e8e60fd087d2b00360dc29e5bfb21959bce1f4c242fd1ad7c4da968eb87'),
    'timestamp': 1628166822,
    'totalDifficulty': 28494409340649014490153,
    'transactions': [
        ...
    ],
    'transactionsRoot': HexBytes('0xdfcb68d3a3c41096f4a77569db7956e0a0e750fad185948e54789ea0e51779cb'),
    'uncles': []
})

>>> web3.eth.block_number
12965000

>>> len(chain)
12965001  # always +1 to the current block number, because the first block is zero

>>> chain[0] == web3.eth.get_block(0)
True

# for negative index values, the block returned is relative to the most recently mined block
>>> chain[-1] == web3.eth.get_block('latest')
True

거래 데이터에 접근하기

로컬 거래 기록

TxHistory 컨테이너는 history로 사용 가능하며, Brownie 세션 중에 브로드캐스트된 모든 거래를 보유합니다. 호출할 때 변수에 할당하지 않았다면, 이를 사용하여 TransactionReceipt 객체에 접근할 수 있습니다.

>>> history
[
    <Transaction object '0xe803698b0ade1598c594b2c73ad6a656560a4a4292cc7211b53ffda4a1dbfbe8'>,
    <Transaction object '0xa7616a96ef571f1791586f570017b37f4db9decb1a5f7888299a035653e8b44b'>
]

특정 트랜잭션을 키-값 쌍이나 람다 함수로 필터링하려면 history.filter를 사용할 수 있습니다:

>>> history.filter(sender=accounts[0], value="1 ether")
[<Transaction object '0xe803698b0ade1598c594b2c73ad6a656560a4a4292cc7211b53ffda4a1dbfbe8'>]

>>> history.filter(key=lambda k: k.nonce < 2)
[<Transaction '0x03569ee152b04ba5b55c2bf05f99f7ec153db715acfe0c1600f144ded58f31fe'>, <Transaction '0x42193c0ff7007c6e2a5e5572a3c6b5706cd133d21e30e5826add3d971134504c'>]

다른 거래

  • chain.get_transaction을 사용하여 모든 거래에 대한 TransactionReceipt 개체를 가져옵니다.
>>> chain.get_transaction('0xf598d43ef34a48478f3bb0ad969c6735f416902c4eb1eb18ebebe0fca786105e')
<Transaction '0xf598d43ef34a48478f3bb0ad969c6735f416902c4eb1eb18ebebe0fca786105e'>

이는 보류 중인 거래에 대해서도 작동합니다. 거래가 아직 확인되지 않은 경우 콘솔 내에서 거래 해시가 노란색으로 표시됩니다.

개발 체인 조작

Brownie는 로컬 개발 환경으로 ganache-cli를 사용하도록 설계되었습니다. 채굴, 스냅샷 기능 및 시간 여행과 같은 기능은 Chain 객체를 통해 액세스할 수 있습니다.

새 블록 채굴

Ganache는 거래를 브로드캐스트할 때마다 새 블록을 채굴하는 것이 기본 동작입니다. chain.mine 메서드를 사용하여 빈 블록을 채굴할 수 있습니다:

>>> web3.eth.block_number
0
>>> chain.mine(50)
50
>>> web3.eth.block_number
50

시간 여행

현재 epoch 시간을 확인하려면 chain.time 을 호출할 수 있습니다:

>>> chain.time()
1500000000

시계를 빨리 감기 위해서는 chain.sleep를 호출하십시오.

>>> chain.sleep(31337)

>>> chain.time()
1500031337

잠자는 것은 새로운 블록을 채굴하지 않는다는 것을 기억하세요. block.timestamp에 의존하는 계약 보기 기능은 거래를 수행하거나 chain.mine을 호출할 때까지 영향을 받지 않습니다.

스냅샷

현재 블록체인 상태의 스냅샷을 촬영하려면 chain.snapshot을 사용하십시오:

>>> chain.snapshot()

>>> accounts[0].balance()
100000000000000000000
>>> accounts[0].transfer(accounts[1], "10 ether")

Transaction sent: 0xd5d3b40eb298dfc48721807935eda48d03916a3f48b51f20bcded372113e1dca
Transaction confirmed - block: 5   gas used: 21000 (100.00%)
<Transaction object '0xd5d3b40eb298dfc48721807935eda48d03916a3f48b51f20bcded372113e1dca'>

나중에 chain.revert를 사용하여 이 상태로 돌아갈 수 있습니다.:

>>> accounts[0].balance()
89999580000000000000
>>> chain.revert()
4
>>> accounts[0].balance()
100000000000000000000

되돌리기는 스냅샷을 소모하지 않습니다. 필요할 때마다 동일한 스냅샷으로 돌아갈 수 있습니다. 하지만 새로운 스냅샷을 찍으면 이전 스냅샷은 더 이상 접근할 수 없습니다.

genesis 상태로 돌아가려면 chain.reset을 사용하세요.

>>> web3.eth.block_number
6
>>> chain.reset()
>>> web3.eth.block_number
0

실행 취소 / 다시 실행

스냅샷을 함께 사용하여 최근 거래를 앞뒤로 이동하려면 chain.undo 및 chain.redo을 사용할 수 있습니다. 이는 대화형 테스트 디버깅 중에 특히 유용합니다.

>>> accounts[0].transfer(accounts[1], "1 ether")
Transaction sent: 0x8c166b66b356ad7f5c58337973b89950f03105cdae896ac66f16cdd4fc395d05
  Gas price: 0.0 gwei   Gas limit: 6721975
  Transaction confirmed - Block: 1   Gas used: 21000 (0.31%)

<Transaction '0x8c166b66b356ad7f5c58337973b89950f03105cdae896ac66f16cdd4fc395d05'>

>>> chain.undo()
0

>>> chain.redo()
Transaction sent: 0x8c166b66b356ad7f5c58337973b89950f03105cdae896ac66f16cdd4fc395d05
  Gas price: 0.0 gwei   Gas limit: 6721975
  Transaction confirmed - Block: 1   Gas used: 21000 (0.31%)

chain.snapshot 과 chain.revert는 실행 취소 버퍼를 지웁니다.

 

728x90
반응형
LIST

'블록체인 (Block Chain) > 이더리움' 카테고리의 다른 글

[브라우니 (Brownie)] 14. 데이터 유형  (0) 2023.06.16
[브라우니 (Brownie)] 13. 트랜잭션 검사 및 디버깅하기  (0) 2023.06.16
[브라우니 (Brownie)] 11. 트랜잭션 가스 가격 설정하기  (0) 2023.06.16
[브라우니 (Brownie)] 10. 컨트랙트로 작업하기  (0) 2023.06.16
[브라우니 (Brownie)] 9. 계정으로 작업하기  (0) 2023.06.16
'블록체인 (Block Chain)/이더리움' 카테고리의 다른 글
  • [브라우니 (Brownie)] 14. 데이터 유형
  • [브라우니 (Brownie)] 13. 트랜잭션 검사 및 디버깅하기
  • [브라우니 (Brownie)] 11. 트랜잭션 가스 가격 설정하기
  • [브라우니 (Brownie)] 10. 컨트랙트로 작업하기
gsroot
gsroot
gsrootgsroot 님의 블로그입니다.
gsroot
gsroot
gsroot
전체
오늘
어제
  • 분류 전체보기 (126)
    • 파이썬 (Python) (3)
    • 데이터 과학 (Data Science) (29)
      • 데이터브릭스 (11)
      • Apache Superset (9)
    • 인공지능 (AI) (43)
      • 머신러닝 (ML) (19)
      • LLM (8)
      • MCP (8)
      • OpenAI Agents SDK (7)
    • 블록체인 (Block Chain) (37)
      • 이더리움 (36)
      • 코스모스 (0)
    • 웹 (Web) 개발 (9)
    • 앱 (App) 개발 (0)
    • 데브옵스 (DevOps) (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Superset
  • 스마트컨트랙트
  • DevOps
  • cognosys
  • 이더리움
  • 데이터 과학
  • LLM
  • 브라우니
  • 블록체인
  • 데이터브릭스
  • cursor
  • GPT
  • 머신러닝
  • Ai
  • NLP
  • 솔리디티
  • MCP
  • 웹 개발
  • ci/cd
  • 선형회귀
  • FastAPI
  • claude
  • redis
  • openai agents sdk
  • 자연어 처리
  • Redis Sentinel
  • 자동화
  • 데이터 시각화
  • Python
  • 파이썬

최근 댓글

최근 글

반응형
250x250
hELLO · Designed By 정상우.
gsroot
[브라우니 (Brownie)] 12. 블록체인과 상호작용하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.