以太坊==给合约转入/查询合约剩余/合约转给某账户/结构体/MAP

转入

必须要定义该函数,或者定义fallback

// 接收以太币

    receive() external payable {} // Corrected Line

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 private storedData;

    // 事件,用于通知数据变更
    event DataStored(uint256 indexed data);

    // 存储数据的函数
    function set(uint256 x) public payable {
        storedData = storedData+x;
        emit DataStored(x);
    }

    // 检索数据的函数
    function get() public view returns (uint256) {
        return storedData;
    }

    // 接收以太币
    receive() external payable {} // Corrected Line

    function getBalance() public view returns (uint256) {
        return address(this).balance;
    }
}

查询

合约转给某账户

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 private storedData;

    // 事件,用于通知数据变更
    event DataStored(uint256 indexed data);

    // 存储数据的函数
    function set(uint256 x) public payable {
        storedData = storedData+x;
        emit DataStored(x);
    }

    // 检索数据的函数
    function get() public view returns (uint256) {
        return storedData;
    }

    // 接收以太币
    receive() external payable {} // Corrected Line

    function getBalance() public view returns (uint256) {
        return address(this).balance;
    }

    
 // 从合约转账以太币到指定账户的函数
    function transferTo(address payable _to) public {
        uint256 amount = 10 ether; // 转账金额为10以太币
        _to.transfer(amount); // 使用 transfer 方法转账
    }

}

在 Solidity 中,有三种常用的方法可以将以太币转账到另一个地址:transfer、send 和 call。它们各自有不同的特性和用法,

transfer:安全性高,适用于简单转账,不需要处理失败情况。
send:灵活性较高,需要手动处理失败。
call:最灵活和通用的方法,适用于复杂的场景,允许指定 Gas 和调用其他合约方法。

结构体/MAP

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract UserManager {
    // 定义用户结构体
    struct User {
        string name;
        uint256 age;
        address userAddress;
    }

    // 存储用户的映射
    mapping(address => User) public users;
    // 存储所有用户地址的数组
    address[] public userAddresses;

    // 事件,用于通知用户信息变更
    event UserAdded(address indexed userAddress, string name, uint256 age);
    event UserUpdated(address indexed userAddress, string name, uint256 age);

    // 添加用户信息的函数
    function addUser(string memory _name, uint256 _age) public {
        // 检查用户是否已存在
        require(users[msg.sender].userAddress == address(0), "User already exists");

        // 创建新的用户结构体并存储在映射中
        users[msg.sender] = User(_name, _age, msg.sender);
        // 将用户地址添加到数组中
        userAddresses.push(msg.sender);

        // 触发事件,通知前端
        emit UserAdded(msg.sender, _name, _age);
    }

    // 更新用户信息的函数
    function updateUser(string memory _name, uint256 _age) public {
        // 检查用户是否已存在
        require(users[msg.sender].userAddress != address(0), "User does not exist");

        // 更新用户信息
        users[msg.sender].name = _name;
        users[msg.sender].age = _age;

        // 触发事件,通知前端
        emit UserUpdated(msg.sender, _name, _age);
    }

    // 获取用户信息的函数
    function getUser(address _userAddress) public view returns (string memory, uint256, address) {
        // 检查用户是否存在
        require(users[_userAddress].userAddress != address(0), "User does not exist");

        // 返回用户信息
        User memory user = users[_userAddress];
        return (user.name, user.age, user.userAddress);
    }

    // 返回所有用户信息的函数
    function getAllUsers() public view returns (User[] memory) {
        // 创建一个大小为 userAddresses.length 的动态数组
        User[] memory allUsers = new User[](userAddresses.length);

        // 遍历用户地址数组,并将用户信息存储到动态数组中
        for (uint256 i = 0; i < userAddresses.length; i++) {
            allUsers[i] = users[userAddresses[i]];
        }

        // 返回包含所有用户信息的动态数组
        return allUsers;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/733418.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 GitOps 进行防灾 MinIO

想象一下&#xff0c;您已经花费了无数小时来完善 Docker Swarm 设置&#xff0c;精心设计每项服务&#xff0c;并调整 CI/CD 管道以实现无缝自动化。现在&#xff0c;想象一下这个经过微调的系统被重置为原点&#xff0c;不是因为严重的故障或安全漏洞&#xff0c;而是因为数据…

并行计算之SIMD与SPMD

SIMD (Single Instruction Multiple Data) SIMD&#xff0c;也就是单指令多数据计算&#xff0c;一条指令可以处理多个数据。通过向量寄存器存储多个数据元素&#xff0c;并使用单条指令同时对这些数据元素进行处理&#xff0c;从而提高了计算效率。 代码示例&#xff1a; fl…

数据库设计概述-数据库设计内容、数据库设计方法(基于E-R模型的规范设计方法)

一、引言 如何利用关系数据库理论设计一个满足应用系统需求的数据库 二、数据库设计内容 1、数据库设计是基于应用系统需求分析中对数据的需求&#xff0c;解决数据的抽象、数据的表达和数据的存储结构等问题 2、其目标是设计出一个满足应用要求、简洁、高效、规范合理的数…

昇思25天学习打卡营第4天|数据变换(Transforms)

一、简介&#xff1a; 数据变换是指将已有的数据转换成可以提供给模型直接训练和验证的数据格式&#xff0c;在深度学习中一般被称为数据预处理&#xff0c;之前在昇思25天学习打卡营第3天|数据集Dataset-CSDN博客 介绍数据集的时候已经有了一个简单的使用&#xff0c;下面将具…

mac赛车竞速游戏:弯道卡丁车车手 for Mac 中文版下载

《弯道卡丁车车手》是一款刺激的卡丁车竞速游戏&#xff0c;玩家扮演的是赛道上的卡丁车车手&#xff0c;需要在曲线崎岖的赛道上驾驶卡丁车&#xff0c;与其他车手展开激烈的竞速比赛。 游戏中有多种赛道可以选择&#xff0c;每个赛道都有不同的难度和特点&#xff0c;玩家需…

双例集合(三)——双例集合的实现类之TreeMap容器类

Map接口有两个实现类&#xff0c;一个是HashMap容器类&#xff0c;另一个是TreeMap容器类。TreeMap容器类的使用在API上于HashMap容器类没有太大的区别。它们的区别主要体现在两个方面&#xff0c;一个是底层实现方式上&#xff0c;HashMap是基于Hash算法来实现的吗&#xff0c…

Apple - Advanced Memory Management Programming Guide 内存管理

翻译整理自&#xff1a;Advanced Memory Management Programming Guide&#xff08;Updated: 2012-07-17 https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html#//apple_ref/doc/uid/10000011i 文章目录 一、关于…

算法题--华为od机试考试(整数对最小和、素数之积、找城市)

目录 整数对最小和 题目描述 注意 输出描述 示例1 输入 输出 说明 解析 答案 素数之积 题目描述 输入描述 输出描述 示例1 输入 输出 说明 示例2 输入 输出 说明 解析 找城市 题目描述 输入 输出 示例1 输入 输出 示例2 输入 输出 说明 解析…

嵌入式通信协议-----UART协议详解(基于智芯Z20k11X)

目录 一、简介 1.概念 2.结构 3.特点 4.优缺点 二、协议帧组成 1.起始位 2.数据位 3.奇偶校验位 4.停止位 三、UART通信过程 四、USART与UART区别 五、代码实现 1.硬件框图 2.软件实现 一、简介 1.概念 USART&#xff08;Universal Synchronous Asynchronous R…

相机的标定

文章目录 相机的标定标定步骤标定结果影响因素参数分析精度提升一、拍摄棋盘格二、提升标定精度 标定代码实现 相机的标定 双目相机的标定是确保它们能够准确聚焦和成像的关键步骤。以下是详细的标定步骤和可能的结果&#xff0c;同时考虑了不同光照条件和镜头光圈大小等因素对…

怎样去掉卷子上的答案并打印

当面对试卷答案的问题时&#xff0c;一个高效而简单的方法是利用图片编辑软件中的“消除笔”功能。这种方法要求我们首先将试卷拍摄成照片&#xff0c;然后利用该功能轻松擦除答案。尽管这一方法可能需要些许时间和耐心&#xff0c;但它确实为我们提供了一个可行的解决途径。 然…

Docker网络介绍

网络是虚拟化技术中最复杂的部分&#xff0c;也是Docker应用中的一个重要环节。 Docker中的网络主要解决容器与容器、容器与外部网络、外部网络与容器之间的互相通信的问题。 这些复杂情况的存在要求Docker有一个强大的网络功能去保障其网络的稳健性。因此&#xff0c;Docker…

windows10远程桌面端口,Windows 10远程桌面端口修改的两个方法

在Windows 10系统中&#xff0c;远程桌面功能允许用户通过网络从一台计算机远程访问和控制另一台计算机。默认情况下&#xff0c;远程桌面服务使用的端口是3389。然而&#xff0c;出于安全考虑&#xff0c;许多管理员和用户希望修改这一默认端口。本指南将详细介绍如何在Window…

柯桥商务英语培训|老外和你说Tom和Jack,可不是在说人名!所以是啥意思?

小明和小李&#xff0c;这两个人在中国相信没有谁不认识他们了。而且有关他们的梗更是传遍大街小巷。 例如&#xff1a;小明他爷爷活了103岁&#xff0c;小明做数学题&#xff0c;又或者是小李的老婆比小明小2岁等等。 其实在国外&#xff0c;也有这么两个人像小明、小李一样&a…

WPF/C#:显示分组数据的两种方式

前言 本文介绍自己在遇到WPF对数据进行分组显示的需求时&#xff0c;可以选择的两种方案。一种方案基于ICollectionView&#xff0c;另一种方案基于IGrouping。 基于ICollectionView实现 相关cs代码&#xff1a; [ObservableProperty] private ObservableCollection<Peo…

【mysql】常用操作:维护用户/开启远程/忘记密码/常用命令

一、维护用户 1.1 创建用户 -- 语法 > CREATE USER [username][host] IDENTIFIED BY [password];-- 例子&#xff1a; -- 添加用户user007&#xff0c;密码123456&#xff0c;并且只能在本地可以登录 > CREATE USER user007localhost IDENTIFIED BY 123456; -- 添加用户…

利用第三方服务对目标进行被动信息收集防止被发现(web安全白帽子)

利用第三方服务对目标进行被动信息收集防止被发现&#xff08;web安全白帽子&#xff09; 1 被动信息收集1.1 信息收集内容1.2 信息用途 2 信息收集-DNS2.1 DNS信息收集NSLOOKUP2.1.1 ping2.1.2 nslookup 2.2 DNS信息收集-DIG&#xff08;此命令查到的结果更复杂些&#xff0c;…

java中实现Callable方式创建线程

一、为啥要引入Callable 在前面讲了通过继承Thread和实现Runnable方式创建线程的区别&#xff0c;那为什么有了Runnable还要引入Callable?下面通过实现Runnable方式的弊端给出答案 实现Runnable方式的弊端&#xff1a; package java.lang; FunctionalInterface public inte…

C++基础知识——《缺省参数》和《函数重载》

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

pwn1_sctf_2016

首先找到后门 32位IDA 打开 这里fgets,他限定了位数,我们无法利用溢出 但是我们可以看见 最后还有个操作 他把我们里面的I,全部替换为了 you S大小为0x3c ---意思我们要输入0x3c/3 的I 能达到溢出的目的 再加上4 from pwn import * ghust remote("node5.buuoj.cn&q…