自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 合约收款方式,转账与问题安全

特性receive()fallback()是否能接收 ETH是(必须是payable可选(payable或不写)是否接收 data否(data 必须为空)是(data 非空或无函数匹配)是否必须存在否(可选)否(可选)常见触发条件纯 ETH 转账,无数据错误调用或带 data 转账当合约调用外部地址(如call转账)时,如果该地址是一个合约,它可以在未完成前一次调用前,反复调用回原合约的函数,造成重复提现等安全问题。event 事件名(参数类型 参数名, ...);

2025-08-07 21:31:05 1241

原创 Solidity 编程进阶

/ 简单错误(不带参数)// 带参数的错误// 复杂参数的错误触发自定义错误// 其他逻辑...自定义修饰符(Modifier)用于在函数执行前或执行后添加额外的检查或逻辑。它可以复用代码,并且常用于权限控制或状态检查。// 定义一个简单的接口。

2025-08-06 22:46:14 1128

原创 Solidity智能合约基础

基础学习使用remix:ideRemix - Ethereum IDEevm:ethreum virtual machine evm字节码强类型脚本语言 compile =>evm bytescode =>evmhello的样例声明的关键字:contract一、EVM 的数据结构 基于栈的架构:EVM 使用栈来存储数据,最大支持 1024 个栈元素,每个元素是 256 位的字(word),所有计算都在栈上完成。三类存储结构:基本类型(Value Types)引用类型(Refere

2025-08-05 20:24:55 853 4

原创 执行合约,合约事件

用户有多种方式执行智能合约,比如使用工具生成 Go 合约代码、使用 ethclient 库或是使用浏览器钱包插件。虽然方式有多种,但这些方式的最终目的都是向以太坊节点发起远程的 JSON RPC 调用。当需要转账、部署合约以及执行合约方法时,调用节点提供的方法,这个方法发送的是已签名的交易数据。当仅查询合约内的数据时,则调用节点提供的eth_call方法。

2025-08-04 18:51:23 764

原创 订阅区块,部署合约,加载合约

Go语言与以太坊网络交互的方法,重点讲解了区块订阅、智能合约部署和加载的操作流程。主要内容包括:1. 通过WebSocket订阅新区块,获取区块头信息并查询完整区块内容;2. 使用Solidity编写智能合约,通过solcjs和abigen工具生成Go代码;3. 两种合约部署方式:使用abigen生成的代码或直接发送交易数据;4. 合约加载方法,包括通过Go代码和Remix在线IDE工具;5. 提供了完整的代码示例和Remix操作步骤。这些内容涵盖了从基础连接到智能合约开发部署的全流程,为以太

2025-07-30 23:22:36 900

原创 查询账户余额

以太坊账户余额查询方法,包括ETH余额和ERC20代币余额的查询。对于ETH余额,使用BalanceAt方法可查询指定区块高度的余额,PendingBalanceAt可查询待处理余额。查询结果以wei单位返回,需要除以10^18转换为ETH。对于代币余额查询,需要先获取代币合约地址和ABI接口,通过BalanceOf方法查询指定地址的代币余额,并利用decimals值进行单位转换。文章提供了完整的Go代码示例,展示了如何连接以太坊节点、查询余额并进行单位转换。

2025-07-30 20:33:18 497

原创 本地安装 SQLite 的详细步骤

依赖 C 语言编译工具链,Windows 系统需要安装。输出应显示 SQLite 版本号(如。,说明环境变量设置未生效,重新执行。在go中使用sqlite。

2025-07-29 16:41:39 898

原创 Gorm教程 - 关联

嵌套预加载。

2025-07-25 15:34:35 923

原创 Gorm教程 - 入门

安装配合goland编辑器使用uintstringuint8*string*time.TimeCreatedAtUpdatedAt。

2025-07-25 14:48:36 683

原创 并发-goroutine与channel,select关键字

但是goroutine不是通常理解的线程,线程是操作系统调度的,在Go中,想让某个任务并发或者异步执行,只需把任务封装为一个函数或闭包,交给goroutine执行即可。select语义是和channel绑定在一起使用的,select可以实现从多个channel收发数据,可以使得一个goroutine就可以处理多个channel的通信。在Go中,当需要goroutine之间协作地方,更常见的方式是使用channel,而不是sync包中的Mutex或RWMutex的互斥锁。2.分发任务,每个任务都是一个数据。

2025-07-24 10:00:38 251

原创 go类型转换和interface

当需要把字符串转换成无符号数字时,目前只能转换成 uint64 类型,需要其他位的数字类型需要从 uint64 类型转到所需的数字类型。同时可以看到当使用 ParseUint 方法把字符串转换成数字时,或者使用 Formatuint 方法把数字转换成字符串时,都需要提供第二个参数 base ,这个参数表示的是数字的进制,即标识字符串输出或输入的数字进制。而在Go中实现一个接口也不需要显式的声明,只需要其他类型实现了接口中所有的方法,就是实现了这个接口。接口中声明的方法,参数可以没有名称。

2025-07-15 21:05:18 339

原创 go 中的range迭代

那么也就是说,在Go中,遍历字符串时,实际上是在遍历从字符串转换来的rune切片,只是恰好在某些时候,字符串转换成byte切片和字符串转换成rune切片之后的长度相同,看起来是在逐个遍历byte切一样。在Go中,使用range关键字迭代映射集合时,一种是拿到key,一种是拿到key和value,并且range关键字在迭代映射集合时,其中的key是乱序的。在Go中,string类型是一个比较特殊的类型,可以与rune切片类型、bvte切片类型相互转换,同时还可以使用range关键字来遍历一个字符串。

2025-07-14 21:48:57 255

原创 go 切片和map集合

在Go中,map集合是无序的键值对集合,相比切片和数组,map集合对索引的自定义程度更高,可以使用任意类型作为索引,也可以存储任意类型的数据。当 append()函数触发扩容后,实际上是新创建了一个数组实例,把原来的数组中的数据复制到了新数组中,然后创建一个新的切片实例并返回。这时原始切片中持有的数组指针指向的数组与新切片引用中的数组指针指向的数组是两个不同的数组,修改并不会相互影响。但是map集合中,存储的键值对的顺序是不确定的,当获取map集合中的值时,如果键不存在,则返回类型的零值。

2025-07-14 21:08:23 415

原创 go 数组

数组元素通过索引(下标)来读取或修改,索引从0开始,第一个元素索引为0,第二个索引为1,以此类推,最后一个元素索引为数组的长度-1。数据是具有相同类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的基础数据类型、自定义类型、指针以及其他数据结构。数祖的部分特性类似基础数据类型,当数组作为参数传递时,在函数中并不能改变外部实参的值。如果想要修改外部实参的值,需要把数组的指针作为参数传递给函数。声明方式4,在已指定数组长度的情况下,对指定下标的元素初始化。方式1,使用下标读取数组中的元素。

2025-07-13 21:04:26 366

原创 go的函数、闭包与方法,变量的作用域

有一种比较特殊的情况,即当全局变量和局部变量重名时,函数内会使用局部变量,超出局部变量作用域之后,才会重新使用全局变量。比较特殊的是if语句、for语句、switch语句、select语句、医名代码块中声明的变量,它们一般比在函数内声明的变量作用域范围更小,仅在小的代码块内有效。闭包,也被称为匿名函数,顾名思义,即没有函数名,通常在函数内或者方法内定义,或者作为参数、返回值进行传。与函数相比,方法是一个包含接受者的函数,大部分情况下可以通过类型的实例调用。在函数内声明的变量,作用域范围只在函数体内。

2025-07-13 19:16:33 250

原创 go流程控制,循环控制

默认情况下case分支自带break效果,无需在每个case中声明break,中断匹配。一般goto语句会配合条件语句使用,实现条件转移,构成循环,跳出循环的功能。if/else 语句还可以在布尔表达式之前额外增加声明赋值语句,来声明作用域仅在当前if作用域内的变量。一般不推荐使用goto语句,goto语句会增加代码流程的混乱,不容易理解代码和调试程序。continue语句不是中断循环,而是跳过当前循环的执行,并开始执行下一次循环语句。continue语句类似break语句,但是仅能在循环中使用。

2025-07-13 16:18:42 373

原创 go常量和枚举,算数运算符

除了上面的别名类型来声明枚举类型以外,还可以使用iota关键字,来自动为常量赋值。另外,自增与自减只能以<var name>++或者<var name>-- 的模式声明,并且只能单独存在,不能在自增或自减的同时做加减乘除的计算。如果iota定义在const定义组中的第n行,那么iota的值为n-1。由于常量的值是在编译期确定的,所以常量定义时必须赋值,并且不能使用方法的返回值为常量赋值。Go中没有内置枚举类型,所以Go中的枚举是使用const来定义枚举的。使用iota关键字就是为了方便我们定义常量的值。

2025-07-13 13:54:28 393

原创 go指针+结构体

注1:指针也是有零值的,它的零值是nil。如果只是声明一个指针,`varp*<type>',那么这个指针就是ni,是不能通过这个指针获取数据的,必须对这个指针赋值之后,才可以访问指针指向的值。不属于相同的包就访问不到了。因为执行值接受者方法时,会创建一个实例的副本,会占用比较大的栈空间,即使栈空间的清理很容易,但在一些资源受限的平台上运行,可能会导致内存爆掉,而被系统强制杀死进程。当对“p重新赋值时,修改的是其指向的内存区域中的数据,所以不管是修改"p的值还是””pp的值,最终都会让变量a的值被修改。

2025-07-13 12:53:20 826

原创 go学习变量

全局变量和局部变量都支持一次声明和定义多个变量。在函数内或方法内定义的变量叫做局部变量。在Go中,变量主要分为两类:全局变量、局部变量。

2025-07-13 11:01:55 184

原创 Golang开发

程序会优先加载main包下的文件,然后根据引用包声明,逐个加载声明的引用包,而在加载这些包时,会再次加载包中声明的引用包,最终加载到最底层的包,并按照顺序初始化最底层包:常量 ->变量 ->init函数。但rune是特殊的整数类型。byte是类型uint8的别名,用于存放1字节的 ASCII 字符,比如英文字符、数字等,返回的是字符的原始字节。rune是类型int32的别名,用于存放多字节字符,比如占3字节的中文字符,返回的是Unicode码点值。在Go中,字符串是由单个字节组成的不可修改的字节序列。

2025-07-12 21:16:54 705

原创 Solidity进阶

但如果某一个函数在多个继承的合约里都存在,在子合约里必须重写 ,并且 override 关键字后面要加上所有父合约名字,例如 override(ParentA, ParentB)。当我们调用智能合约时,本质上是向目标合约发送了一个 msg,其中 msg.data 的前 4个字节为函数选择器selector,其余字节为输入的参数的 abi 编码。通过 using A for B 指令,库合约 A 中的函数会变成 B类型变量的成员函数,在调用的时候,这个变量会被当作第一个参数传递给函数;

2025-07-12 14:30:35 904

原创 Solidity 入门

以太坊协议规定了一种运行在以太坊虚拟机之上的字节码,并在其之上构建了中间语言 Yul/Yul+,在中间语言之上再次构建了 Solidty 等高级语言,高级语言面向前端用户降低智能合约的开发难度。Remix 是以太坊官方推荐的智能合约集成开发环境(IDE),适合新手,可以在浏览器中快速开发和部署合约,无需在本地安装任何程序。以太坊的智能合约,就是一组存活在合约账户中的代码和状态存储,它由交易触发,并根据自身的代码在以太坊虚拟机中执行。消耗gas的性价比和价格比较划算,使用 索引会消耗更多的gas。

2025-07-12 10:46:45 173

原创 discard long time none received connection. , jdbcUrl.......

在druid中,日志输出报错discard long time none received connection. , jdbcUrl...........的信息,但是对我们使用不会有影响,只是会影响性能,但作为强迫症的我,怎么会忍心看着这个ERROR呢?解决办法:如果是配置文件shardingsphere: enabled: true # 是否启用sharding,不启用时使用datasource配置的数据源 datasource: names: master,s...

2021-08-06 14:25:23 14662 1

原创 并发编程基础和原理

1.了解多线程的意义和使用1.1.什么是进程?什么是线程?进程:是一个正在执行中的程序 每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。我们打开电脑上的qq时,点击qq.exe,电脑就会运行一个qq的程序,这个程序就叫做进程。线程:是进程中的一个控制单元线程控制着进程的执行。当qq运行后, 我们可能会使用qq来打开多个聊天窗口进行聊天,那么每一个聊天窗口就算是一个线程。所以说,进程可以包括很多的线程。两者关系: 一个进程至少有一个线程,一个进程可以.

2021-08-05 15:07:15 255

原创 sharding+druid 读写分离

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 它与NoSQL和

2021-07-28 17:37:58 1529

原创 图片出现403

前端返回一个网址,直接浏览器打开没问题,但是src访问这个网址获取图片,显示会出现403(防止盗链)的错误,或者是不在src的路径里面显示,复制路径后会在有浏览器却可以显示处理方法一使用no-referrer在头部使用<meta name="referrer" content="no-referrer" />开防盗链后,好多图片都挂了,加这个标签就可以在标签里面使用<!-- a标签的referrer --><a href="http..

2021-07-08 16:07:45 288

原创 IDEA 如何搭建python环境

首先打开idea首先是file->setting然后点击Plugins然后在Marketplace里面搜索python然后点击Installed最后再重启一下IDEA

2021-07-08 15:51:04 814

原创 Bootstrap-table方法之:showColumn/hideCoulumn显示或隐藏指定数据

最近公司要求比较恶心,为什么这么说呢,给我一个前端的需求来让我做,却是很难,也很恶心,而且我也找了公司前端的高手,最后还是解决了.接下来说一下我是怎么做的。需求就是我的展示列表是有一些是默认选中的,不让勾选:如图:然后就是js代码解决问题 onColumnSwitch: function (field, checked) { $('.dropdown-menu .dropdown-item').each((index,item)=>{ ..

2021-07-07 16:39:17 1842 1

原创 七大设计原则

1.1 开闭原则开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块和函数应该对扩展开放, 对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实 现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原 则。它指导我们如何建立稳定灵活的系统,例如:我们版本更新,我尽可能不修改源代码,但是可以增 加新功能。 在现实生活中对于开闭原则也有体现。比如,很多互联网公司都实行弹性制作息时间,规定每天工 作

2021-06-27 14:34:02 190

原创 RabbitMQ最新面试题和 七种队列模式应用场景(2021版)

RabbitMQ简介AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的,消息中间件;可以用它来:解耦、异步、削峰。异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。流量削锋

2021-06-27 13:57:31 807

翻译 SpringBoot 过滤器、拦截器、监听器对比及使用场景

一:关系图理解:二:区别 1:过滤器 过滤器是在web应用启动的时候初始化一次, 在web应用停止的时候销毁 可以对请求的URL进行过滤, 对敏感词过滤 挡在拦截器的外层 实现的是 javax.servlet.Filter 接口 ,是 Servlet 规范的一部分 在请求进入容器后,但在进入servlet之前进行预处理,请求结束是在servlet处理完以后 依赖Web容器 ...

2021-06-27 10:17:08 242

原创 Node 安装以及解决不是内部命令解决办法

1.首先安装好Node本机环境:Windows 10 专业版 x64Node.js 官方网站下载:https://nodejs.org/en/2.安装打开安装,傻瓜式下一步即可:选择安装位置,我这里装在D:\Program Files盘下:最后安装成功,文件夹结构如下,并在上面安装过程中已自动配置了环境变量和安装好了npm包,此时可以执行 node -v 和 npm -v 分别查看node和npm的版本号:在node.js安装目录下新建两个文件

2021-06-24 17:37:26 1476

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除