web3-以太坊智能合约基础(理解智能合约Solidity)

以太坊智能合约基础(理解智能合约/Solidity)

无需编程经验,也可以帮助你了解Solidity独特的部分;如果本身就有相应的编程经验如java,python等那么学起来也会非常的轻松

一、Solidity和EVM字节码

实际上以太坊链上储存的就是EVM的字节码,编译好的程序;EVM和Solidity实际上就和java中的jvm虚拟机和java语言的关系
在这里插入图片描述

Solidity是静态类型的

​ 类似于Java,C,Rust 而非python或者js

例子:-整数:uint(256位无符号整数)

​ int(256位带符号整数)

for (uint i = 0;i<10;i++){users[i].balance = 1;}

二、数据类型

**值类型(value Type)**布尔值,整数型等等

**引用类型(Reference Type)**包括数组和结构体,这类变量占用的空间大,赋值是直接传递地址值(类似于Java的指针)

**映射类型 (mapping Type) ** 类似于java的map key–value

-映射:健值存储/哈希表

-每个键初始值都映射为0

-没有内置的方法来查询映射的长度,或者、迭代其非零元素。可以使用单独的变量
在这里插入图片描述

三、函数签名

智能合约的代码总是包含在函数或者是一个运算程序中的;和Java,python的编程语言的函数类似
在这里插入图片描述
构造函数

第一次创建合约时调用

用于自定义设置或给出初始状态

BoardAction的智能合约函数,类似于java中的赋值操作,把constructor的address的地址值赋值给上面的public的值

contract BoardAction{address public president;address public vicePresident;constructor(address initialPresident,address initialVP) public {/** initialize the contract **/president = initialPresident;vicePresident = initialVP;}
}
四、可见修饰器

用于函数

function calledByAnyone()public {/*anyone can all */}
function calledInternally() internal {/* only called by another funcation in this contract*/}

用于实例变量;几乎和java的public和private一摸一样

int public myPublicField;
int private myPrivateField;

问:myPrivateField所取的值时秘密的吗?

刚开始学习 solidity 时,pureview 关键字可能令人费解,因为其他编程语言中没有类似的关键字。solidity 引入这两个关键字主要是因为 以太坊交易需要支付气费(gas fee)。合约的状态变量存储在链上,gas fee 很贵,如果计算不改变链上状态,就可以不用付 gas。包含 pureview 关键字的函数是不改写链上状态的,因此用户直接调用它们是不需要付 gas 的(注意,合约中非 pure/view 函数调用 pure/view 函数时需要付gas)。

function ordinary() public {/*can modify state and call other functions*/}
function viewOnly() public view {/*cannot modify any storage or call another ono-view funcation*/}
funcation localOnly() public pure {/*doesnot even read any state either*/}
五、事件

这个类似于java中日志

查看合约状态主要有两种方式:

-使用***View函数***,例如用于公共字段的getter函数

-查看***事件日志***。是否可以“订阅”合约中的事件

首先使用event声明一个事件,然后在想要查看的地方emit这个事件即可
在这里插入图片描述

六、调用其他合约的方法

如下代码所示Token为外部的合约接口;tokenA,tokenB外部合约地址实例;sqap1函数的调用

abstract contract Token {function transferFrom (address from,address to,uint amount) public virtual;
}
contract Exchanger {Token tokenA = Token(address(0x00))Token tokenB = Token(address(0x00))function sqap1(address Alice,address Bob) public{tokenA.transferFrom(Alice,Bob,1);tokenB.transferFrom(Bob,Alice,1);}
}
七、使用原生代币

在solidity中接受和使用以太坊币

如下代码。有一个acceptExactlyTwoEther函数可以被以太坊的以太币接受,然后还有函数修饰器payable 一定要指定payable ,如果没有指定payable修饰的话那么以太坊将会拒绝所有的以太币。

function acceptExactlyTwoEther() public payable returns(uint) {require(msg.value >= 2.0 ether);uint refund = msg.value - 2.0 ether;payable(msg.sender).transfer(refund);return address(this).balance;
}

读取当前时间

function plcaeBid(int price) public {require(block.timestamp <= deadline);
}

关于区块的其他元数据也是可以得到的

总结

本文介绍了Solidity智能合约的基本概念和核心特性。Solidity类似于Java/C等静态语言,编译为EVM字节码运行。主要知识点包括:1)数据类型分为值类型、引用类型和映射类型;2)函数签名与构造函数机制;3)可见性修饰符(public/private)和状态修改标识(view/pure);4)事件机制用于日志记录;5)调用外部合约的方法;6)原生代币处理需使用payable修饰符;7)可读取区块时间等元数据。文章通过类比Java等传统语言,帮助开发者快速理解Solidity独特的设计逻辑,为智能合约开发打下基础。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

D2-基于本地Ollama模型的多轮问答系统

本程序是一个基于 Gradio 和 Ollama API 构建的支持多轮对话的写作助手。相较于上一版本&#xff0c;本版本新增了对话历史记录、Token 计数、参数调节和清空对话功能&#xff0c;显著提升了用户体验和交互灵活性。 程序通过抽象基类 LLMAgent 实现模块化设计&#xff0c;当前…

传统业务对接AI-AI编程框架-Rasa的业务应用实战(2)--选定Python环境 安装rasa并初始化工程

此篇接续上一篇 传统业务对接AI-AI编程框架-Rasa的业务应用实战&#xff08;1&#xff09;--项目背景即学习初衷 1、Python 环境版本的选择 我主机上默认的Python环境是3.12.3 &#xff08;我喜欢保持使用最新版本的工具或框架&#xff0c;当初装python时最新的稳定版本就是…

Ubuntu22.04安装MinkowskiEngine

MinkowskiEngine简介 Minkowski引擎是一个用于稀疏张量的自动微分库。它支持所有标准神经网络层&#xff0c;例如对稀疏张量的卷积、池化和广播操作。 MinkowskiEngine安装 官方源码链接&#xff1a;GitHub - NVIDIA/MinkowskiEngine: Minkowski Engine is an auto-diff neu…

高等数学基础(矩阵基本操作转置和逆矩阵)

矩阵是否相等 若 A A A和 B B B为同型矩阵且对应位置的各个元素相同, 则称矩阵 A A A和 B B B相等 在Numpy中, 可以根据np.allclose()来判断 import numpy as npA np.random.rand(4, 4) # 生成一个随机 n x n 矩阵B A A.Tprint("矩阵是否相等&#xff1a;", np…

网络爬虫一课一得

网页爬虫&#xff08;Web Crawler&#xff09;是一种自动化程序&#xff0c;通过模拟人类浏览行为&#xff0c;从互联网上抓取、解析和存储网页数据。其核心作用是高效获取并结构化网络信息&#xff0c;为后续分析和应用提供数据基础。以下是其详细作用和用途方向&#xff1a; …

MATLAB实现井字棋

一、智能决策系统与博弈游戏概述 &#xff08;一&#xff09;智能决策系统核心概念 智能决策系统&#xff08;Intelligent Decision System, IDS&#xff09;是通过数据驱动和算法模型模拟人类决策过程的计算机系统&#xff0c;核心目标是在复杂环境中自动生成最优策略&#…

解决el-select选择框右侧下拉箭头遮挡文字问题

如图所示&#xff1a; el-select长度较短的时候&#xff0c;选择框右侧下拉箭头会遮挡选中的数据 选中数据被遮挡 解决办法&#xff1a; 组件如下&#xff1a; <td class"fmtd" :colspan"col.ptproCupNum" v-for"col in row" :key"…

【Linux】pthread多线程同步

参考文章&#xff1a;https://blog.csdn.net/Alkaid2000/article/details/128121066 一、线程同步 线程的主要优势在于&#xff0c;能够通过全局变量来共享信息。不过&#xff0c;这种便携的共享是有代价的&#xff1b;必须确保多个线程不会同时修改同一变量&#xff0c;或者某…

Spring框架学习day7--SpringWeb学习(概念与搭建配置)

SpringWeb1.SpringWeb特点2.SpringWeb运行流程3.SpringWeb组件4.搭建项目结构图&#xff1a;4.1导入jar包4.2在Web.xml配置**4.2.1配置统一拦截分发器 DispatcherServlet**4.2.2开启SpringWeb注解&#xff08;spring.xml&#xff09; 5.处理类的搭建6.SpringWeb请求流程(自己理…

业务到解决方案构想

解决方案构想的核心理解 解决方案构想是连接业务需求与技术实现的关键桥梁&#xff0c;从您描述的内容和我的理解&#xff0c;这个阶段的核心点包括&#xff1a; 核心要点解读 转化视角&#xff1a;将业务视角的需求转变为解决方案视角 业务能力探索阶段识别了"做什么&q…

jvm学习第1day jvm简介,栈溢出、堆溢出

jvm学习第1day jvm简介&#xff0c;栈溢出、堆溢出 jvm简介栈线程安全栈溢出线程运行诊断堆堆溢出 方法区方法区内存溢出常量池和运行时常量池 jvm简介 jvm 是编译后的字节码文件运行的环境&#xff0c; 因此各个平台有了jvm可以运行java.class文件&#xff0c;这是Java跨平台…

关于神经网络中的激活函数

这篇博客主要介绍一下神经网络中的激活函数以及为什么要存在激活函数。 首先&#xff0c;我先做一个简单的类比&#xff1a;激活函数的作用就像给神经网络里的 “数字信号” 加了一个 “智能阀门”&#xff0c;让机器能学会像人类一样思考复杂问题。 没有激活i函数的神经网络…

免费无限使用GPT Plus、Claude Pro、Grok Super、Deepseek满血版

渗透智能-ShirtAI&#xff0c;可以免费无限使用GPT Plus、Claude Pro、Grok Super、Deepseek满血版、除此之外还能免费使用AI搜索、Gemini AI、AI照片修复、AI橡皮擦、AI去背景、AI智能抠图、AI证件照、OCR识别、在线思维导图、在线绘图工具、PDF工具箱、PDF翻译。 传送入口&a…

阿里云 Linux 搭建邮件系统全流程及常见问题解决

阿里云 Linux 搭建 [conkl.com]邮件系统全流程及常见问题解决 目录 阿里云 Linux 搭建 [conkl.com]邮件系统全流程及常见问题解决一、前期准备&#xff08;关键配置需重点检查&#xff09;1.1 服务器与域名准备1.2 系统初始化&#xff08;必做操作&#xff09; 二、核心组件安装…

python版若依框架开发:项目结构解析

python版若依框架开发 从0起步&#xff0c;扬帆起航。 python版若依部署代码生成指南&#xff0c;迅速落地CURD&#xff01;项目结构解析 文章目录 python版若依框架开发前端后端 前端 后端

RabbitMQ 的异步化、解耦和流量削峰三大核心机制

RabbitMQ 的异步化、解耦和流量削峰三大核心机制 RabbitMQ 是解决数据库高并发问题的利器&#xff0c;通过异步化、解耦和流量削峰三大核心机制保护数据库。下面从设计思想到具体实现&#xff0c;深入剖析 RabbitMQ 应对高并发的完整方案&#xff1a; 一、数据库高并发核心痛点…

前端没有“秦始皇“,但可以做跨端的王[特殊字符]

前端各领域的 “百家争鸣” 框架之争&#xff1a;有 React、Vue、Angular 等多种框架。它们各有优缺点&#xff0c;开发者之间还存在鄙视链&#xff0c;比如 Vue 嫌 React 难用&#xff0c;React 嫌 Vue 不够灵活。样式处理&#xff1a; CSS 预处理器&#xff1a;像 Sass、Les…

Spring Boot-面试题(52)

摘要&#xff1a; 1、通俗易懂&#xff0c;适合小白 2、仅做面试复习用&#xff0c;部分来源网络&#xff0c;博文免费&#xff0c;知识无价&#xff0c;侵权请联系&#xff01; 1. 什么是 Spring Boot 框架&#xff1f; Spring Boot 是基于 Spring 框架的快速开发框架&#…

JVM——JVM中的字节码:解码Java跨平台的核心引擎

引入 在Java的技术版图中&#xff0c;字节码&#xff08;Bytecode&#xff09;是连接源代码与机器世界的黄金桥梁。当开发者写下第一行public class HelloWorld时&#xff0c;编译器便开始了一场精密的翻译工程——将人类可读的Java代码转化为JVM能够理解的字节码指令。这些由…

Java中的JSONObject详解:从基础到高级应用

Java中的JSONObject详解&#xff1a;从基础到高级应用 在当今前后端分离的架构中&#xff0c;JSONObject已成为Java开发者处理JSON数据的瑞士军刀。本文将深入解析JSONObject的核心机制与实战技巧。 一、JSONObject的本质与实现库 1.1 核心定位 JSONObject是Java中表示JSON对…