1

簡単な Ethereum スマート コントラクト ガナッシュをテストしたいのですが、アカウントを小文字で出力すると、web3 でエラーが表示されます。

web3.exceptions.InvalidAddress: ('Web3.py はチェックサム アドレスのみを受け入れます。この非チェックサム アドレスを提供したソフトウェアは安全ではないと見なされるべきです。プラットフォームのバグとして報告してください。代わりに ENS 名を使用してみてください。または、低い安全性を受け入れる必要がある場合は、Web3.toChecksumAddress(lower_case_address).', '0xfcad0b19bb29d4674531d6f115237e16afce377c') を使用してください。

次に、次を使用してアドレスを混合アドレスに変換します。

Web3.toChecksumAddress(the_lower_case_ganache_address)

エラーが発生します:

ファイル "/usr/local/lib/python3.7/site-packages/web3/contract.py"、1385 行目、call_contract_function で、e web3.exceptions.BadFunctionCallOutput から BadFunctionCallOutput(msg) を発生させます。 、コントラクトが正しく展開され、チェーンが同期されていますか? 127.0.0.1 - - [2019/01/25 21:35:21] "POST /blockchain/user HTTP/1.1" 500 -

それは私のpythonコードです:

def check_gender(data):
    valid_list = ["male", "female"]
    if data not in valid_list:
        raise ValidationError(
            'Invalid gender. Valid choices are'+ valid_list
        )

class UserSchema(Schema):
    name = fields.String(required=True)
    gender = fields.String(required=True, validate=check_gender)


app = Flask(__name__)


# api to set new user every api call
@app.route("/blockchain/user", methods=['POST'])
def transaction():

    w3.eth.defaultAccount = w3.eth.accounts[0]
    with open("data.json", 'r') as f:
        datastore = json.load(f)
    abi = datastore["abi"]
    contract_address = datastore["contract_address"]

    # Create the contract instance with the newly-deployed address
    user = w3.eth.contract(
        address=contract_address, abi=abi,
    )
    body = request.get_json()
    result, error = UserSchema().load(body)
    if error:        
        return jsonify(error), 422
    tx_hash = user.functions.setUser(
        result['name'], result['gender']
    )
    tx_hash = tx_hash.transact()
    # Wait for transaction to be mined...
    w3.eth.waitForTransactionReceipt(tx_hash)
    user_data = user.functions.getUser().call()
    return jsonify({"data": user_data}), 200



if __name__ == '__main__':
    app.run()

` および json ファイル:

{
    "abi": [
        {
            "constant": false,
            "inputs": [
                {
                    "name": "name",
                    "type": "string"
                },
                {
                    "name": "gender",
                    "type": "string"
                }
            ],
            "name": "setUser",
            "outputs": [],
            "payable": false,
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "constant": false,
            "inputs": [],
            "name": "getUser",
            "outputs": [
                {
                    "name": "",
                    "type": "string"
                },
                {
                    "name": "",
                    "type": "string"
                }
            ],
            "payable": false,
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "contract_address": "0xFCAd0B19bB29D4674531d6f115237E16AfCE377c"
}
4

1 に答える 1