solidity抽象(abstract)合约(很常用)

news2024/12/24 20:19:27

当合约中至少有一个函数没有被实现,

或者合约没有为其所有的基本合约构造函数提供参数时, 合约必须被标记为 abstract。

即使不是这种情况,合约仍然可以被标记为 abstract, 例如,当您不打算直接创建合约时。

抽象(abstract)合约类似于 接口(interface)合约, 但是接口(interface)合约可以声明的内容更加有限。

通俗解释

抽象合约是一种至少包含一个未被实现(即没有函数体的)函数的合约。

这种合约不能直接部署到以太坊网络上,因为它不是完整定义的。

抽象合约通常作为基础合约,为派生合约提供接口和部分实现。

派生合约需要实现所有未定义的功能,才能成为非抽象合约,从而可以部署。

使用场景

  1. 定义接口规范

抽象合约可以定义一组函数,这组函数必须由任何继承该合约的非抽象合约实现。

这类似于接口,但抽象合约可以包含一些已实现的函数。

  1. 代码复用

通过在抽象合约中实现一些通用功能,可以减少在多个合约中重复相同代码的需要。

派生合约可以继承并使用这些实现,同时提供特定的功能实现。

  1. 多合约系统的开发

在开发包含多个合约的复杂系统时,抽象合约可以用来定义各个组件之间的通用接口。

这有助于分离关注点,提高代码的可维护性和可扩展性。

  1. 强制实现模式

当你希望确保所有派生合约都遵循特定的实现模式时,抽象合约是一个有用的工具。

通过在抽象合约中声明抽象函数,你可以强制要求派生合约实现这些函数,从而遵循设计的模式。

抽象合约是Solidity和其他面向对象编程语言中常用的一种设计模式,有助于构建灵活、可扩展的智能合约应用。

抽象合约的定义通常包括使用abstract关键字,以及至少一个function声明没有具体实现(没有大括号和函数体)。

抽象合约的定义示例

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

abstract contract AbsName {
    uint256 value;

    function getValue() public view returns (uint256) {
        return value;
    }
}


contract Name is  AbsName{
	
}

抽象合约的实现方式

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

abstract contract AbsName {
    uint256 value;

    function getValue() public view returns (uint256) {
        return value;
    }

	function setValue( uint _value) public virtual;
}


contract Name is  AbsName{
	
	function setValue( uint _value) public override {
		value = _value;
	}
}

ERC20 实现

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

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";

contract MyToken is ERC20, ERC20Permit {
    constructor() ERC20("MyToken", "MTK") ERC20Permit("MyToken") {
        _mint(msg.sender, 1000 * (10 ** 18) );
    }
}

ERC721 实现

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

// import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";

contract MyToken is ERC721URIStorage {
    constructor() ERC721("MyToken", "MTK") {}

    function create(uint256 tokenId, string memory ur) public {
        _mint(msg.sender, tokenId);
        _setTokenURI(tokenId, ur);
    }
}

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

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

相关文章

Langchain-Chatchat3.1——搜索引擎bing与DuckDuckGo

Langchain-Chatchat3.1——搜索引擎bing与DuckDuckGo 1. 前提是咱们的Chatchat服务一起部署好了,可以参考 Langchain-Chatchat3.1版本docker部署流程——知识库问答 2. 搜索引擎 DuckDuckGo:该搜索引擎不需要key,但是需要全球上网服务&…

MongoDB change stream 详解

文章目录 什么是 Chang Streams实现原理故障恢复使用场景Spring Boot整合Chang Stream 什么是 Chang Streams Change Stream指数据的变化事件流,MongoDB从3.6版本开始提供订阅数据变更的功能。 Change Stream 是 MongoDB 用于实现变更追踪的解决方案,类…

MySQL基础练习题16-电影评分

题目 准备数据 分析数据 总结 题目 查找评论电影数量最多的用户名。如果出现平局,返回字典序较小的用户名。 查找在 February 2020 平均评分最高 的电影名称。如果出现平局,返回字典序较小的电影名称。 准备数据 ## 创建库 create database db; u…

微信小程序电商直播功能如何开通?

作者:阿龙 目前,公域直播电商平台(抖音、快手、视频号等)的获客流量成本越来越高,同时监管规则越来越严,扣点越来越高,并且没有用户分销机制,这些都在迫使商家尽快建立自己的私域直…

苹果Vision Pro在中国市场遇冷?连黄牛都炒不动了

随着科技巨头苹果公司推出的首款混合现实头戴设备Vision Pro正式登陆中国市场,这款备受瞩目的产品引发了广泛关注。 然而,短短一周之后,许多早期尝鲜的用户却开始陆续退场。究竟是什么原因导致大量用户选择退场呢?本文将从多个维…

绝密!OceanBase OBCP备考模拟题讲解(3)

「源de爸讲数据库」每天更新OceanBase OBCP题库及全网独家超详细题目解析,祝您早日持证上岸! 现如今,一大批国产数据库随着国产化浪潮,已经逐步被越来越多的人认可。OceanBase便是其中一个优秀代表。 做这个日更专题&#xff0c…

ESP32-C2 烧录

自动下载电路 dtr rts ;WCH 提供了相应的芯片,实现自动下载 CH340X (*不要使用天问的下载器,电压为5V,下载前会重启电源,导致无法识别ESP芯片,修改,将电源线重引出 使用IDF编辑完成…

实测体验:劣质宠物空气净化器有啥危害?值得买的养宠空气净化器

作为一名猫咖店老板,换季时节,家中不仅要面对恼人的异味,还要忍受满天飞舞的猫毛,真是让人头疼。虽然和毛孩子在一起充满了乐趣,但随之而来的毛发和异味问题却令人苦不堪言。普通的空气净化器虽然能净化空气&#xff0…

写一个图片裁剪的js,JavaScript图片裁剪插件PlusCropper

在前端开发中,图片裁剪是一个常见的需求。本文将深入解析一个功能完善的JavaScript图片裁剪插件——PlusCropper,带你一步步了解其实现原理和使用方法。 一、插件概述 PlusCropper是一个轻量级的JavaScript插件,它允许用户在网页上交互式地…

CTFHUB-文件上传-双写绕过

开启题目 1.php内容&#xff1a; <?php eval($_POST[cmd]);?> 上传一句话木马 1.php&#xff0c;抓包&#xff0c;双写 php 然后放包&#xff0c;上传成功 蚁剑连接 在“/var/www/html/flag_484225427.php”找到了 flag

How Can I display Reference/Citation using Streamlit Application?

题意&#xff1a;怎样在Streamlit应用程序中显示参考文献或引用&#xff1f; 问题背景&#xff1a; I have created an Azure AI Search Service, created index using Azure Blob Storage and Deployed a web application and made a chat Playground using AzureOpenAI. 我…

CSS使用渐变实现Chrome标签栏效果

这次来看一个带特殊圆角导航栏布局&#xff0c;如下谷歌浏览器的标签栏&#xff1a; 这样一个布局如何实现呢&#xff1f; CSS 渐变几乎是无所不能的&#xff0c;什么的图形都能绘制&#xff0c;这里可以拆分一下&#xff0c;两个矩形&#xff0c;两个圆形&#xff0c;还有两个…

计算机毕业设计选题推荐-二手闲置交易系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

目标检测 | yolov2/yolo9000 原理和介绍

前言&#xff1a;目标检测 | yolov1 原理和介绍 简介 论文链接&#xff1a;https://arxiv.org/abs/1612.08242 时间&#xff1a;2016年 作者&#xff1a;Joseph Redmon  作者首先在YOLOv1的基础上提出了改进的YOLOv2&#xff0c;然后提出了一种检测与分类联合训练方法&#…

【Linux网络编程】套接字Socket(UDP)

网络编程基础概念&#xff1a; ip地址和端口号 ip地址是网络协议地址&#xff08;4字节32位&#xff0c;形式&#xff1a;xxx.xxx.xxx.xxx xxx在范围[0, 255]内&#xff09;&#xff0c;是IP协议提供的一种统一的地址格式&#xff0c;每台主机的ip地址不同&#xff0c;一个…

五个优秀的免费 Ollama WebUI 客户端推荐

认识 Ollama 本地模型框架&#xff0c;并简单了解它的优势和不足&#xff0c;以及推荐了 5 款开源免费的 Ollama WebUI 客户端&#xff0c;以提高使用体验。 什么是 Ollama&#xff1f; Ollama 是一款强大的本地运行大型语言模型&#xff08;LLM&#xff09;的框架&#xff0c…

一键操作!Win11用户将排除项添加到安全中心的方法

在Win11电脑操作中&#xff0c;Windows安全中心提供了添加排除项的功能&#xff0c;让用户可以自定义哪些文件、文件夹或进程免于Microsoft Defender的扫描&#xff0c;从而防止误报正常程序为安全威胁。但许多新手不知道具体如何操作才能成功添加排除项&#xff1f;那么就来看…

【PGCCC】pg_show_plans:显示所有正在运行的语句的查询计划

PostgreSQL 扩展可显示所有当前正在运行的 SQL 语句的查询计划。查询计划可以以多种格式显示&#xff0c;例如JSON或YAML。 此扩展在共享内存中创建哈希表。哈希表不可调整大小&#xff0c;因此一旦填满&#xff0c;就无法添加新计划。 安装 支持 PostgreSQL 版本 12 及更新…

学Python可少不了项目练手,这8个小项目有趣又实用,小白也能做出来_python练手项目,python教程

学习之路比较科学的学习方法是理解了之后把知识点进行运用&#xff0c;找一些开源的小项目做是最好的&#xff0c;站在岸上是学不会游泳的&#xff0c;光看健身视频是减不了肥的&#xff0c;不自己动手敲代码是学不会编程的。 我在找了8个比较有趣的小项目&#xff0c;技术水平…

DirectX修复工具下载安装指南:电脑dll修复拿下!6种dll缺失修复方法!

在日常使用电脑的过程中&#xff0c;不少用户可能会遇到“DLL文件缺失”的错误提示&#xff0c;这类问题往往导致程序无法正常运行或系统出现不稳定现象。幸运的是&#xff0c;DirectX修复工具作为一款功能强大的系统维护软件&#xff0c;能够有效解决大多数DLL文件缺失问题&am…