我想使用web3从我持有私钥的特定地址调用契约函数(sendTransaction not call)。我也连接了合同实例。我知道我必须像web3.personal.unlockAccount(地址,密码,持续时间) 然后指定发件人地址。 所以我的问题是,输入私钥的是“密码”吗?我解锁后如何将该地址传递到fromAddress。 或者是否有更简化的方法来解决它?
答案 0 :(得分:1)
是"密码"我输入私钥的地方?
否,不是。实际上它是一个密码,您在创建帐户时输入的密码用于生成密钥库文件。
如果您使用web3.personal.unlockAccount(address,password,duration)
,则需要将密钥库文件放在gest附近的keystore
文件夹中。
另一种方法是使用web3.py
中的web3.eth.sendRawTransaction
,但从中调用合约方法会有点笨拙。
key = '0x' + 'YOUR-PRIVATE-KEY
transaction = {
'to': _to,
'value': 0,
'gas': 300000,
'gasPrice': 23000000000,
'nonce': web3.eth.getTransactionCount(_from),
'chainId': int(web3.admin.nodeInfo['protocols']['eth']['network']),
'data': b''
}
signed = web3.eth.account.signTransaction(transaction, key)
print("Transaction Hash: " + web3.toHex(web3.eth.sendRawTransaction(signed.rawTransaction)))
我的建议是使用web3.eth.account.encrypt
创建可识别的以太网客户端的密钥文件(web3.py
,因为web3.js
但缺少此功能),并在生成后将其放在正确的文件夹中尝试简单地解锁帐户。