合约可以有钱

合约可以有钱!
合约与其他合约或者EOA之间可以转账

gas和gas price

https://github.com/wolflo/evm-opcodes/blob/main/gas.md
实际的gas是完全由执行逻辑决定的,一个固定的逻辑的合约函数执行,gas没有变化,有变化的是gas的价格,是由transaction来设定交易发起者设定最多消耗多少:gaslimit;剩下没用完的gas会“退款”, 交易失败时,已经用了
的gas不退,合约之间函数调用可以设置gaslimit:调用者来控制gas消耗

转账与函数调用

  • 没有单独的转账逻辑,转账是与函数调用一起发生的。
  • 转账就是函数调用,调用时加上调用选项{gas[gaslimit]:,value:}ccontracta.foo{option}();
  • 被调用者加上payable修饰符

几点说明

  • 通过静态函数调用转账fname{gas:, value:}(),被调用的普通函数用payable修饰,接收转账通过动态函数调用aadress.call{gas:, value:}(calldata)转账。
  • 被调用函数payble修饰如果调用没带钱,被调用者不必payable;
  • 如果带钱了,但是被调用者没有payable,就会失败
  • 函数调用都可以附带做转账操作

示例代码

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract ReceiveEther {uint public x;event Fallback(bytes cdata, uint value, uint gas);event Foo(bytes cdata, uint value, uint gas);// Fallback function is called when msg.data is not emptyfallback() external {emit Fallback(msg.data, 0, gasleft());}function getBalance() public view returns (uint) {return address(this).balance;}function foo() public payable {emit Foo(msg.data, msg.value, gasleft());}
}
contract SendEther {function sendViaCall(address payable _to) public payable {(bool sent, ) = _to.call{value: msg.value}("");require(sent, "Failed to send Ether");}function sendViaFoo(address payable _to) public payable {ReceiveEther re = ReceiveEther(_to);re.foo{gas:2300, value: msg.value}();//msg.value是sendViaFoo的调用者发送给SendEther}
}

【智能合约】合约转账相关推荐

  1. 以太坊智能合约开发:让合约接受转账

    以太坊智能合约开发:让合约接受转账 在以太坊智能合约开发中,通常会有向合约地址进行转账的需求,那么有几种向合约地址进行转账的方式呢? 有三种方式: 部署合约时转账 调用合约提供的方法 直接向合约地址进 ...

  2. 智能合约 与 外部账号之间转账,智能合约与智能合约之间转账

    从外部账户向智能合约账户转账以太币 外部账户给部署智能合约时给合约初始转账: 使用remix 测试环境 pragma solidity >=0.4.0 <0.7.0;contract Te ...

  3. solidity实现账户地址向合约账户转账

    一个合约最多有一个 receive 函数, 声明函数为: receive() external payable { - } 不需要 function 关键字,也没有参数和返回值并且必须是 extern ...

  4. solidity智能合约[25]-转账的3种方式与比较

    转账的3种方式 123 address.transfer()address.send()address.call.value().gas()() 转账transfer 12345678910 func ...

  5. 【以太坊】深入理解智能合约(合约调合约)

    一.前言 关于智能合约的描述,大家在网上百度能查到一大堆.看来看去也能看个似懂非懂,但是稍微具体点呢,智能合约到底都能干什么,可以转账提现吗?可以合约调用合约吗?可以发布多个合约吗? 关于智能合约的疑 ...

  6. EOS 更新合约内部转账方式变化

    新的eos虚拟机移除了eosiolib/currency.hpp 之前的转账合约已经无法再更新智能合约 eosio::currency::inline_transfer(from, to, _exte ...

  7. TokenInsight 对话首席——智能法律合约,去中心化的法务、仲裁之路可否行通

    邀行业首席,谈市场现状,见趋势未来!第17期<对话首席>线上直播,于8月23日(周五)下午3点举办. 本次<对话首席>特邀Jur CEO & Co-founder - ...

  8. 【以太坊】在测试网络上发布智能合约

    一.准备工作 1.本地测试网络搭建完成,对以太坊的了解已经达到基础水平.(可以参考我之前的关于以太坊的文章). 2.有翻墙的能力(发布合约的时候,有不少网站都是需要翻墙操作的) 3.本地浏览器安装Me ...

  9. 以太坊知识教程------智能合约(2)调用

    1. 合约消息 合约之间通过调用或发送消息的方式进行交互 .当一个合约接收到一条消息时,它可以回复一些数据,这样消息的原发送者就能立即使用 .采用这种方法,发送一条消息就像调用一次函数. 一个智能合约 ...

  10. java 创建以太坊代币_以太坊 (五)编写智能合约-建立简易加密代币

    本篇文章,我们将写一个简易的加密代币的智能合约来给大家诠释加密代币的原理 启动 ganache-cli 打开终端,启动ganache-cli,相关环境在区块链学习日记(四)这篇文章里面已经有具体说明. ...

最新文章

  1. ideal连接数据库报错The server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time
  2. 两路虚拟化服务器,当四核多路服务器碰上虚拟化
  3. [Leetcode][第347题][JAVA][前K个高频元素][优先队列][堆][遍历set/map]
  4. 统计建模与r软件_【统计建模与R软件笔记】008 描述统计量(1)
  5. python谱聚类算法_谱聚类Spectral clustering(SC)
  6. 搜素算法(基础)--DFS/BFS算法(JAVA)
  7. 我的2018春招实习+秋招总结【前端开发】
  8. 项目介绍star原理_这个 Python 项目厉害了!多个实战案例教你分析时空数据处理...
  9. JVM 和 HotSpot 的区别?
  10. 微软职位内部推荐-Software Engineer II-Search
  11. Tomcat下work文件夹的作用
  12. MATLAB含有绝对值的线性规划,Lingo求解带绝对值的线性规划模型
  13. 编写程序:5类员工有对应封装类,创建Employee数组,若干不同的Employee对象,并实现增删改查功能(《黑马程序员》P144编程题加强版)
  14. 基于Excel模板导出——ExcelTemplate
  15. PIX for Windows使用
  16. 使用GPG验证文件签名
  17. Variant类型在各语言中的参数传递
  18. 李炎恢 js教程 拖拽上 思路解析
  19. 网络舆情信息整理分析怎么有效做好的方法
  20. Python 实现 周志华 《机器学习》 BP算法

热门文章

  1. 济宁:携手华为打造孔孟之乡的科技味儿
  2. STM32F0 Error: Flash Download failed - Cortex-M0解决
  3. 【自信】不自信的人可能有以下表现
  4. MacOs Hadoop环境搭建 IDEA开发MapReduce程序及调试
  5. 中小型企业网络建设-Cisco Packet Tracer v7.2.2思科网络模拟器实验练习
  6. 蓝牙耳机延迟受什么因素影响?有没有玩游戏延迟低的品牌推荐?
  7. MSE——软件工程硕士
  8. [Win10] depends.exe(即Dependency Walker)运行很慢解决办法
  9. qq在电脑上总是服务器连接中断,win7系统玩QQ炫舞老是掉线提示与服务器断开连接的解决方法...
  10. java : apache cxf client 查询手机号码属地