[英]How can I sign message using an Ethereum private key in Python?
On JS I can use ethers to sign message and get v r s在 JS 上,我可以使用 ethers 签署消息并获取 v r s
const { utils } = require("ethers");
// for example types = [address, uint256], params = [0x4F..., 100], privateKey=0x45..
const getSignString = (types=undefined, params=undefined, privateKey=undefined) => {
const digest = utils.keccak256(utils.solidityPack(types, params));
return new utils.SigningKey(privateKey).signDigest(digest);
};
// return obj.r, obj.v, obj.s ...
How can i do this on Python?我怎么能在 Python 上做到这一点?
Find answer for my question为我的问题寻找答案
def custom_sign_message(types: List, params: List, private_key: str) -> SignMessage:
"""
Sign message
types: types of data, for example ["address", "uint256", ...]
params: params to sign. len(types) == len(params)
private key: customer private key
return signed message, containing v, r, s for tests
"""
signature = Web3.toHex(Web3.soliditySha3(types, params))
message = encode_defunct(hexstr=signature)
signed_message = w3.eth.account.sign_message(message, private_key)
res = eth_account.account.Account.signHash(message.body, private_key)
return SignMessage(
v=res.v,
r=Web3.toHex(res.r),
s=Web3.toHex(res.s),
message_hash=signed_message.messageHash,
)
You can use eth_account sign_message method.您可以使用eth_account sign_message方法。
To pack the parameters to binary you can use eth-abi package .要将参数打包为二进制文件,您可以使用eth-abi package 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.