首页IT科技web3j获取交易详情(关于web3.js中与交易发送、交易签名、智能合约函数调用相关api的理解)

web3j获取交易详情(关于web3.js中与交易发送、交易签名、智能合约函数调用相关api的理解)

时间2025-04-28 12:46:11分类IT科技浏览4539
导读:web3.js中有一些与交易发送、签名、合约函数调用相关的api,初学者(如me 常常搞不清什么情况下应该调用哪个,以及它们之间的区别。现将个人浅见记录如下,备忘。...

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版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
香港的服务器用什么域名(选择香港服务器配置的好处是什么) 推荐优化目标的好处(如何提高网站流量)