web3j获取交易详情(关于web3.js中与交易发送、交易签名、智能合约函数调用相关api的理解)
web3.js中有一些与交易发送 、签名 、合约函数调用相关的api ,初学者(如me)常常搞不清什么情况下应该调用哪个 ,以及它们之间的区别 。现将个人浅见记录如下 ,备忘 。
sendTransaction
web3.eth.sendTransaction(transactionObject [, callback])
transactionObject对象设置交易的各种参数(不包括签名r ,s ,v) ,签名过程由api根据from地址自动完成 。
sendSignedTransaction
web3.eth.sendSignedTransaction(signedTransactionData [, callback])发送已签名的交易 ,交易签名可以通过 web3.eth.accounts.signTransaction 生成 。
signTransaction
web3.eth.signTransaction(transactionObject, address [, callback])签名交易 ,由address指定对应的账户进行签名 。
sign
web3.eth.sign(dataToSign, address [, callback])使用指定账户对数据进行签名
call
web3.eth.call(callObject [, defaultBlock] [, callback])执行一个消息调用交易 ,消息调用交易直接在节点旳 VM 中而不需要通过区块链挖矿来执行 。
callObject交易对象的data属性包含合约函数调用数据的 ABI 字节字符串 ,对合约创建交易来说 ,其值为合约初始化代码 。
new contract
new web3.eth.Contract(jsonInterface[, address][, options])生成合约实例 ,若不设置address参数,则部署新的合约实例到网络中 。
methods.myMethod.call
myContract.methods.myMethod([param1[, param2[, ...]]]).call(options[, callback])将在不发送交易的情况下调用该“常量 ”方法并在 EVM 中执行其智能合约方法 。注意此种调用方式无法改变智能合约状态 。
methods.myMethod.send
myContract.methods.myMethod([param1[, param2[, ...]]]).send(options[, callback])向合约发送交易来执行其方法 。注意这会改变合约状态 。
methods.myMethod.encodeABI
myContract.methods.myMethod([param1[, param2[, ...]]]).encodeABI()为指定的合约方法进行 ABI 编码 ,可用于发送交易 、调用方法或向另一个合约方法传递参数。
signTransaction
web3.eth.accounts.signTransaction(tx, privateKey [, callback]);使用给定的私钥签名以太坊交易 。
sign
web3.eth.accounts.sign(data, privateKey);签名任意数据 。注意 ,此函数与web3.eth.sign(dataToSign, address [, callback])的区别,后者只需要通过地址来指定由谁来签名 ,api内部必定可以获取其私钥。
上述函数具体用法请参照对应版本web3.js的文档说明 ,如:web3.eth.accounts — web3.js 中文文档 — 登链社区https://learnblockchain.cn/docs/web3.js/web3-eth-accounts.html#sign
注:理论上 ,所有发起交易的函数都必须有私钥进行签名操作 。但上述某些函数只需指定公钥地址就能完成该功能 ,原因是web3.js所连接的providers为指定的公钥地址保存了对应的私钥 ,在后台可以自动完成签名动作 ,当然这种情形多见于使用ganache等测试环境中 。正常情况下(如在Dapp中)需要web3.js连接用户的私钥钱包 ,签名动作由用户手动确认完成 。
补充:web3.js会在底层将函数调用转为json-rpc的请求 ,其中不用创建交易的使用eth_call ,创建交易的使用eth_sendTransaction ,若需要在本地签名然后发送交易则使用eth_sendRawTransaction
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!