# Read and Write Contract

By [Untitled](https://paragraph.com/@0x8170b31182301507fce863234b96e829fa0ff79c) · 2024-10-26

---

web3.py を使った Web3 開発基礎
----------------------

### web3.py とは？

web3.py は、Python で Ethereum などのブロックチェーンとインタラクトするための、人気のあるライブラリです。スマートコントラクトの呼び出し、トランザクションの送信、ブロックの取得など、様々な操作をPythonコードから実行できます。

[https://web3py.readthedocs.io/en/stable/index.html](https://web3py.readthedocs.io/en/stable/index.html)

### セットアップ

**基本的な使い方**

    from web3 import Web3
    
    # Infura のエンドポイントを指定 (ご自身のInfuraプロジェクトのURLに置き換えてください)
    w3 =Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/YOUR_PROJECT_ID'))
    
    # ネットワークに接続されているか確認
    print(w3.isConnected())
    
    # 最新のブロック番号を取得
    latest_block = w3.eth.blockNumber
    print(latest_block)
    

### スマートコントラクトとのやり取り

#### ABI (Application Binary Interface) の準備

*   スマートコントラクトのソースコードからABIを取得します。
    
*   通常、JSON形式で記述されています。
    
*   [Etherscan](https://etherscan.io/address/0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2#code)のcontractタブの下の方にあります。
    

    abi = [
        {
            "inputs": [],
            "name": "getData",
            "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}],
            "stateMutability": "view",
            "type": "function"
        },
        # ... その他の関数定義
    ]
    

**コントラクトインスタンスの作成**

    # コントラクトアドレスを指定
    contract_address = '0x...'
    
    # コントラクトインスタンスを作成
    contract = w3.eth.contract(address=contract_address, abi=abi)
    

**関数の呼び出し**

    # ビュー関数 (状態を変更しない関数) の呼び出し
    result = contract.functions.getData().call()
    print(result)
    
    # トランザクションを送信する関数 (状態を変更する関数) の呼び出し
    tx_hash = contract.functions.setData(42).transact({'from': '0x...'})
    

**トランザクションの送信**

    # アカウントのアンロック (私キーが必要)
    w3.eth.account.enable_unsecured_mode()
    account = w3.eth.account.from_key('YOUR_PRIVATE_KEY')
    
    # トランザクションを送信
    tx_hash = contract.functions.setData(42).transact({'from': account.address})
    
    # トランザクションのレシートを取得
    tx_receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
    

**まとめ**
-------

RPCを利用することでノードを立てたりせずに簡単にコントラクトから情報を読み取ったり、その結果を読み取ってトランザクションを送信し、取引を行なうことができます。今後は実際にUniswapなどでETH-USDCのスワップを行なったり、実質的な指値注文を実行する手順や、Coincheckやbitflyerなどで価格情報を読み取り、注文を出すことでmarketmaking botやアービトラージなどを予定しています。

---

*Originally published on [Untitled](https://paragraph.com/@0x8170b31182301507fce863234b96e829fa0ff79c/read-and-write-contract)*
