灬倪先森_
码龄8年
求更新 关注
提问 私信
  • 博客:308,272
    社区:32
    问答:73
    308,377
    总访问量
  • 90
    原创
  • 93
    粉丝
  • 24
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:四川省
加入CSDN时间: 2017-09-08

个人简介:区块链相关开发经验2年多的程序猿,区块链技术是一样信仰,我坚信终有一天它会变大,变强.

博客简介:

Lyon_Nee的博客

查看详细资料
个人成就
  • 获得164次点赞
  • 内容获得123次评论
  • 获得491次收藏
  • 代码片获得28,393次分享
  • 博客总排名1,846,541名
创作历程
  • 10篇
    2022年
  • 46篇
    2021年
  • 20篇
    2020年
  • 6篇
    2019年
  • 8篇
    2018年
  • 5篇
    2017年
成就勋章
TA的专栏
  • IPFS(星际文件系统)
    2篇
  • Redis实战
  • Hyperledger Fabric(超级账本)
    1篇
  • Quorum
    8篇
  • Windows疑难杂症
    2篇
  • 软件开发基础
    14篇
  • 设计模式
    9篇
  • 数据结构与算法
    2篇
  • 计算机网络协议
    12篇
  • Ethereum(以太坊)
    12篇
  • 区块链开发
    23篇
  • Golang开发
    25篇
  • Docker实战
    13篇
  • Linux的应用与维护
    10篇
  • .Net Core
    4篇
  • Unity3d开发
    7篇

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 5

TA参与的活动 1

兴趣领域 设置
  • 后端
    golang架构
  • 云原生
    微服务
  • 区块链
    区块链智能合约
创作活动更多

王者杯·14天创作挑战营·第2期

这是一个以写作博客为目的的创作活动,旨在鼓励码龄大于4年的博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。 注: 1、参赛者可以进入活动群进行交流、分享创作心得,互相鼓励与支持(开卷),答疑及活动群请见https://bbs.csdn.net/topics/619735097 2、文章质量分查询:https://www.csdn.net/qc 我们诚挚邀请你们参加为期14天的创作挑战赛!

60人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

基于Hardhat编写合约测试用例

为智能合约编写自动化测试至关重要,毕竟写智能合约多多少少都会跟用户资金挂钩。这里假设自己正在开发一个NFT交易平台,这个平台可以让用户售卖自己的NFT,包括ERC721和ERC1155,并且用户可以指定购买者需要支付指定的购买。我们先确定自己的测试功能和目标,为了文章篇幅不要太长,我们就以卖家用户调用,创建售卖订单功能为目标做测试。我们需要4个合约文件:前三种合约最简单的,我们不需要自己再去实现,直接引用Openzeppelin的合约代码即可。在目录下创建一个新的文件,并且把下面的代码粘贴进去这样需要
原创
发布博客 2022.07.01 ·
4523 阅读 ·
2 点赞 ·
0 评论 ·
7 收藏

基于 Openzeppelin 的可升级合约解决方案的注意事项

在编写可升级合约时请不要使用构造函数,我们知道可升级合约运行时逻辑与数据分离的,合约数据保存在中,我们编写的合约是,当合约部署时,调用初始化的数据是的,中的数据并没有被初始化,所以是无效的。包括声明时赋值初始值,因为这种做法相当于在构造函数中设置这些值。如果MyContract继承自合约 BaseContract, 那么BaseContract合约的初始化函数 initialize() 的modifier(修饰器) 必须使用 onlyInitializing,比如:声明状态变量声明状态变量时,不能对
原创
发布博客 2022.07.01 ·
1159 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

可升级合约的原理-DelegateCall

在介绍时,我们需要带上方法一起介绍,并做对比。先说概念吧!DelegateCall:有一种特殊类型的消息调用,被称为 。它和一般的消息调用()的区别在于,目标地址的代码将在发起调用的合约的上下文中执行,并且 和 不变。 这意味着一个合约可以在运行时从另外一个地址动态加载代码。我不喜欢一上来就讲概念,毕竟太难理解。还是上代码演示吧Remix IDE:Remix是基于浏览器的 IDE,集成了编译器和 Solidity 运行时环境,不需要服务端组件,支持网页在线编写、部署和测试智能合约。本章主要是让大家快
原创
发布博客 2022.06.30 ·
1200 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

基于Hardhat和Openzeppelin开发可升级合约(二)

在本章我将开始介绍和演示 基于 Openzeppelin 的基础可升级合约解决方案根据设计,智能合约是不可变的。但随着新的客户需求和产品设计的升级迭代,合约也需要升级。Openzeppelin 的基础可升级合约解决方案是将合约数据与逻辑分离。编码修改合约文件基于上一章中的项目进行修改, 所以这里还是修改 合约文件这里我们需要引用Openzeppelin的可升级合约库@openzeppelin/contracts-upgradeable这里我们做了两件事:需要重点说明了的是,在可升级合约中,不能使
原创
发布博客 2022.06.29 ·
4656 阅读 ·
3 点赞 ·
6 评论 ·
3 收藏

基于Hardhat和Openzeppelin开发可升级合约(一)

本章主要演示通过使用Hardhat框架快速开发普通合约(不可升级),在本地节点部署,并通过控制台与合约进行交互。希望通过这篇文章能让读者快速上手Hardhat框架可升级版合约将在下一章节开始等待 npm 拉取依赖完成即可不可升级合约我希望通过开发不可合约来让读者熟悉基于Hardhat的开发流程, 并可以在编写可升级合约时做对比添加如下合约代码我们假设这是我们开发的一个错误的合约, 因为我们在设置新的 storageValue 数值时, 多了 +1(这是为了演示的可以为之).我们先通过使用Har
原创
发布博客 2022.06.29 ·
917 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

简介智能合约开发框架-Hardhat

智能合约开发框架-Hardhat​简介Hardhat是一个编译、部署、测试和调试以太坊应用的开发环境。Hardhat内置了Hardhat网络,这是一个专为开发设计的本地以太坊网络。主要功能有Solidity调试,跟踪调用堆栈、 console.log() 和交易失败时的明确错误信息提示等。环境node.jspython安装npm install --global --production windows-build-toolsnpm install -g hardhat生成项目
原创
发布博客 2022.04.26 ·
6884 阅读 ·
0 点赞 ·
0 评论 ·
8 收藏

Ubuntu部署 Blockscout 区块链浏览器流程

Ubuntu部署 Blockscout 区块链浏览器流程
原创
发布博客 2022.04.15 ·
7047 阅读 ·
5 点赞 ·
9 评论 ·
7 收藏

Ubuntu(18,20,21)多版本docker & docker compose的快速安装

Ubuntu(18,20,21)多版本docker & docker compose的快速安装
原创
发布博客 2022.04.14 ·
1361 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

Windows Docker 配置国内镜像源的两种方法

WIndows Docker配置国内镜像源的两种方法
原创
发布博客 2022.04.14 ·
85737 阅读 ·
67 点赞 ·
4 评论 ·
150 收藏

Git常用命令

Git常用命令
原创
发布博客 2022.03.29 ·
309 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Golang与设计模式-Abstract Factory抽象工厂模式

Abstract Factory抽象工厂模式是一种创建型设计模式。抽象工厂模式和 Factory工厂方法模式一样,都符合开闭原则。但是不同的是,工厂方法模式在增加一个具体产品的时候,都要增加对应的工厂。但是抽象工厂模式只有在新增一个类型的具体产品时才需要新增工厂。场景本文将以电子工厂生产电子产品为例来演示抽象工厂模式。我们会定义两种类型的产品手机Phone 和平板电脑 Pad,以及两个不同品牌的生产厂商苹果和华为。基本类型和接口首先定义手机接口Phone,以及一个打电话的方法Call()
原创
发布博客 2021.08.18 ·
334 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Golang与设计模式-Builder建造者模式

Builder建造者模式也是一种创建型设计模式,建造者模式就是把一个复杂的对象分成多个简单的对象,然后对这些简单的对象一步步进行构建,从而组成了一个复杂的对象。建造者模式种有三个角色:建造者(Builder)负责定义生成实例的接口 具体建造者(ConcreteBuilder)实现了Builder接口,定义生成实例时被调用的方法 指挥者(Director)负责使用Builder接口生成实例。它不依赖ConcreteBuilder场景本文内容我们就拿组装电脑为例,因为电脑就是由多个组件组成,且
原创
发布博客 2021.08.18 ·
1077 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

C#程序员发展方向,开始迷茫了

答:

如果对游戏有兴趣可以看看Unity3D,C#为脚本语言对于有基础的你上手会很快啊。学Unity3D可以百度SIKI的课程很好。
再者C#基本都是做 .Net的开发了

回答问题 2021.08.12

Golang与设计模式-Prototype原型模式

原型模式其实就是根据实例的原型生成新的实例的一种创建性设计模式。使你能够复制对象,甚至是复杂对象,而又无需使代码依赖它们所属的类。典型的应用就是依赖注入,做过.Net 和 Java开发的小伙伴应该对此很熟悉。go也有依赖注入框架场景本期场景就很简单了,我们实现了一个简单的依赖注入模型。基础类型和接口这是原型接口,需要实现依赖注入的实例必须实现这个接口// 产品接口(原型接口)type Product interface { // 用于演示的方法 Use() // 克隆方..
原创
发布博客 2021.08.11 ·
377 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Golang与设计模式-Singleton单例模式

单例模式是我们工作中最长用到的设计模式之一,单例模式也是创建型设计模式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。通过单例模式可以保证系统中一个类只有一个实例且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。单例模式一般分为两种实现方式:懒汉模式和饿汉模式饿汉模式表示程序在初始化阶段或使用前已创建出了一个实例,在程序后面的生命生命周期内将不再创建// 声明
原创
发布博客 2021.08.10 ·
478 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

TCP协议可以提供可靠的数据流传输服务。

答:

当然是对的。
TCP是网络层协议,与之对应的UDP协议则不保证可靠传输

回答问题 2021.08.10

Golang与设计模式-Factory工厂模式

工厂模式是创建型设计模式,在工厂模式中,父类决定实例的生成方式,但并不决定所生成的具体的类,具体的处理全部交给子类负责。工厂模式是使用Template模版模式来构建生成实例的工厂。这也是为什么我们要先学习模版模式的原因,而不像其他博主按照设计模式的类型划分后一类一类的学习。场景本期我们以一个制作身份证(IDCard)的程序来演示工厂模式。基础类型和接口老规矩,先定义基础类型和抽象接口。首先我们先定义一个工厂接口Factory,并定义了3个方法,分别是对外公开生成实例的Create()
原创
发布博客 2021.08.09 ·
604 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Golang与设计模式-Template Mode模版模式

模版模式的核心思想就是在弗雷中定义处理流程的框架,在子类种实现具体处理。了解了设计模式的核心思想,那么我们就可以按照这个想法去实现一个事例来演示一下模版模式的使用场景跟方法。场景我们可以模拟一个完成的手机操作流程,从解锁 -> 打开微信发起转账给老婆 -> 支付验证,我们可以对这一系列操作合并在一起叫 微信转账。而IPhone7跟IPhone12的操作是有差别的,我们知道IPhone7是可以用TouchID解锁手机和微信支付验证的,而IPhone12用的是FaceID来完成解锁手机跟
原创
发布博客 2021.08.08 ·
426 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Golang与设计模式-Adapter适配器模式

适配器模式是我们在工作中会经常使用到的模式。比如对接口升级的同时,又要保证对旧借口的兼容。场景生活中我们会遇到这种情况,我们常用的插线板三插孔(10A)与空调插头(16A)的大小不一样,虽然都是三插孔。当我们买了空调,安装时发现空调插头并不能插入我们原有(10A)的插孔时,我们可以买一个插头转换器,如下图。我们可以把10A的反面插头插入我们正常的10A三插孔,再将空调的插头插入正面的16A三插孔即可。这里,我们的插头转换器扮演的就是 适配器(Adapter)的角色。接下来我会以这个插头.
原创
发布博客 2021.08.08 ·
559 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

Golang与设计模式-Iterator迭代器模式

迭代器模式在Java和C#中常用到的设计模式,这种模式主要用于对于集合(Aggregate)的有序访问。一般情况下Golang的开发中是不需要使用到的,像Slice跟Array都可以通过for...range...来完成遍历。但不是说一定就用不上哦。接口首先,我们知道迭代器模式主要适用于数据集合,那么我们就可以定义一个集合(Aggregate)接口,这个接口只有一个方法,就是返回给我们一个迭代器(Iterator)。// 集合接口type Aggregate interface { /
原创
发布博客 2021.08.07 ·
1231 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏
加载更多