自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式事务【SAGA事务模式】

SAGA事务模式是DTM中最常用的模式,主要是因为SAGA模式简单易用,工作量少,并且能够解决绝大部分业务的需求。dtm 的SAGA模式与Seata的SAGA在设计理念上是不一样的,整体使用难度大幅度降低,非常容易上手SAGA最初出现在1987年Hector Garcaa-Molrna & Kenneth Sale...

2023-05-27 18:44:27 1273

原创 Solidity实现默克尔树 Merkle Tree

​​Merkle Tree​​​,也叫默克尔树或哈希树,是区块链的底层加密技术,被BTC和Ethereum区块链广泛采用。​​Merkle Tree​​​是一种自下而上构建的加密树,每个叶子是对应数据的哈希,而每个非叶子为它的​​2​​个子节点的哈希。​​Merkle Tree​​允许对大型数据结构的内容进行有效和安全的验...

2023-03-12 23:38:57 1198

原创 web3分布式存储平台Pinata、Arweave、nft.storage和Filebase比较

PinataPinata是一个去中心化的文件存储平台,为开发人员和企业提供了稳定、安全、高效的文件存储和分发服务。Pinata的主要特点包括:去中心化存储:Pinata使用了IPFS(InterPlanetary File System)协议,将文件存储在去中心化网络中,确保数据的分散性和安全性。稳定可靠:Pinata使用...

2023-03-11 01:15:01 1528

原创 Solidity极简入门#30. Try Catch

try-catch是现代编程语言几乎都有的处理异常的一种标准方式,solidity0.6版本也添加了它。这一讲,我们将介绍如何利用try-catch处理智能合约中的异常。try-catch在solidity中,try-catch只能被用于external函数或创建合约时constructor(被视为external函数)的...

2023-03-10 12:40:04 514

原创 Solidity极简入门#26. 删除合约

selfdestruct是智能合约的紧急按钮,销毁合约并将剩余ETH转移到指定账户。当著名的The DAO攻击发生时,以太坊的创始人们一定后悔过没有在合约里加入selfdestruct来停止黑客的攻击吧。

2023-03-09 00:52:57 561

原创 Solidity极简入门#29. 函数选择器Selector

method id定义为函数签名的Keccak哈希后的前4个字节,当selector与method id相匹配时,即表示调用该函数,那么函数签名是什么?其实在第21讲中,我们简单介绍了函数签名,为"函数名(逗号分隔的参数类型)"。这一讲,我们介绍了什么是函数选择器(selector),它和msg.data、函数签名的关系,以及如何使用它调用目标函数。在同一个智能合约中,不同的函数有不同的函数签名,因此我们可以通过函数签名来确定要调用哪个函数。我们写一个函数,来验证mint函数的method id是否为​。

2023-03-09 00:29:48 704

原创 Solidity极简入门#28. Hash

哈希函数(hash function)是一个密码学概念,它可以将任意长度的消息转换为一个固定长度的值,这个值也称作哈希(hash)。这一讲,我们简单介绍一下哈希函数及在solidity的应用Hash的性质一个好的哈希函数应该具有以下几个特性:单向性:从输入的消息到它的哈希的正向运算简单且唯一确定,而反过来非常难,只能靠暴力...

2023-03-03 04:45:04 1710

原创 Solidity极简入门#27. ABI编码解码

当你想省空间,并且不与合约交互的时候,可以使用abi.encodePacked,例如算一些数据的hash时。ABI被设计出来跟智能合约交互,他将每个参数填充为32字节的数据,并拼接在一起。abi.decode用于解码abi.encode生成的二进制编码,将它还原成原本的参数。​功能类似,只不过第一个参数为函数选择器,为函数签名Keccak哈希的前4个字节。​,用于解码abi.encode的数据。​对编码进行了压缩,长度比abi.encode短很多。​功能类似,只不过第一个参数为函数签名,比如"​。

2023-03-02 20:15:05 1425

原创 Solidity极简入门#25. Create2创建合约

这一讲,我们介绍了CREATE2操作码的原理,使用方法,并用它完成了极简版的Uniswap并提前计算Pair合约地址。CREATE2让我们可以在部署合约前确定它的合约地址,这也是 一些layer2项目的基础。

2023-03-02 20:12:06 1404 3

原创 Solidity极简入门#24. 在合约中创建新合约

在Ethereum链上,用户(外部账户,EOA)可以创建智能合约,智能合约同样也可以创建新的智能合约。这一讲,我会用简化版的uniswap讲如何通过合约创建合约。其中Contract是要创建的合约名,x是合约对象(地址),如果构造函数是payable,可以创建时转入_value数量的ETH,params是新合约构造函数的参数。下面我们用create方法实现一个极简版的Uniswap:Pair币对合约负责管理币对地址,PairFactory工厂合约用于创建新的币对,并管理币对地址。2.查看Pair合约变量。

2023-02-28 02:35:01 563

原创 Solidity极简入门#23.代理合约Delegatecall

与上面的callSetVars函数相同,有两个参数_addr和_num,分别对应合约C的地址和setVars的参数。而当用户A通过合约B来delegatecall合约C的时候,执行的是合约C的函数,但是语境仍是合约B的:msg.sender是A的地址,并且如果函数改变一些状态变量,产生的效果会作用于合约B的变量上。执行的是VC的函数,但是改变的是富商的状态。当用户A通过合约B来call合约C的时候,执行的是合约C的函数,语境(Context,可以理解为包含变量和状态的环境)也是合约C的:​。

2023-02-25 03:52:47 848

原创 Solidity极简入门#19. 接收ETH

这一讲,我介绍了Solidity中的两种特殊函数,receive()和fallback(),他们主要在两种情况下被使用,他们主要用于处理接收ETH和代理合约proxy contract。

2023-02-24 01:15:04 542

原创 Solidity极简入门#22. Call

我们曾在第20讲:发送ETH那一讲介绍过利用call来发送ETH,这一讲我们将介绍如何利用它调用合约。Callcall 是address类型的低级成员函数,它用来与其他合约交互。它的返回值为(bool, data),分别对应call是否成功以及目标函数的返回值。call是solidity官方推荐的通过触发fallback或...

2023-02-24 01:09:22 363

原创 Solidity极简入门#20. 发送ETH

这一讲,我们介绍solidity三种发送ETH的方法:transfer,send和call。call没有gas限制,最为灵活,是最提倡的方法;transfer有2300 gas限制,但是发送失败会自动revert交易,是次优选择;send有2300 gas限制,而且发送失败不会自动revert交易,几乎没有人用它。

2023-02-22 17:07:57 666

原创 Solidity极简入门#21. 调用其他合约

调用已部署合约开发者写智能合约来调用其他合约,这让Ethereum网络上的程序可以复用,从而建立繁荣的生态。很多web3项目依赖于调用其他合约,比如收益农场(yield farming)。这一讲,我们介绍如何在已知合约代码(或接口)和地址情况下调用目标合约的函数。目标合约我们先写一个简单的合约OtherContract来调...

2023-02-22 17:05:31 1168

原创 Solidity极简入门#18. Import

这一讲,我们介绍了利用import关键字导入外部源代码的方法。通过import关键字,可以引用我们写的其他文件中的合约或者函数,也可以直接导入别人写好的代码,非常方便。solidity支持利用import关键字导入其他源代码中的合约,让开发更加模块化。

2023-02-19 01:17:35 522

原创 Solidity极简入门#15. 异常

这一讲,我们介绍solidity三种抛出异常的方法:error,require和assert,并比较了三种方法的gas消耗。结论:error既可以告知用户抛出异常的原因,又能省gas。

2023-02-17 21:53:33 341

原创 Solidity极简入门#14. 抽象合约和接口

这一讲,我介绍了solidity中的抽象合约(abstract)和接口(interface),他们都可以写模版并且减少代码冗余。我们还讲了ERC721接口合约IERC721,以及如何利用它与无聊猿BAYC合约进行交互。

2023-02-17 21:50:54 1057

原创 Solidity极简入门#13. 继承

这一讲,我们介绍了solidity继承的基本用法,包括简单继承,多重继承,修饰器和构造函数的继承、调用父合约中的函数,以及多重继承中的菱形继承问题。

2023-02-17 21:50:50 1870

原创 Solidity极简入门#17. 库合约

这一讲,我们用ERC721的引用的库合约String为例介绍solidity中的库合约(library),并总结了常用的库函数。库函数库函数是一种特殊的合约,为了提升solidity代码的复用性和减少gas而存在。库合约一般都是一些好用的函数合集(库函数),由大神或者项目方创作,咱们站在巨人的肩膀上,会用就行了。他和普通合...

2023-02-17 21:45:51 483

原创 Solidity极简入门#16. 函数重载

重载​​solidity​​中允许函数进行重载(​​overloading​​),即名字相同但输入参数类型不同的函数可以同时存在,他们被视为不同的函数。注意,​​solidity​​不允许修饰器(​​modifier​​)重载。函数重载举个例子,我们可以定义两个都叫saySomething()的函数,一个没有任何参数,输出...

2023-02-15 01:25:35 366

原创 Solidity极简入门#12. 事件

这一讲,我们用转账ERC20代币为例来介绍solidity中的事件(event)。事件Solidity中的事件(event)是EVM上日志的抽象,它具有两个特点:响应:应用程序(​​ethers.js​​)可以通过RPC接口订阅和监听这些事件,并在前端做响应。经济:事件是EVM上比较经济的存储数据的方式,每个大概消耗2,0...

2023-02-10 01:36:55 371

原创 Solidity极简入门#11. 构造函数和修饰器

这一讲,我们将用合约权限控制(Ownable)的例子介绍solidity语言中构造函数(constructor)和独有的修饰器(modifier)。构造函数构造函数(constructor)是一种特殊的函数,每个合约可以定义一个,并在部署合约的时候自动运行一次。它可以用来初始化合约的一些参数,例如初始化合约的owner地址...

2023-02-09 21:53:21 622

原创 Solidity极简入门#10. 控制流

这一讲,我们将介绍solidity中的控制流,然后讲如何用solidity实现插入排序(InsertionSort),一个看起来简单,但实际上很容易写出bug的程序。控制流Solidity的控制流与其他语言类似,主要包含以下几种:if-elsefunction ifElseTest(uint256 _number) pub...

2023-02-06 00:23:55 266

原创 Solidity极简入门#9. 常数

这一讲,我们介绍solidity中两个关键字,constant(常量)和immutable(不变量)。并且还可以节省gas。你可以使用全局变量例如address(this),block.number ,或者自定义的函数给immutable变量初始化。这一讲,我们介绍solidity中两个关键字,constant(常量)和immutable(不变量),让不应该变的变量保持不变。constant变量必须在声明的时候初始化,之后再也不能改变。immutable变量可以在声明时或构造函数中初始化,因此更加灵活。

2023-02-03 19:09:10 216

原创 Solidity极简入门#3. 函数类型

我刚开始学solidity的时候,一直不理解pure跟view关键字,因为别的语言没有类似的关键字。solidity加入这两个关键字,我认为是因为gas fee。合约的状态变量存储在链上,gas fee很贵,如果不改变链上状态,就不用付gas。包含pure跟view关键字的函数是不改写链上状态的,因此用户直接调用他们是不需要付gas的(合约中非pure/view函数调用它们则会改写链上状态,需要付gas)。在以太坊中,以下语句被视为修改链上状态:写入状态变量。释放事件。创建其他合约。

2023-02-03 19:05:36 390

原创 Solidity极简入门#8. 变量初始值

变量初始值在solidity中,声明但没赋值的变量都有它的初始值或默认值。这一讲,我们将介绍常用变量的初始值。值类型初始值boolean: falsestring: ""int: 0uint: 0enum: 枚举中的第一个元素address: 0x00000000000000000000000000000000000000...

2023-02-01 16:54:49 212

原创 Solidity极简入门#7. 映射类型

这一讲,我们将介绍solidity中的哈希表:映射(Mapping)类型。映射Mapping在映射中,人们可以通过键(Key)来查询对应的值(Value),比如:通过一个人的id来查询他的钱包地址。声明映射的格式为mapping(_KeyType => _ValueType),其中_KeyType和_ValueTyp...

2023-02-01 16:53:54 414

原创 Solidity极简入门#6. 引用类型

这一讲,我们将介绍solidity中的两个重要变量类型:数组(array)和结构体(struct)。数组 array数组(Array)是solidity常用的一种变量类型,用来存储一组数据(整数,字节,地址等等)。数组分为固定长度数组和可变长度数组两种:固定长度数组:在声明时指定数组的长度。用T[k]的格式声明,其中T是元...

2023-01-31 09:31:23 312

原创 Solidity极简入门#5. 变量数据存储和作用域

Solidity中的引用类型引用类型(Reference Type):包括数组(array),结构体(struct)和映射(mapping),这类变量占空间大,赋值时候直接传递地址(类似指针)。由于这类变量比较复杂,占用存储空间大,我们在使用时必须要声明数据存储的位置。数据位置solidity数据存储位置有三类:stora...

2023-01-31 09:26:35 378

原创 Solidity极简入门#4. 函数输出

这一讲,我们将介绍Solidity函数输出,包括:返回多种变量,命名式返回,以及利用解构式赋值读取全部和部分返回值。返回值 return和returnsSolidity有两个关键字与函数输出相关:return和returns,他们的区别在于:returns加在函数名后面,用于声明返回的变量类型及变量名;return用于函数...

2023-01-30 17:10:39 250

原创 Solidity极简入门#2. 数值类型

Solidity中的变量类型数值类型(Value Type):包括布尔型,整数型等等,这类变量赋值时候直接传递数值。引用类型(Reference Type):包括数组和结构体,这类变量占空间大,赋值时候直接传递地址(类似指针)。映射类型(Mapping Type): Solidity里的哈希表。函数类型(Function ...

2023-01-30 16:35:59 276

原创 Solidity极简入门: 1. HelloWeb3 (三行代码)

这一讲,我们简单介绍了solidity,remix工具,并完成了第一个solidity程序--HelloWeb3。下面我们将继续solidity旅程!

2023-01-30 12:10:32 318

原创 Solidity 中编写内联汇编(assembly)

汇编相关知识介绍什么是汇编?任何以高级语言(例如C,Go或Java)编写的程序,在执行之前都将先编译为“汇编语言”。 但是什么是汇编?汇编(也称为汇编语言)是指可使用​​汇编器​​转换为机器代码的低级编程语言。 汇编语言与物理机或虚拟机绑定,因为它们实现了指令集。 一条指令告诉CPU执行一些基本任务,例如将两个数字相加。这...

2023-01-17 16:20:36 696

原创 K8S如何强制删除namespace

我们有时候会遇到 namespace 无法删除的情况是因为 finalizers 属性的原因。2.编辑cert.json文件,将spec内的内容全部删除,然后保存退出。1.将cert-mamaner导出为json文件。4.调用 api 进行删除。3.开启 proxy。5.执行完命令后运行。

2023-01-08 00:33:28 471

原创 Solidity如何优化Gas费用

在区块链中,每一笔智能合约的运行,都要根据复杂度消耗一笔GAS费;如果你要将值写入存储,则需要花费很多。如果你只是使用堆栈,它的成本会低一些;智能合约solidity语言的编写,不仅要考虑安全,也要考虑语言的优化,在Ethereum上的交易gas是有上限的,特别是针对一些复杂业务的处理,有可能会导致gas超高,严重者导致此...

2022-12-22 12:03:22 237

原创 EIP-165:标准接口检测

简单总结创建一个标准方法来发布和检测智能合约实现的接口。抽象的在此,我们标准化以下内容:如何识别接口合约将如何发布它实现的接口如何检测合约是否实现了 ERC-165如何检测合约是否实现了任何给定的接口动机对于一些“标准接口”,如​​ERC-20 接口​​,有时查询合约是否支持该接口以及如果是,接口的版本是有用的,以适应合约...

2022-12-11 01:58:25 245

原创 什么是拜占庭将军问题

接触区块链的同学,多少都听说过拜占庭将军问题,经常看到或听到某某区块链使用某某算法解决了拜占庭将军问题,那么究竟什么是拜占庭将军问题呢?什么是拜占庭将军问题也被称为“拜占庭容错”、“拜占庭将军问题”。拜占庭将军问题是Leslie Lamport(2013年的图灵讲得主)用来为描述分布式系统一致性问题(Distributed...

2022-12-09 00:58:26 144

原创 如何在 Solidity 中生成随机数?

Solidity 中的数字生成是在Solidity 智能合约中创建随机数的过程。这可用于各种目的,例如为对象生成唯一 ID、在游戏中创建随机结果或选择随机参与者进行抽奖。数字生成是 Solidity 的一个重要特性,因为它允许智能合约具有更大的灵活性和功能。要在 Solidity 中生成随机数,请按照以下步骤操作:1. ...

2022-12-09 00:42:50 791

原创 DApp实战:开发属于你的第一个DApp - 我的日记本

项目的视频教程部分已经发布到了b站​​https://space.bilibili.com/391924926/channel/seriesdetail?sid=2745034​​安装依赖库npm 安装 elementUI,web3jsSolidity编写智能合约注意点:删除数组的练习, 我们发现数组元素不会真正删除 只会置为0值1,2,3,5 => 1,2,0,5数组无法直接将某个元素删除,只能从后向前逐个删除。基于这个特性,我需要通过把把元素从右往左移动从而删除元素

2022-12-08 09:45:33 1031

空空如也

空空如也

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

TA关注的人

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