自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

天草降临的博客

个人IT学习

  • 博客(94)
  • 收藏
  • 关注

原创 使用Rust直接编译单个的Solidity合约

直接使用Rust语言编译简单智能合约,移除对hardhat和foundry的中间需求。

2024-09-15 17:40:00 1237 1

原创 Rust常用特型之ToOwned特型

Rust常用特型之ToOwned特型学习

2024-04-20 15:09:19 604 1

原创 Rust常用特型之TryFrom和TryInto特型

Rust常用特型之TryFrom和TryInto特型学习

2024-04-20 15:08:33 853

原创 Rust常用特型之From和Into特型

Rust常用特型之From和Into特型学习

2024-04-20 15:07:48 850

原创 Rust常用特型之Deref和DerefMut特型

Rust常用特型之Deref和DerefMut特型

2024-04-20 15:06:39 1039

原创 Rust常用特型之Sized特型

Rust常用特型之Sized特型

2024-04-20 14:58:42 1323

原创 Rust常用特型之Default特型

Rust常用特型之Default特型学习

2024-04-20 14:52:46 704

原创 Rust常用特型之Borrow和BorrowMut特型

Rust常用特型之Borrow和BorrowMut特型学习

2024-04-20 14:48:59 1298

原创 Rust常用特型之AsRef和AsMut特型

Rust常用特型之AsRef和AsMut特型学习

2024-04-20 14:44:05 1156

原创 Rust常用特型之Clone+Copy特型

标准库的Clone特型意味着实现它的类型可以制作一份值的副本。它有两个函数,其中一个函数有默认实现,因此我们只需要自己实现第一个函数clone()就好,实际上,运用的最多的也是clone()函数。clone()函数会构造自身的独立备份并且返回它。因为该函数的返回类似是Self, 因此函数不可能返回unsized值。这是因为Clone特型本身拓展了Sized特型,因此,实现了Clone特型的类型必须是Sized。克隆一个值通常需要为它所拥有的任何内容重新分配资源,所以克隆在时间和内存上都开销很大。

2024-04-01 11:09:16 1339

原创 Solidity全局变量完全测试

我们知道,在Solidity中有很多全局变量,例如我们最常用的等。等。本着凡事最怕认真两字的原则,虽然繁琐,但我们将所有的全局变量全部测试一遍,学习怎么调用和应用在哪些场景,进一步加深理解与记忆。本文基于Solidity 0.8.9版本与hardhat工具进行,在最新的0.8.13版本增加了两个全局变量与,因当前版本的hardhat暂不支持 Solidity0.8.13,故没有进行这两项测试。另外,有少数项目也不方便测试,期待有人能改进完善测试方法。

2024-03-31 18:33:51 157

原创 UniswapV2周边合约学习(五)-- ExampleFlashSwap.sol

该合约为利用UniswapV2交易对中的FlashSwap的先借后还特性,在买卖资产的同时和UnisapV1交易对进行交易,利用价格差进行arbitrage。

2024-03-31 18:32:50 178

原创 Rust常用特型之Drop特型

Rust语言学习之Drop特型

2024-03-10 15:13:50 1231 1

原创 Solana 代币合约入口程序学习

Solana代币合约源码入口部分代码学习

2024-02-03 00:02:38 1843

原创 Rust学习之Features

Rust中的Cargo Features学习

2024-02-01 12:32:58 1952

原创 GnosisSafe.sol 学习(二)

本文是GnosisSafe合约系列学习中的owner管理模块合约的学习

2022-10-02 22:09:45 2611 1

原创 GnosisSafe.sol 学习 (一)

Gnosis Safe 多签钱包 实现合约学习 一

2022-10-01 17:28:17 3008 1

原创 GnosisSafeProxyFactory合约学习

Gosis Safe 系列之GnosisSafeProxyFactory 合约学习

2022-09-25 20:17:36 1847

原创 GnosisSafeProxy合约学习

Gnosis Safe 中的代理合约 GnosisSafeProxy学习

2022-09-25 15:05:42 2181

原创 Openzeppelin可升级模板库合约初始化详解

本文详细的介绍了 Openzeppelin 代理/实现 模式中合约的初始化流程,并且讲了initializer,initialize,onlyInitializing 这三者的区别

2022-07-07 23:21:30 2194 2

转载 Solidity智能合约单元测试介绍

当前在各种区块链中,生态最全的要属兼容EVM的区块链,在该类区块链上的智能合约绝大部分使用Solidity编写。因此,对Solidity编写的智能合约进行单元测试便成为一项经常性的工作。本文简要的介绍一下怎样使用hardhat进行Solidity智能合约的单元测试。 一、什么是Hardhat 我们来看其官方文档的描述: Hardhat is a development environment to co............

2022-04-24 14:45:27 5975 3

原创 Solidity内嵌汇编学习(二)

学习Solidity内嵌汇编中的数组求和实现

2022-04-24 10:56:18 3303

原创 Solidity内嵌汇编学习(一)

简要学习solidity内联汇编的getCode功能实现。

2022-04-23 22:00:09 4053

原创 Solidity编码简要学习

Solidity编码简要学习solidity中函数编码按参数顺序,但是如果是动态类型,相应位置保存的是该动态类型元素的的起始位置。1、直接使用abi编码代码片断如下:function test2(address[] calldata pairs) external view returns(bytes memory) { uint[] memory pays = new uint[](3); pays[0] = 12345; pays[1] = 678910; pay

2022-03-26 22:19:07 1428 1

原创 Solidity全局变量完全测试

Solidity全局变量完全测试,看完你就明白了。基于Solidity 0.8.9和 hardhat 框架进行单元测试

2022-03-21 13:14:08 5779

原创 一种非常简单的模拟Solidity智能合约交易的方法

一种非常简单的模拟Solidity智能合约交易的方法

2022-03-17 18:34:12 7035

原创 一种压缩Solidity函数参数的方法

当前Solidit合约调用时,会将函数参数进行扩展,填充无用的0至64位长度(32字节)。而我们仍然需要为这些填充的0支付相应gas。当参数很多并且参数的数据类型长度很小时,会造成很大的浪费。本文探索了一种压缩函数参数来节省gas的方法。

2022-02-26 23:44:21 3667

原创 【在Solana中使用固定PDA账号实现管理员权限验证和全局状态变量保存】

在Solana中使用固定PDA账号实现管理员权限验证和全局状态变量保存

2022-01-23 18:32:25 5941 3

原创 Solidity代理/实现模式中实现合约回调函数的使用

我们知道,在Solidity中,合约有一个fallback函数,用于在函数调用时未匹配到相应的函数时调用。我们平常使用的代理/实现模式,正是基于这样一个功能。然而我们还可以在实现合约中继续使用fallback函数,来实现特定功能或者多重实现合约。

2022-01-18 19:25:11 5296

原创 Solana区块链智能合约开发简要流程

本文主要以Solana上知名开发者paulx的教学文章为示例,介绍了开发Solana区块链智能合约的一般流程。

2021-12-22 13:53:07 13828 6

原创 Rust中enum_dispatch简单学习

在阅读别人的源码中,遇到了enum_dispatch这个Crate,那么他到底是做什么的呢?具体又怎么应用呢?在网上查找相应的资料后,大致搞清楚了它的用法 。现在我们就来学一下。参考的文章为:https://crates.io/crates/enum_dispatch该文章中介绍了:enum_dispatch transforms your trait objects into concrete compound types, increasing their method call speed up

2021-12-08 19:16:24 888

原创 使用Rust模拟ethers.js中的parseUnits

我们知道,在同以太坊区块链进行交互的编程语言中,javascript是最便捷的语言,没有之一。但是世界上的语言不只一种,我们有时也需要使用其它语言和以太坊区块链交互,例如Rust。为此,Rust中有一个crate叫web3,它其中有个类型U256来对应Solidity中的uint256。但是它却缺少了两个很常用的功能,就是去除精度后转化为人类易读的浮点数和它的反向操作。例如我们需要将值为500000000000000000精度为18的数显示为0.5等。在ethers.js中,提供了parseUnits和f

2021-12-04 14:06:28 4777 1

原创 Solana中利用Anchor自动解析TokenAccount

在Solana区块链中,绝大多数应用都会涉及到spl-token,因此获取用户账号(TokenAccount)中的信息是一个很常见的需求。而传统的方法直接读取底层数据相关位置的切片转换成所需要的数据,不仅繁琐还容易出错。Anchor 工具定义了几个特型协议,借助该协议可以自动实现数据结构的序列化与反序列化。本文介绍了使用Anchor来自动获取TokenAccount中所有数据的方法。

2021-11-20 14:49:04 6710 1

原创 Solidity示例合约ReceiverPays.sol学习

一、前言最近闲暇起来,打算把Solidity官方文档再看一遍,温故而知新!在看到示例合约微支付通道Micropayment Channel 时,决定动手去亲自实践一次(以前看到这只是看了源码,未真正部署测试)。没有想到,看上去挺简单的ReceiverPays合约却在一个地方卡了很久。以此文章记录这次ReceiverPays合约学习测试的过程,能给读者稍微提供一点点参考就足够了。本文以Solidity v0.8.0文档为阅读版本。Tips:Micropayment Channel 最终完成合约为Sim

2021-08-20 15:44:25 3134 1

原创 浅谈一下UniswapV3中的NFT图像生成

一、NFT与SVG今年打开UniswapV3中的周边合约,突然发现了一个NFTSVG.sol。正好自己以前也有研究过NFT与SVG之间的应用联系,就打开源码大致看了一下,果然如此。我们知道,NFT流行是从以太坊上的加密猫开始的,每个加密猫其实是一个ERC721的token,这个token又对应着一组数据结构,例如猫的主人,猫的眼睛颜色等。但是我们在前端显示的时候,这个猫眼睛到底是什么样子的,是前端图像组合的,也就是你的猫的图像其实是存于它们的网站上。后期有URL,每个token(猫)对应一个url地址,

2021-07-18 21:52:09 7508 5

原创 以太坊从公钥生成地址的具体过程

网上有大量的文章介绍了ECDSA(椭圆曲线加密)算法来生成以太坊公私钥对,进而生成一个唯一的以太坊地址。其中绝大部分都提到了非压缩公钥生成地址时先进行哈希运算,然后取后40位就是地址了。然而绝知此事要躬为。到底怎么哈希的,公钥和私钥的格式是什么,相信很多人和我一样不清楚!笔者因为在研究一个东西,需要顺带弄明白以太坊公钥生成地址的细节流程。笔者首先百度了一下,参考了知乎上面的一篇文章《以太坊的私钥、公钥、地址、账户》 。然而摸索半天之后,得不到文章中列出的结果。最后笔者将文章中的私钥导入到MetaMas.

2021-07-14 20:38:06 5849 9

原创 一种链下绕过非view限制直接读取智能合约某类特殊函数返回结果的技巧

一、前言我们知道,在智能合约中一般分为读取(view/pure)或者写入(改变状态)这两种类型。由于保护数据设置障碍的需要,有时合约开发者并不想别人查看他们的view函数返回值,于是在上面增加了调用者权限限制,更有甚者,故意通过某种技巧(或者是业务需要)将此函数变成非view/pure类型的函数,也就是一个交易。这样线下(前端或者脚本)调用此函数时就是一个交易,是无法直接得到函数返回结果的。在一篇文章《一种绕过管理员权限调用智能合约view函数的小技巧》中,我们介绍了绕过权限控制来读取view函数返回结

2021-06-29 23:42:37 814 4

原创 一种绕过管理员权限调用智能合约view函数的小技巧

在部分以太坊智能合约中,有时可以看到某些view函数被限定了管理员调用,以阻止其它人查看。其实这个限定基本上是无效的,本文介绍一下绕过这个限定调用相应的view函数的小技巧。注意:我们这里仅限view类型的函数(非改变状态的交易)。一、介绍有的时候,智能合约开发者由于需求,会将部分数据设置为私有类型,并且限定了只有管理员才能查看(例如一个随机数的种子,或者管理员地址)。这时我们又想知道这个数据怎么办?正常的函数调用肯定是无法验证调用者地址验证的,这里,我们就得想想办法了,利用ethers.js框架中.

2021-06-27 22:54:14 1302 2

原创 使用ethers.js直接读取智能合约中插槽内容

我在上一篇《代理/实现模式下合约插槽索引计算》中的最后,提到了一个合约示例,(BSC 区块链,地址为:0x4BfE9489937d6C0d7cD6911F1102c25c7CBc1B5A)不知道有没有读者有兴趣去看一下,在那个示例合约中,有一段代码我摘出来:/** * @return adm The admin slot. */ function _admin() internal view returns (address adm) { bytes32 slot = ADMIN_

2021-06-25 23:36:23 1867 1

原创 代理/实现模式下合约插槽索引计算

我们知道,以太坊上的合约具有不可更改特性(代码即法律),那么什么是不可更改呢?其实这是指部署的合约的字节码无法再更改了,但不代表合约的实现逻辑是无法更改的。一、什么是代理/实现模式那么怎么更改合约的实现逻辑呢?有一个办法是把合约的实现逻辑外包给一个独立合约,执行时调用这个外部合约。需要更改逻辑时,首先更改外部合约逻辑重新部署一个合约,然后在主合约中重新设置该外部合约的地址即可。采用上面这种办法其实相当于实现了合约的可升级功能,当前流行的代理/实现模式就是这样。主合约只是一个代理(Proxy)合约,.

2021-06-25 10:47:19 1117 1

空空如也

空空如也

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

TA关注的人

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