- 博客(97)
- 收藏
- 关注
原创 Rust常用特型之Clone+Copy特型
标准库的Clone特型意味着实现它的类型可以制作一份值的副本。它有两个函数,其中一个函数有默认实现,因此我们只需要自己实现第一个函数clone()就好,实际上,运用的最多的也是clone()函数。clone()函数会构造自身的独立备份并且返回它。因为该函数的返回类似是Self, 因此函数不可能返回unsized值。这是因为Clone特型本身拓展了Sized特型,因此,实现了Clone特型的类型必须是Sized。克隆一个值通常需要为它所拥有的任何内容重新分配资源,所以克隆在时间和内存上都开销很大。
2024-04-01 11:09:16
1516
原创 Solidity全局变量完全测试
我们知道,在Solidity中有很多全局变量,例如我们最常用的等。等。本着凡事最怕认真两字的原则,虽然繁琐,但我们将所有的全局变量全部测试一遍,学习怎么调用和应用在哪些场景,进一步加深理解与记忆。本文基于Solidity 0.8.9版本与hardhat工具进行,在最新的0.8.13版本增加了两个全局变量与,因当前版本的hardhat暂不支持 Solidity0.8.13,故没有进行这两项测试。另外,有少数项目也不方便测试,期待有人能改进完善测试方法。
2024-03-31 18:33:51
206
原创 UniswapV2周边合约学习(五)-- ExampleFlashSwap.sol
该合约为利用UniswapV2交易对中的FlashSwap的先借后还特性,在买卖资产的同时和UnisapV1交易对进行交易,利用价格差进行arbitrage。
2024-03-31 18:32:50
227
原创 Openzeppelin可升级模板库合约初始化详解
本文详细的介绍了 Openzeppelin 代理/实现 模式中合约的初始化流程,并且讲了initializer,initialize,onlyInitializing 这三者的区别
2022-07-07 23:21:30
2352
2
转载 Solidity智能合约单元测试介绍
当前在各种区块链中,生态最全的要属兼容EVM的区块链,在该类区块链上的智能合约绝大部分使用Solidity编写。因此,对Solidity编写的智能合约进行单元测试便成为一项经常性的工作。本文简要的介绍一下怎样使用hardhat进行Solidity智能合约的单元测试。 一、什么是Hardhat 我们来看其官方文档的描述: Hardhat is a development environment to co............
2022-04-24 14:45:27
6159
3
原创 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
1479
1
原创 Solidity全局变量完全测试
Solidity全局变量完全测试,看完你就明白了。基于Solidity 0.8.9和 hardhat 框架进行单元测试
2022-03-21 13:14:08
5836
原创 一种查询Token税率的方法
本文基于以太坊上的类UniswapV2交易所,通过模拟交易的形式介绍了一种获取SafeMoon类代币转移损耗率的方法
2022-03-02 20:41:03
5899
4
原创 一种压缩Solidity函数参数的方法
当前Solidit合约调用时,会将函数参数进行扩展,填充无用的0至64位长度(32字节)。而我们仍然需要为这些填充的0支付相应gas。当参数很多并且参数的数据类型长度很小时,会造成很大的浪费。本文探索了一种压缩函数参数来节省gas的方法。
2022-02-26 23:44:21
3750
原创 【在Solana中使用固定PDA账号实现管理员权限验证和全局状态变量保存】
在Solana中使用固定PDA账号实现管理员权限验证和全局状态变量保存
2022-01-23 18:32:25
6189
3
原创 Solidity代理/实现模式中实现合约回调函数的使用
我们知道,在Solidity中,合约有一个fallback函数,用于在函数调用时未匹配到相应的函数时调用。我们平常使用的代理/实现模式,正是基于这样一个功能。然而我们还可以在实现合约中继续使用fallback函数,来实现特定功能或者多重实现合约。
2022-01-18 19:25:11
5417
原创 Solana区块链智能合约开发简要流程
本文主要以Solana上知名开发者paulx的教学文章为示例,介绍了开发Solana区块链智能合约的一般流程。
2021-12-22 13:53:07
14634
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
1105
原创 使用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
4850
1
原创 Solana中利用Anchor自动解析TokenAccount
在Solana区块链中,绝大多数应用都会涉及到spl-token,因此获取用户账号(TokenAccount)中的信息是一个很常见的需求。而传统的方法直接读取底层数据相关位置的切片转换成所需要的数据,不仅繁琐还容易出错。Anchor 工具定义了几个特型协议,借助该协议可以自动实现数据结构的序列化与反序列化。本文介绍了使用Anchor来自动获取TokenAccount中所有数据的方法。
2021-11-20 14:49:04
7340
1
原创 Solidity示例合约ReceiverPays.sol学习
一、前言最近闲暇起来,打算把Solidity官方文档再看一遍,温故而知新!在看到示例合约微支付通道Micropayment Channel 时,决定动手去亲自实践一次(以前看到这只是看了源码,未真正部署测试)。没有想到,看上去挺简单的ReceiverPays合约却在一个地方卡了很久。以此文章记录这次ReceiverPays合约学习测试的过程,能给读者稍微提供一点点参考就足够了。本文以Solidity v0.8.0文档为阅读版本。Tips:Micropayment Channel 最终完成合约为Sim
2021-08-20 15:44:25
3183
1
原创 浅谈一下UniswapV3中的NFT图像生成
一、NFT与SVG今年打开UniswapV3中的周边合约,突然发现了一个NFTSVG.sol。正好自己以前也有研究过NFT与SVG之间的应用联系,就打开源码大致看了一下,果然如此。我们知道,NFT流行是从以太坊上的加密猫开始的,每个加密猫其实是一个ERC721的token,这个token又对应着一组数据结构,例如猫的主人,猫的眼睛颜色等。但是我们在前端显示的时候,这个猫眼睛到底是什么样子的,是前端图像组合的,也就是你的猫的图像其实是存于它们的网站上。后期有URL,每个token(猫)对应一个url地址,
2021-07-18 21:52:09
7628
5
原创 以太坊从公钥生成地址的具体过程
网上有大量的文章介绍了ECDSA(椭圆曲线加密)算法来生成以太坊公私钥对,进而生成一个唯一的以太坊地址。其中绝大部分都提到了非压缩公钥生成地址时先进行哈希运算,然后取后40位就是地址了。然而绝知此事要躬为。到底怎么哈希的,公钥和私钥的格式是什么,相信很多人和我一样不清楚!笔者因为在研究一个东西,需要顺带弄明白以太坊公钥生成地址的细节流程。笔者首先百度了一下,参考了知乎上面的一篇文章《以太坊的私钥、公钥、地址、账户》 。然而摸索半天之后,得不到文章中列出的结果。最后笔者将文章中的私钥导入到MetaMas.
2021-07-14 20:38:06
6171
9
原创 一种链下绕过非view限制直接读取智能合约某类特殊函数返回结果的技巧
一、前言我们知道,在智能合约中一般分为读取(view/pure)或者写入(改变状态)这两种类型。由于保护数据设置障碍的需要,有时合约开发者并不想别人查看他们的view函数返回值,于是在上面增加了调用者权限限制,更有甚者,故意通过某种技巧(或者是业务需要)将此函数变成非view/pure类型的函数,也就是一个交易。这样线下(前端或者脚本)调用此函数时就是一个交易,是无法直接得到函数返回结果的。在一篇文章《一种绕过管理员权限调用智能合约view函数的小技巧》中,我们介绍了绕过权限控制来读取view函数返回结
2021-06-29 23:42:37
855
3
原创 一种绕过管理员权限调用智能合约view函数的小技巧
在部分以太坊智能合约中,有时可以看到某些view函数被限定了管理员调用,以阻止其它人查看。其实这个限定基本上是无效的,本文介绍一下绕过这个限定调用相应的view函数的小技巧。注意:我们这里仅限view类型的函数(非改变状态的交易)。一、介绍有的时候,智能合约开发者由于需求,会将部分数据设置为私有类型,并且限定了只有管理员才能查看(例如一个随机数的种子,或者管理员地址)。这时我们又想知道这个数据怎么办?正常的函数调用肯定是无法验证调用者地址验证的,这里,我们就得想想办法了,利用ethers.js框架中.
2021-06-27 22:54:14
1362
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
1961
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人