如何从特定地址调用合同函数

时间:2018-02-02 06:36:02

标签: node.js ethereum solidity

我想使用web3从我持有私钥的特定地址调用契约函数(sendTransaction not call)。我也连接了合同实例。我知道我必须像web3.personal.unlockAccount(地址,密码,持续时间) 然后指定发件人地址。 所以我的问题是,输入私钥的是“密码”吗?我解锁后如何将该地址传递到fromAddress。 或者是否有更简化的方法来解决它?

1 个答案:

答案 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但缺少此功能),并在生成后将其放在正确的文件夹中尝试简单地解锁帐户。