当前位置: 首页 > wzjs >正文

网站跟web的区别aso应用商店优化原因

网站跟web的区别,aso应用商店优化原因,网站做好了如何发布,制作百度移动网站/ pure: 纯纯牛马 function addPure(uint256 _number) external pure returns(uint256 new_number){ new_number _number 1; }不会消耗gas对吧。传的不是状态变量 你的理解基本对了,但我们来更严谨、深入地回答这个问题。 ✅ 你这段 pure 函数代码: …

/ pure: 纯纯牛马 function addPure(uint256 _number) external pure returns(uint256 new_number){ new_number = _number + 1; }不会消耗gas对吧。传的不是状态变量

你的理解基本对了,但我们来更严谨、深入地回答这个问题。


✅ 你这段 pure 函数代码:

function addPure(uint256 _number) external pure returns(uint256 new_number) {new_number = _number + 1;
}

这是一个非常典型的 pure 函数:

  • ✅ 不读取任何链上状态变量

  • ✅ 不写入链上状态变量

  • ✅ 只是计算输入值 _number + 1,然后返回


❓会不会消耗 gas?

场景是否消耗 gas原因解释
用 call 调用(比如 Remix 蓝色按钮、本地调用)❌ 不消耗函数在本地执行,不上链,不发交易
用 sendTransaction 发交易调用✅ 会消耗虽然函数是 pure,但只要发了交易、上了链,就会消耗 gas(因为 EVM 要执行它)

✅ 举例说明:

1. 使用 Remix 调用(或 web3/ethers call):
const result = await contract.addPure(123); // ✅ 不消耗 gas

这是 本地仿真运行,不发交易,完全不花钱。适合做链下计算。


2. 使用 sendTransaction 方式调用:
await contract.addPure(123, { from: user });

就算函数是 pure,因为你发了交易,EVM 还是要执行它、打包进区块,所以:

  • ✅ 会消耗 gas(比如 21,000 ~ 30,000)

  • ❌ 不会改链上状态

  • ⚠️ 不推荐这么用,没意义还浪费 gas


🧠 小结:

函数类型pure
是否能读状态❌ 不行
是否能改状态❌ 不行
是否消耗 gas?✅ 发交易才消耗;❌ 用 call 就不消耗

🚀 一句话总结:
只要你调用 pure/view 函数时用的是 call,不发交易,就不花 gas。


需要我帮你写一个对比:pure、view、write 三种函数并观察 Remix 上 gas 消耗差异的完整演示代码吗?

二、call和sendTransaction区别

你问得非常好!这是很多 Solidity 初学者在实际调用合约时都会混淆的核心概念。我们现在来彻底讲清楚什么是 sendTransaction 方式,以及为什么你写的那种方式就是。


✅ 先定义:什么是 sendTransaction?

在以太坊中:

sendTransaction 是指:向区块链发起一笔真实交易(transaction),从一个地址调用一个合约函数,消耗 gas,可能改变链上状态。


🔍 举个类比说明:

操作方式类似于做什么会不会上链会不会花 gas使用函数类型
call查看数据、模拟执行❌ 否❌ 否view / pure
sendTransaction正式签名 + 发交易 + 广播✅ 是✅ 是(一定会)non-view/任意

✅ 回到你的例子:

await contract.addPure(123, { from: user });

这行代码,在 web3.jsethers.js 中,如果你用 await 调用了一个合约的函数,并且它不是 .call().staticCall(),那么默认行为就是发起一笔真实交易,也就是 sendTransaction


🧨 它其实等价于这样:

await contract.methods.addPure(123).send({ from: user });
  • 这就会触发一笔链上交易

  • 即使 addPure()pure 函数

  • 你也会花 gas(比如 21,000)

  • 但结果你无法直接拿到返回值,因为链上交易不返回值


⚠️ 非常重要的对比:

用法是否发交易(sendTransaction)能不能返回结果是否消耗 gas
contract.methods.foo().call()❌ 否(只读模拟)✅ 可以获取结果❌ 不花钱
contract.methods.foo().send()✅ 是(发交易)❌ 无法直接获取✅ 要花 gas

✅ 正确方式:调用 pureview 函数推荐用 .call()

const result = await contract.methods.addPure(123).call(); // ✅ 推荐方式
console.log(result); // 124
  • .call() 是本地调用,不会发交易

  • 不会花钱

  • 可以立刻获取返回值


✅ 总结一句话:

只要你用的是 .send() 或不带 .call() 的 await 函数调用,并且指定了 { from: ... },那就是发了交易(sendTransaction),会 上链、花 gas、不直接返回结果


如果你想,我可以再写一段完整的 ethers.js 示例,对比 .call.sendTransaction 两种方式的执行行为。需要吗?

http://www.dtcms.com/wzjs/320398.html

相关文章:

  • 做软件赚钱的网站有哪些如何推广一个品牌
  • 苏州网站优化公司百家号权重查询站长工具
  • 网站建设的开发方式百度收录时间
  • 网站建设方式可行性分析百度官方网站网址是多少
  • 在京东上怎样做网站百度一下官方网页
  • 网站开发交接表怎么制作自己公司网站
  • 公司网站主页排版百度搜索排名机制
  • 珠海网站建设专业设计南京网站制作设计
  • 站长推荐自动跳转导航入口seo网站推广优化就找微源优化
  • 龙华区深圳北站百度收录网站需要多久
  • 上海兼职做网站百度查重入口免费版
  • 国外独立网站如何推广互联网公司网站模板
  • 网站建设公司口碑排名怎样在百度上发布信息
  • 网站运营部门职责官网建设
  • 山东爱易网站建设工作室网站百度收录查询
  • 东莞网站推广优化建设网络营销策略案例分析
  • 大庆建设公司网站网站seo入门基础教程
  • 做网站是先买域名还是windows优化大师值得买吗
  • 一个公司如何做多个网站备案自动app优化下载
  • 同一个网站绑定多个域名宁波网络推广团队
  • .net网站方案指数基金是什么意思
  • 苏州做网站哪家专业百度推广渠道代理
  • 空间域名续费 网站维护发票如何开免费网站安全软件下载
  • 甘肃省建设工程网上投标网站沈阳百度快照优化公司
  • 东莞核酸检测时间seo文章优化方法
  • 外贸网站个人简介学校招生网络营销方案
  • 甘肃做网站的公司关键时刻
  • 我在征婚网站认识一个做IT刚刚突发1惊天大事
  • 本地电脑做网站谷歌推广代理
  • 做网站是要云空间吗网络推广外包公司