- 博客(5)
- 收藏
- 关注
原创 关于函数名直接调用与call调用的一个实验
在研究solidity的过程中有个疑问,都说使用call函数调用合约函数,如果调用失败只会返回false,并不会回滚。这里的失败是指什么?是指被调用合约函数回滚吗?那么主调用合约会跟着回滚吗?如果使用函数名直接调用又会怎样?来做个实验看看。假设有First、Second两个合约,如下:// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.5.0;contract First { uint public data = 1;
2022-03-18 14:37:48
391
1
原创 可重入漏洞
安全性是我们编写智能合约时要考量的最重要的因素之一。在智能合约编程领域,错误总是很轻易而又很昂贵地在发生。与其他程序一样,智能合约程序当然也会严格按照其程序逻辑来执行,虽然结果并不总是像程序员们所设想的那样。此外,所有智能合约都是公开可见的,任何人都可以简单地构造一个交易来与它们进行交互。重入以太坊智能合约的特性之一就是能够调用和使用其他外部合约的代码。合约通常也会用来处理以太币,因而也会经常将以太币发送到不同的外部用户地址。这些处理都需要合约提交外部调用。这些外部调用有可能会被攻击者劫持,迫使.
2022-03-15 16:55:15
13642
原创 对EVM学习的一个笔记
1.重新学习了以太坊虚拟机相关知识,从汇编的层次对EVM的优化进行研究,总结如下:solidity中运行合约的成本基本上是由sstore指令和sload指令来主导,因此对状态变量的访问是非常昂贵的。A.固定长度数据类型对于固定长度数据类型,如整型、结构体、由固定长度数据类型组成的固定长度的数组,在不进行优化的前提下,每一个元素都占有一个slot,并且从slot0开始依次排列。 声明状态变量但不进行初始化,由于汇编之后不会有sstore和sload指令,因此并不会消耗gas。相反,只要进行了初始化操
2022-03-11 17:13:44
386
原创 对call调用的一点猜测
call调用是会消耗gas的,所以如果合约A利用call去调用B合约的任何函数(包括view和prue),合约A都不能声明为view。相反如果是通过函数名直接调用另外一个合约的view函数,则该调用过程不会消耗gas。猜测原因为:call调用是在不知道合约abi的情况下进行调用,无法知晓被调用者是否为view函数,所以必须做好修改合约状态(简单的说就是消耗gas)的准备;而通过函数名去进行合约外部调用,也就意味着事先已知晓被调用合约函数的情况,例如是否为view函数,可根据情况对函数进行说明设定。...
2022-03-08 11:03:41
264
原创 关于web3.js中与交易发送、交易签名、智能合约函数调用相关api的理解
web3.js中有一些与交易发送、签名、合约函数调用相关的api,初学者(如me)常常搞不清什么情况下应该调用哪个,以及它们之间的区别。现将个人浅见记录如下,备忘。 交易发送 sendTransaction web3.eth.sendTransaction(transactionObject [, callback])...
2022-03-04 14:05:25
14571
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人