使用remix实现给合约账户转账

实现内容:从remix上的虚拟账户上转账给自己编写的智能合约账户

前提基础:对solidity有一些基础了解,对以太坊的账户机制有一定了解。

账户
在以太坊中账户的唯一标识是地址(address)。

在solidity中即地址类型。但是地址类型也分为两种:address 和 address payable 。地址类型最常用的成员变量有balance,即当前账户余额。具体成员变量可查看文档

而address payable 和 address 相同,不过还具有成员transfer() 和 send()这样使得其可以接收向该账户的转账。

receive()函数
一个合约最多有一个 receive 函数, 声明函数为: receive() external payable { … }

在对合约没有任何附加数据调用(通常是对合约转账)是会执行 receive 函数。例如:通过 .send() 或者 .transfer() 如果 receive 函数不存在,但是有payable的 fallback 回退函数,那么在进行纯以太转账时,fallback 函数会调用.

如果两个函数都没有,这个合约就没法通过常规的转账交易接收以太(会抛出异常)。

fallback()函数
在一个合约中最多有一个fallback()函数,函数声明为: fallback () external [payable]{…},这个函数不能有参数和返回值。(高级版本中可以,文档)

作用:当调用一个合约中不存在的函数或者调用空方法时,亦或使用合约地址的内置函数transfoer()和send() 的时,若没有receive()函数,则会执行目标合约的fallback()函数。

所以在我们对合约账户进行转账的例子中,必须包含fallback() 函数,否则运行时会报错失败。规范写的话则需要包含receive() 函数和 fallback()函数

代码:

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.7.0;

contract transferTest {

// 向合约账户转账 
function transderToContract() payable public {
    payable(address(this)).transfer(msg.value);
}

// 获取合约账户余额 
function getBalanceOfContract() public view returns (uint256) {
    return address(this).balance;
}

fallback() external payable {}

receive() external payable {}

}
// 使用的编译器版本为:0.7.5
代码比较简单,但需要注意的几点:

得到账户合约地址使用:address(this)
address 转 address payable 是显式转换:payable(address)
address payable 转 address 是隐式转换。
msg.value 是调用者传入的
操作:

点击compile对合约代码进行编译

编译操作

点击DEPLOY&RUN TRANSACTIONS,并点击Deploy进行部署

部署合约

底下Deployed Contracts中会出现一个已经部署好的合约,我们可以通过点击transderToContract()进行调用函数。

假设我们需要向合约地址转账10个以太币

转账

图中我们向合约用户转账10个以太币,右下方的控制台中可以查看到交易的hash码,也可以debug去查看运行细节。

点击getBalanceOfContract()进行查看当前合约用户中的余额。

http://kc.njitt.edu.cn/Item/2635.aspx
http://kc.njitt.edu.cn/Item/2636.aspx
http://kc.njitt.edu.cn/Item/2637.aspx
http://kc.njitt.edu.cn/Item/2638.aspx
http://kc.njitt.edu.cn/Item/2639.aspx
http://kc.njitt.edu.cn/Item/2640.aspx
http://kc.njitt.edu.cn/Item/2641.aspx
http://kc.njitt.edu.cn/Item/2642.aspx
http://kc.njitt.edu.cn/Item/2643.aspx
http://kc.njitt.edu.cn/Item/2644.aspx
http://kc.njitt.edu.cn/Item/2645.aspx
http://kc.njitt.edu.cn/Item/2646.aspx
http://kc.njitt.edu.cn/Item/2647.aspx
http://kc.njitt.edu.cn/Item/2648.aspx
http://kc.njitt.edu.cn/Item/2649.aspx
http://kc.njitt.edu.cn/Item/2650.aspx
http://kc.njitt.edu.cn/Item/2651.aspx
http://kc.njitt.edu.cn/Item/2652.aspx
http://kc.njitt.edu.cn/Item/2653.aspx
http://kc.njitt.edu.cn/Item/2654.aspx
http://kc.njitt.edu.cn/Item/2655.aspx
http://kc.njitt.edu.cn/Item/2656.aspx
http://kc.njitt.edu.cn/Item/2657.aspx
http://kc.njitt.edu.cn/Item/2658.aspx
http://kc.njitt.edu.cn/Item/2659.aspx
http://kc.njitt.edu.cn/Item/2660.aspx
http://kc.njitt.edu.cn/Item/2661.aspx
http://kc.njitt.edu.cn/Item/2662.aspx
http://kc.njitt.edu.cn/Item/2663.aspx
http://kc.njitt.edu.cn/Item/2664.aspx
http://kc.njitt.edu.cn/Item/2665.aspx
http://kc.njitt.edu.cn/Item/2666.aspx
http://kc.njitt.edu.cn/Item/2667.aspx
http://kc.njitt.edu.cn/Item/2668.aspx
http://kc.njitt.edu.cn/Item/2669.aspx
http://kc.njitt.edu.cn/Item/2670.aspx
http://kc.njitt.edu.cn/Item/2671.aspx
http://kc.njitt.edu.cn/Item/2672.aspx
http://kc.njitt.edu.cn/Item/2673.aspx
http://kc.njitt.edu.cn/Item/2674.aspx
http://kc.njitt.edu.cn/Item/2675.aspx
http://kc.njitt.edu.cn/Item/2676.aspx
http://kc.njitt.edu.cn/Item/2677.aspx
http://kc.njitt.edu.cn/Item/2678.aspx
http://kc.njitt.edu.cn/Item/2679.aspx
http://kc.njitt.edu.cn/Item/2680.aspx
http://kc.njitt.edu.cn/Item/2681.aspx
http://kc.njitt.edu.cn/Item/2682.aspx
http://kc.njitt.edu.cn/Item/2683.aspx
http://kc.njitt.edu.cn/Item/2684.aspx
http://kc.njitt.edu.cn/Item/2685.aspx
http://kc.njitt.edu.cn/Item/2686.aspx
http://kc.njitt.edu.cn/Item/2687.aspx
http://kc.njitt.edu.cn/Item/2688.aspx
http://kc.njitt.edu.cn/Item/2689.aspx
http://kc.njitt.edu.cn/Item/2690.aspx
http://kc.njitt.edu.cn/Item/2691.aspx
http://kc.njitt.edu.cn/Item/2692.aspx
http://kc.njitt.edu.cn/Item/2693.aspx
http://kc.njitt.edu.cn/Item/2694.aspx
http://kc.njitt.edu.cn/Item/2695.aspx
http://kc.njitt.edu.cn/Item/2696.aspx
http://kc.njitt.edu.cn/Item/2697.aspx
http://kc.njitt.edu.cn/Item/2698.aspx
http://kc.njitt.edu.cn/Item/2699.aspx
http://kc.njitt.edu.cn/Item/2700.aspx
http://kc.njitt.edu.cn/Item/2701.aspx
http://kc.njitt.edu.cn/Item/2702.aspx
http://kc.njitt.edu.cn/Item/2703.aspx
http://kc.njitt.edu.cn/Item/2704.aspx
http://kc.njitt.edu.cn/Item/2705.aspx
http://kc.njitt.edu.cn/Item/2706.aspx
http://kc.njitt.edu.cn/Item/2707.aspx
http://kc.njitt.edu.cn/Item/2708.aspx
http://kc.njitt.edu.cn/Item/2709.aspx
http://kc.njitt.edu.cn/Item/2710.aspx
http://kc.njitt.edu.cn/Item/2711.aspx
http://kc.njitt.edu.cn/Item/2712.aspx
http://kc.njitt.edu.cn/Item/2713.aspx
http://kc.njitt.edu.cn/Item/2714.aspx
http://kc.njitt.edu.cn/Item/2715.aspx
http://kc.njitt.edu.cn/Item/2716.aspx
http://kc.njitt.edu.cn/Item/2717.aspx
http://kc.njitt.edu.cn/Item/2718.aspx
http://kc.njitt.edu.cn/Item/2719.aspx
http://kc.njitt.edu.cn/Item/2720.aspx
http://kc

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Remix是一款基于Web的Solidity智能合约编译器,它能够帮助开发者快速编写、测试和部署智能合约。Remix具有用户友好的界面和丰富的功能,如代码高亮、自动完成、编译器错误提示、调试器等。此外,Remix还提供了一些实用的插件,如合约交互插件、测试插件、优化器插件等。 要创建一个实现整数加减法的智能合约,您可以按照以下步骤操作: 1. 启动Remix编译器,并选择Solidity编译器版本。 2. 创建一个新的Solidity文件,并定义一个合约名和一个状态变量来存储整数值。 3. 在合约定义两个函数,一个用于加法操作,另一个用于减法操作。两个函数都需要接收一个整数作为参数,并将结果存储在状态变量。 4. 编译合约并检查是否存在任何编译器错误。 5. 部署合约并测试它是否按预期工作。 以下是一个示例Solidity代码,实现整数加减法操作: ``` pragma solidity ^0.8.0; contract IntegerOperations { uint public result; function add(uint x) public { result += x; } function sub(uint x) public { result -= x; } } ``` 在此示例,我们定义了一个名为IntegerOperations的合约,并在其定义了两个函数add和sub,它们分别用于加法和减法操作。合约还定义了一个名为result的状态变量,用于存储结果。在add和sub函数,我们将传入的整数值加到或从result变量减去,并更新状态变量的值。 您可以使用Remix编译器来编译、部署和测试此合约。在Remix,您可以使用Solidity编译器版本0.8.0或更高版本来编译此代码。在编译器,单击“编译”按钮,检查是否存在任何编译器错误。 如果没有错误,您可以使用“部署”按钮部署合约。在部署期间,您需要选择一个适当的网络,并设置合适的gas费用。一旦合约成功部署,您可以使用Remix的交互式控制台测试合约。在控制台,您可以调用add和sub函数,传递整数值,并检查result变量的值是否按预期更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值