最初に
筆者はECDSAについて通り一遍を読んだだけで、ソースまで追ってません。これは嘘かもしれません。曖昧です。嘘であることがお分かりの方は、ご一報ください。
起こったこと
以下のエラーが出現した。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/.pyenv/versions/pygeth/lib/python3.6/site-packages/microraiden/client/client.py", line 274, in get_suitable_channel
return self.open_channel(receiver, deposit)
File "/root/.pyenv/versions/pygeth/lib/python3.6/site-packages/microraiden/client/client.py", line 165, in open_channel
data
File "/root/.pyenv/versions/pygeth/lib/python3.6/site-packages/microraiden/utils/contract.py", line 90, in create_signed_contract_transaction
sign_transaction(tx, private_key, int(contract.web3.version.network))
File "/root/.pyenv/versions/pygeth/lib/python3.6/site-packages/microraiden/utils/crypto.py", line 116, in sign_transaction
sig = sign(privkey, keccak256(rlp.encode(tx)), v=35 + 2 * network_id)
File "/root/.pyenv/versions/pygeth/lib/python3.6/site-packages/microraiden/utils/crypto.py", line 108, in sign
sig = sig[:-1] + bytes([sig[-1] + v])
ValueError: bytes must be in range(0, 256)
エラーは、bytesは 0 ~ 255までしか取れないのに、それ以上になっちゃってるよ!と仰っている。
コードを追うと、sig[-1]は0 ~ 3のいずれかになるらしい。
そしてv=35 + 2 * network_idらしいので、bytes内を確実に255以下にするにはnetwork_idを109以下にしなくてはならない。
やったこと
とりあえず99にしてやってみよう。
ここは通過したみたいだ。また別のエラーが出現してるけど、とりあえずこれはok。