【使用go开发区块链】之获取链上数据(04)

上一篇文章,我们完成了go连接区块链的操作,本章我们将要完成获取链上数据,并持久化到数据库的功能开发

Vyper 不可重入锁漏洞事后分析技术报告

编者按:Vyper被黑的时间线和反思从审计的角度重现并提醒开发者注意考虑项目的依赖,本文从开发的角度深度分析并总结了这次漏洞的前因后果

  • aisiji
  • 发布于 2023-08-15
  • 阅读 ( 1046 )
  • ( 5 )

Michael.W基于Foundry精读Openzeppelin第27期——Escrow.sol

Escrow合约是Openzeppelin中所有escrow拓展库的基础合约,用于为指定地址锁存eth和提取eth的托管场景。该合约中存入和取出eth的方法都被virtual修饰,开发者可以通过继承重写的方式来做相关修改。

Michael.W基于Foundry精读Openzeppelin第26期——ERC1820Implementer.sol

ERC1820Implementer合约是对IERC1820Implementer interface的实现。该合约往往与ERC1820Registry合约配合使用。如果想要合约成为ERC1820Registry记录在案的implementer,需要目标合约继承ERC1820Implementer。

Michael.W基于Foundry精读Openzeppelin第25期——IERC1820Registry.sol

IERC1820Registry.sol是global ERC1820 Registry的接口文件。ERC1820 Registry旨在创建一个全网唯一的interface与对应implementer的查询中心。所有地址都可以在其中注册interface与对应implementer的关联关系。

Michael.W基于Foundry精读Openzeppelin第24期——ERC165Storage.sol

ERC165Storage合约是ERC165的一种拓展。IERC165的supportsInterface(bytes4)函数的标准实现方式是静态地将已实现接口的interface id硬编码到bytecode中,而ERC165Storage则可在合约部署后动态地添加支持的interface id。

【使用go开发区块链】之获取链上数据(03)

上篇文章,我们完成了数据库的连接,本章节,我们将完成ethclient的配置以及初始化

Michael.W基于Foundry精读Openzeppelin第23期——ERC165Checker.sol

ERC165Checker库是用来查询已实现IERC165的目标合约自身实现了哪些interface的工具库。在使用时需要注意:利用ERC165Checker提供的查询方法进行查询的过程不会因为目标合约没有实现待查询interface而发生revert。

【使用go开发区块链】之获取链上数据(02)

上一篇文章,我们完成了基础环境的搭建,并通过viper完成了配置文件的读取,本章,我们将要完成使用gorm连接数据库,并插入一条数据

(番外篇)Michael.W基于Foundry精读Openzeppelin第22期——内联汇编staticcall

内联汇编中,Instruction "staticcall"的功能及使用方法与Instruction "call"类似。唯一不同的是在"staticcall"的过程中不允许发生storage的修改。

【使用go开发区块链】之获取链上数据(01)

在我们实际开发项目中,很多时候都需要从链上获取区块数据,将数据加工处理后存入到数据库中,本章开始,我们来学习一下如何从链上获取数据(主动拉取)并存储到数据库中

Solidity 开发教程 - Solidity 开发基础系列

Solidity 开发基础: 使用Remix、数据类型(整型、地址、合约、数组、结构体、映射)介绍;函数修改器、事件、错误处理、库的使用。

  • DeCert.me
  • 发布于 2023-08-08
  • 阅读 ( 861 )
  • ( 20 )

Michael.W基于Foundry精读Openzeppelin第21期——ERC165.sol

ERC165合约是IERC165的标准实现。ERC165提供了本合约是否实现了IERC165接口的查询。如果需要额外支持其他interface,可在目标合约内重写supportsInterface(bytes4)方法。

Michael.W基于Foundry精读Openzeppelin第20期——EnumerableMap.sol

EnumerableMap库提供了Bytes32ToBytes32Map、UintToUintMap、UintToAddressMap、AddressToUintMap和Bytes32ToUintMap五种可迭代的map。每种map都提供了增添/更新键值及查询等操作且所有操作的时间复杂度为O(1)。

深入理解 Solidity 错误 #4 - try/catch

Solidity 的try/catch 语法和常见的语言中的表现不一样,try { } 块中的代码错误是无法被catch 的,这一点要小心要非常小心。

  • Tiny熊
  • 发布于 2023-08-04
  • 阅读 ( 1403 )

Vyper 被黑的时间线和反思

由于合约的不可变性, 项目会隐性依赖多年前编写的代码, 我们在修复 bug 时,就更需要注意它的潜在影响。

  • aisiji
  • 发布于 2023-08-04
  • 阅读 ( 902 )
  • ( 5 )

Michael.W基于Foundry精读Openzeppelin第19期——EnumerableSet.sol

EnumerableSet库提供了Bytes32Set、AddressSet和UintSet三种类型的set,分别适用于bytes32、address和uint256类型的元素。 每种set都提供了对应的增添元素、删除元素、查询当前set中元素个数等操作。几乎所有操作的时间复杂度均为O(1)。

深入理解 Solidity 错误 #3 - 错误处理

在深入理解 Solidity 错误"的第三篇, 探索处理错误,本文将揭晓这问问题的答案:asset 错误会消耗所有 gas 吗? require 提不提供错误字符有什么样的不同?外部调用的错误如何影响当前上下文?如何处理底层调用调用产生的错误?

  • Tiny熊
  • 发布于 2023-08-03
  • 阅读 ( 1620 )

深入理解 Solidity 错误 #2 - 运行时错误

在运行时错误是最常遇到的情况,你知道 ErrorPanic 的细微差别吗? 发生 Panic 错误真的会消耗所有的 gas 么,本文揭晓答案。

  • Tiny熊
  • 发布于 2023-08-02
  • 阅读 ( 1352 )

Michael.W基于Foundry精读Openzeppelin第18期——DoubleEndedQueue.sol

DoubleEndedQueue库提供了双向队列的数据结构及对应操作库函数,提供了队头或队尾插入及弹出元素值等逻辑功能。本库采用优化过的storage存储且所有操作的时间复杂度都是O(1)。特别要注意的是库中的clear操作仅仅将队头和队尾指针清零,而之前队列中的元素值依然留存在storage中