- 博客(301)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
原创 使用 Foundry 进行高效、可靠的测试
摘要 Foundry框架为智能合约测试提供了高效解决方案,具有原生Solidity测试、极速性能和强大工具等优势。本文通过计数器合约案例演示了基础测试编写,包括断言函数和日志打印的使用方法。重点介绍了Foundry的核心功能——作弊码系统,涵盖环境控制、断言验证、模糊测试等类别,如vm.roll、vm.warp等常用操作,这些工具能精确模拟区块链状态,为合约测试提供全面支持。测试案例展示了从基础功能到边界条件的完整验证流程,体现了Foundry在保障合约安全性方面的价值。
2025-11-30 10:59:29
1084
1
原创 Foundry初始化、编译、测试、部署智能合约全流程介绍
Foundry 是一套用 Rust 编写的以太坊(EVM)智能合约开发工具链,由 Paradigm 团队开源维护。它以“极速、可移植、模块化”为设计目标,将编译、测试、部署、交互等流程整合在同一 CLI 中,是目前性能最突出的 Solidity 开发框架之一。
2025-11-24 18:19:29
1778
原创 以太坊改进提案EIP以及常用的ERC20和ERC721介绍
EIP(以太坊改进提案)是以太坊生态系统的核心治理机制,分为标准轨道EIP(包括核心协议变更、ERC应用标准和网络API)、元EIP(流程改进)和信息类EIP(设计指南)。其中ERC标准最为开发者熟知,如ERC-20同质化代币标准定义了6个必须实现的函数(转账、授权等)和2个事件,确保代币互操作性。ERC-20通过标准接口实现余额查询、转账和授权功能,典型应用包括代币发行和DEX交易。该标准已成为以太坊生态中最广泛采用的代币规范。
2025-11-21 14:32:09
1313
4
原创 Solidity代码复用梳理总结
本文系统介绍了Solidity中的代码复用机制,包括基础复用(函数与修饰器)和模块化复用(导入系统、接口与库)。函数复用可减少重复逻辑,修饰器用于添加通用验证;模块化通过import导入外部代码,接口标准化合约交互,库实现通用功能封装。文章提供了各类代码示例,展示了如何在实际开发中高效复用代码,提高开发效率并降低Gas成本。
2025-11-20 18:03:12
1084
原创 solidity中的抽象合约
Solidity中的抽象合约是一种至少包含一个未实现函数的合约,类似于抽象类,无法直接部署。摘要要点:1)抽象合约必须通过继承使用,子合约需实现所有抽象函数;2)与接口的区别在于抽象合约可包含已实现函数、状态变量和修饰器;3)主要用途包括作为基类模板、定义接口标准和部分实现模板;4)编译器会强制检查子合约是否实现所有抽象函数。抽象合约为智能合约开发提供了代码复用和标准化的重要机制。
2025-11-10 11:31:24
450
1
原创 Solidity 中的 ABI 编码与底层调用
本文介绍了Solidity中ABI编码与底层调用的核心概念。ABI定义了智能合约与外部交互的二进制接口规范,包括函数签名和参数的编码/解码方法。Solidity提供了abi.encode、abi.encodePacked等编码函数,以及call、delegatecall等底层调用方式,这些机制使合约能灵活地与外部交互,同时也带来一定的风险。理解ABI编码和底层调用是掌握高级Solidity开发的关键基础,特别是在实现复杂合约交互或代理模式时尤为重要。
2025-11-10 10:50:34
1049
原创 solidity中的接口和继承
Solidity中的接口和继承是构建智能合约的重要机制。接口是仅声明函数的外部契约,用于标准化合约交互,要求实现合约必须提供所有函数定义。继承则通过is关键字实现代码复用,支持函数重写和多重继承,并遵循C3线性化规则确定调用顺序。接口解耦合约交互,继承促进代码复用,二者共同提升合约的模块化、可扩展性和可维护性,是Solidity面向对象编程的核心工具。
2025-11-07 18:27:29
1414
原创 详解Solidity中的事件
Solidity事件是智能合约与外部应用通信的关键机制,作为区块链的低成本"广播系统",通过日志记录状态变化。相比状态变量存储,事件具有Gas效率高、支持前端异步监听、便于数据审计和调试等优势。事件使用emit触发,参数可标记为indexed以便过滤(最多3个)。底层通过EVM的LOG操作码实现,数据存储在交易回执中。前端可通过web3.js订阅或查询历史事件,获取包含参数值、区块信息等详细数据的Event对象。开发者还可创建匿名事件或使用事件重载功能。合理使用事件能显著提升DApp性能
2025-11-05 11:58:42
1041
1
原创 solidity中的错误处理机制
Solidity智能合约错误处理机制解析:原子性交易的错误处理对合约安全至关重要。Solidity提供三种主要方式:1)require用于输入验证,可退款未用Gas;2)revert支持复杂条件和自定义错误,Gas消耗最低;3)assert检查不应发生的内部错误,不退还Gas。0.6.0版本引入try/catch处理外部调用失败,但不能捕获内部函数错误或不存在的合约调用。开发者需根据场景选择合适方式,在安全性和Gas效率间取得平衡。
2025-11-05 10:13:07
1273
原创 solidity中的函数总结
Solidity函数是智能合约的核心,包含丰富的特性和细节。函数的基本结构由可见性、状态可变性、修改器等组成。可见性修饰符(public/internal/private/external)决定函数的调用范围。状态可变性(pure/view/payable/默认)定义函数如何与区块链交互。函数修改器用于插入执行前后的检查逻辑,提高代码复用性和安全性。这些特性共同构成了Solidity函数的完整体系,开发者需要根据实际场景合理选择组合,以确保合约的安全性和高效性。
2025-10-24 08:07:11
1811
2
原创 solidity的变量学习小结
值类型不需要指定数据位置的原因是编译器知道它们应该在栈上引用类型需要指定数据位置的原因是编译器需要知道是在内存还是存储中Q:如果对值类型的局部变量使用数据位置修饰会怎样呢?A:我验证了一下: uint memory a = 0;会编译报错: 4.1 内存中的赋值行为出于“安全性考虑”、“Gas 成本优化”、“简化存储管理”这几个原因,字符串被设为不可变的4.2 存储中的赋值行为理解storage引用,要区分“storage引用” 与 “状态变量”试图在函数返回参数中使用storage修饰会编译报错:
2025-10-18 21:17:32
1289
3
原创 在 Windows 上安装 WSL并使用linux命令处理文本文件
WSL(Windows Subsystem for Linux)允许在Windows中直接运行Linux发行版。安装时需确保系统为Windows 10(2004+)或11,通过管理员PowerShell执行wsl --install命令即可自动完成设置,包括启用功能、安装内核及默认Ubuntu。安装后重启并按提示创建账户。在WSL中可通过cd /mnt/c/路径访问Windows目录,使用wc -l统计文件行数,或grep -v "字符串" 原文件 > 新文件来删除包含指定字符串的
2025-10-09 13:23:23
765
原创 如何把对方的jar包添加到自己的项目里
一般在金融业务中会经常涉及加密,而在跟第三方联调时,有时候要用到对方提供的加密工具,经常以jar包的形式提供。那么该如何引入到自己的springBoot项目中呢?在Maven的pom.xml中,includeSystemScope是用于控制是否将系统范围(system)的依赖包含到最终打包产物中的配置项。若需将系统范围的依赖包含到打包产物中,需在build节点中添加includeSystemScope配置并设置为true。当依赖的scope设置为system时,默认情况下这些依赖不会被打包到最终产物中。
2025-08-22 15:27:32
337
原创 要会用抓包来帮助“破案”
摘要:通过抓包分析MQTT通信中断问题,发现TCP重置连接由平台端发起。进一步排查发现不同画面播放时长差异与Nginx配置client_max_body_size 100M限制有关,复杂画面数据量接近阈值时被截断。调整该参数后问题解决。关键点:使用tcpdump -i Eth1 -w /root/aap.pcap 'port 1883' -s 0捕获完整MQTT数据包,结合Nginx错误日志定位配置瓶颈。(149字)
2025-08-14 16:40:18
699
原创 实时画面回传的开发复盘
逢山开路遇水搭桥,遇到问题不可怕,尤其是当下有这么趁手的AI辅助工具,所以保持轻松乐观的心态。但仍然是需要学习的,因为不学习,你都没办法向AI提问~
2025-07-29 17:52:01
454
原创 如何对nginx设置开机自启动
使用 systemd(适用于 CentOS 7+/Ubuntu 16.04+/Debian 8+ 等新系统)**
2025-07-29 17:08:10
812
2
原创 在华为欧拉系统openEuler 24.03 sp1上安装nginx 1.28
一、华为欧拉系统openEuler 24.03服务器上离线安装Nginx 1.28版本,但是服务器自带了openssl 3.0,而nginx为了兼容openssl 1.1仍然会依赖libcrypt.so.2。源码安装方式 、RPM安装方式、 二进制软件安装方式、yum安装方式。二、如果要用源码编译的方式安装,也需要安装一些依赖,可以从这里边找到。先把上述的rpm包全部安装后,再源码编译安装nginx。所以在安装时报依赖错误。
2025-07-29 15:22:43
1854
原创 对近期接触到的直播相关知识进行梳理
M3U8 文件是 HLS (HTTP Live Streaming) 协议的核心组件,它本质上是一个播放列表文件,包含媒体流的结构信息。直播与视频聊天的对比:我觉得直播是通过流媒体技术把现场的图像和声音采集后分发出去,供观众在线围观,可以认为是开放的,一般没有人数限制;而视频聊天是点对点的线上交流,是基于UDP/TCP的实时传输协议实现的。流媒体是通过互联网实时传输音视频内容的技术,用户无需等待完整下载即可开始观看,核心是将内容分割为小数据包顺序传输。直播传输的是视频流,而点播是播放的录制好的视频文件。
2025-06-23 14:15:43
1395
原创 ftp文件无法写入文件排查过程记录
这中间还把测试环境的ftp改成了ftps, 客户端对ftp这块做了调整,兼容了ftp和ftps,但是预发环境还是之前的ftp。我的体会居然是对段永平的本分思想增加了理解,在协作过程中出现问题,当责任不清晰时,要老实本分地把问题纳入到自己职责范围内,长期下来,不仅会赢得声誉,还会成长得更快。测试环境,ftp服务器是可以正常自动创建目录,并写入文件的,但部署到预发环境后,目录倒是可以自动创建,但是文件不能正常写入了。领导的意思是可以用命令去连接ftp,如果可以正常操作,那就是代码的问题。
2025-06-09 18:15:33
746
原创 ftp改为sftp,从服务器配置到代码的调整梳理
将FTP改为SFTP的核心方法是启用SSH服务并配置SFTP子系统,同时调整客户端工具或脚本以使用SFTP协议替代FTP协议。具体操作包括服务器端SSH/SFTP服务配置、防火墙端口调整。还是在SSH配置文件/etc/ssh/sshd_config中,修改倒数第二行。还是编辑SSH配置文件/etc/ssh/sshd_config。编辑SSH配置文件/etc/ssh/sshd_config。找到#Port 22那一行,可以放开注释并改为其他端口。但需要开放该端口的访问。
2025-05-30 16:57:14
879
原创 EMQX社区版5.8.5集群搭建踩坑记
1.作为反向代理服务器,NGINX 位于 MQTT 服务器端,代表 MQTT 客户端向 EMQX 集群发起 MQTT 连接请求,并代替 EMQX 集群处理请求,然后将 EMQX 集群的响应返回给 MQTT 客户端。比如我在openEuler 22.03 (LTS-SP4)上使用emqx-5.8.5-el8-amd64.tar.gz安装成功,但在CentOS Linux 7 (Core)上却安装不成功,后边换成了emqx-5.8.5-el7-amd64.tar.gz才可以。
2025-05-30 13:53:02
2224
原创 EMQX启用单向认证的SSl/TLS连接的配置步骤
参考官网地址:https://docs.emqx.com/zh/cloud/latest/deployments/tls_ssl.html#%E7%94%9F%E6%88%90%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6。执行openssl version -a 获取 openssl.cnf 目录。需要注意openssl.cnf的路径。subj 依据实际使用情况调整。
2025-05-27 16:38:54
1263
原创 了解一下OceanBase中的表分区
OceanBase 是一个高性能的分布式关系型数据库,它支持 SQL 标准的大部分功能,包括分区表。分区表可以帮助管理大量数据,提高查询效率,通过将数据分散到不同的物理段中,可以减少查询时的数据扫描量。
2025-05-06 18:08:44
1457
原创 定期删除一周前的数据,日志表的表空间会增长吗?
删除操作不释放空间:DELETE 操作只会标记数据为删除状态,并不会立即释放空间。碎片化:频繁的 DELETE 和 INSERT 操作可能导致表空间碎片化,虽然有空闲空间,但由于不连续,可能无法有效利用。高水位线:表的高水位线(HWM)不会因 DELETE 操作而降低,即使删除了大量数据,表空间也不会自动收缩。分区表:使用分区表,按时间分区,直接删除旧分区,操作更高效且能立即释放空间。即使定期删除一周前的数据,日志表的表空间仍可能持续增长。通过这些方法,可以有效控制日志表的空间增长。
2025-02-07 19:31:18
470
原创 小经验小结
关于数据校验的一条经验: 先假定是合法的,直接落库,再校验数据是否有问题,有问题就抛异常回滚关于外部接口调用:调用外部接口的组件交给spring管理,这样方便将一些配置数据(如url地址、加密key等信息)注入进来关于功能自测:起码要用debug覆盖一遍自己的代码逻辑,避免明显的缺陷
2024-10-14 14:20:32
352
1
原创 多态对象的存储方案小结
和@JsonSubTypes可以应对这种情形,但有点麻烦,并且name属性必须是字符串、必须用Jackson为基础的json工具类对json字符串和对象进行序列化和反序列化。(为了方便与前端交互,实体类成员变量的值如showConfig1、showConfig2都具有相同的前缀,后缀则是枚举值)某个类型有几种不同的子类,Jackson中的@JsonTypeInfo。后来,又遇到了一次这种情形,觉得不用多态反而更方便地应对了。存储时,把不同实体类对象转换为json串赋值给对应的字段上。
2024-10-14 11:50:13
538
原创 巧用枚举应对多种策略的场景
其次是每个数据项都有多个属性(比如中文含义、英文编码、权重值…),或者是需要对某个行为以各不相同的策略进行实现。总结一下,什么时候适合使用枚举呢?
2024-10-14 11:12:58
570
原创 记录一下工作中用到的几个有意思的小算法
22年的夏天,我补了一段时间算法知识,看的是马士兵教育左程云老师的算法课和极客时间王争老师的算法之美,虽然没吸收太多,但也对算法中蕴含的巧妙智慧印象颇深,着实在心里埋下了一颗喜欢算法的种子。工作中很少需要自己编写一段算法,但最近一段时间集中遇到了几处,特意记录下来。
2024-10-11 19:51:10
1023
原创 使用规则引擎简化特定场景的开发
前一段开发一个根据获奖规则生成获奖名单的功能,场景比资金路由的匹配要简单,但规则引擎也是适用的。之前做资金中台的时候,用到了aviator轻量级的规则引擎,简化了匹配逻辑。
2024-09-13 16:46:12
317
2
原创 自测的重要性
发现了sql少写了个条件、发现了入参必传 mergeBrandId、发现了复制错误 mergeBrandId 跟 memberBrandId长得很像。2、核对需求文档,看看是不是自己的逻辑跟需求都是匹配的,有没有遗漏的细节。3、有时候配合接口的使用方去做点假数据,也是发现自己接口漏洞的好机会。1、把debug一遍,看看每一步变量值的变化都符合预期。
2024-09-13 11:11:08
337
原创 actuator字符绕过漏洞在Nginx和apisix上的配置
最近遇到了安全部门派发的actuator泄漏漏洞,领导希望不暴露到外网上,对于内网需要认证才可以访问。要想不暴露到外网上,就需要在网络层面做拦截,比如nginx和apisix上做代理配置。一般的情况都可以应对,就是对于http://xxx/actuator;%2f…/字符绕过这种情况,一直没有解决方案。
2024-09-13 10:34:47
1570
原创 工作中遇到了一个线程中断异常
而主线程随后又进行了数据查询,这时候从druid数据库连接池中获取数据连接会用到AQS中的可重入锁, 可重入锁会检查线程的中断标识,如果是中断,则抛出中断异常。主线程使用CompletableFuture开辟子线程进行了并行查询,但其中某个子线程执行时发生异常,没有捕获。结果就在主线程等待所有子线程都执行完毕时报ExecutionException。工作中遇到了一个线程中断异常,备忘记录一下。从而对主线程打上了中断标识。
2024-09-11 19:36:52
688
Spring+SpringMVC的一个简单登录例子(参考用户ldhsecret)
2013-07-27
My97DatePicke日期控件
2014-06-12
算法导论(第二版)pdf
2011-11-20
javaWeb开发中,mysql数据库报错连不上,求高手
2017-10-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅