
solidity
kakadev
保持平常心,不被焦虑裹挟 !
no fud & no fomo !
一半清醒 ,一半沉迷 , 保持学习 !
展开
-
solidity 智能合约中 Bytecode 和 ABI 的区别
Bytecode和ABI可以认为是智能合约源代码的两种外在表现形式,其中Bytecode是给机器执行的,而ABI是给DApp 开发者用的用自然语言描述的合约接口规范。 简单地将,智能合约可以理解为把“合同”变为代码,然后编译成Bytecode和ABI,Bytecode用来部署,ABI用来调用。...原创 2022-04-18 11:54:17 · 2285 阅读 · 0 评论 -
solidity中的 Keccak SHA3算法 ,跟函数选择器的关系
Keccak 和 SHA3 的产生背景最早出现并经常出现在大家视线中的是MD5,它是一种哈希算法。但是他被证明是不安全的,已出现碰撞。除了MD5,还有SHA1,SHA2,SHA3等等,现在最流行的安全且效率高的哈希算法是 SHA3-256。在区块链技术中流行的哈希算法是SHA3,SHA3是美国国家标准技术研究所所设计的一套SHA哈希算法,SHA3它不是SHA2的替代品,而是一种有别于SHA2的全新哈希设计方案。在15年8月才最终被才被NIST正式批准的。我们知道以太坊时在13年开始设计,15年原创 2022-04-06 23:57:36 · 5156 阅读 · 0 评论 -
Solidity中的事件和日志学习笔记
什么是日志,什么是事件EVM是以太坊和许多其他区块链的核心。EVM有一个日志功能,用于将数据“写”到智能合约之外的数据结构中。其中一个重要的数据是Solidity事件。事件允许我们“打印”在区块链上的信息,这种方式比在智能合约中保存到公共存储变量更容易搜索,且更省gas费。日志是区块链上的一种特殊数据结构。它们不能被智能合约访问,但能提供关于交易和区块中发生的信息。正是因为它们不能被智能合约访问,才使得它们的使用成本更低。滚动到交易的“日志”部分,我们可以看到以下内容:一个事件.原创 2022-04-06 19:02:23 · 4404 阅读 · 0 评论 -
prue view 函数需要注意的点
视图函数(view)、纯函数:(pure) 不修改状态,不支付手续费没有gas费用,但是就gas限制,比如说不能执行一个很大的循环,这就会超出gas限制。可以这么理解,gas price 为0.原创 2022-03-29 16:32:49 · 389 阅读 · 0 评论 -
创建智能合约有哪些方法
创建合约的几个方法:外部部署(Remix/Hardhat/Truffle)Web.js 合约使用New 最小代理合约(克隆) https://eips.ethereum.org/EIPS/eip-1167 https://github.com/optionality/clone-factor y Create2 C c = new C{salt: _salt}();分析一下:外部部署比较好理解,直接部署就好了 。 使用new的时候可以指定颜值 function cre...原创 2022-03-29 16:20:35 · 1186 阅读 · 0 评论 -
solidity 数组学习总结
注意点:solidity不支持删除中间元素,如果需要删除,将最后一个元素赋值给要删除的那个元素的下标,最后删除最后一个元素。如果按照传统的方式删除中间元素,然后将后面的前移,这就需要花费很多的gas。 循环数组的时候,一定要注意数组的长度,如果过长,那么操作的时候gas可能会超过当前区块的gas限制,导致任何人都无法执行这段代码。删除的事例代码:function remove(uint index) public { uint len = numbers.length; if (i原创 2022-03-29 11:02:21 · 1222 阅读 · 0 评论 -
calldata memory storage 区别详细讲解
首先明确一点calldata memory storage 都是用来修饰饮用类型的。强制指定的数据位置: • 外部函数(就是说使用external关键字的函数)的参数(不包括返回参数): calldata,效果跟 memory 差不多 • 状态变量: storage默认数据位置: • 函数参数(包括返回参数): memory • 所有其它局部变量: storageSolidity变量的数据存储位置现在让我们回到memory关键字。从0.5...原创 2022-03-28 17:27:11 · 5927 阅读 · 0 评论 -
Solidity 中 receive 函数 和 callback函数分析
在使用transfer 和 send 方法的是后需要关注一下 receive方法和callback方法。receive 接收以太函数一个合约最多有一个 receive 函数, 声明函数为: receive() external payable { ... } 不需要 function 关键字,也没有参数和返回值并且必须是 external 可见性和 payable 修饰. 它可以是 virtual 的,可以被重载也可以有 修改器modifier 。 在对合约没有任何附加数据调用(通常是对合约转载 2022-03-24 16:21:49 · 1970 阅读 · 0 评论 -
Solidity 中 transfer、send、call的区别
相同点 :都可以在合约之间相互转账,send和call都有返回值。需要在代码中判断返回值。addr.transfer(1 ether)、addr.send(1 ether)、addr.call.value(1 ether)的接收方都是addr。 如果使用addr.transfer(1 ether)、addr.send(1 ether),addr合约中必须增加fallback回退函数! 如果使用addr.call.value(1 ether),那么被调用的方法必须添加payable修饰符,否则转账原创 2022-03-24 15:45:25 · 3089 阅读 · 1 评论 -
Solidity 中Require ,Assert, Revert 的用法和区别
Require vs assert同样作为判断一个条件是否满足的函数,require会退回剩下的gas,而assert会烧掉所有的gas。Revertrevert的用法和throw很像,也会撤回所有的状态转变。但是它有两点不同:1. 它允许你返回一个值;2. 它会把所有剩下的gas退回给caller调用起来就像这样子:revert(‘Something bad happened’);require(condition, ‘Something bad happened’);原创 2022-03-16 12:30:01 · 1734 阅读 · 0 评论 -
solidity笔记 using for 的用法,以及库的讲解
简单的例子using A for B可用于在合约的上下文中,将库函数(来自库A)附加到任何类型(B)详细的例子pragma solidity ^0.8.0; library SafeMath { function add(uint x, uint y) internal pure returns (uint) { uint z = x + y; require(z >= x, "uint overflow"); return z; ...原创 2022-03-14 13:10:07 · 1031 阅读 · 0 评论 -
solidity 中 关键字 this 的理解
比如下面的代码中 this 指的就是 当前代码中 Score合约。contract Score { mapping(address => uint256) score; address teacher; constructor() { teacher = address(new Teacher(address(this))); }}原创 2022-03-14 11:17:31 · 1234 阅读 · 1 评论 -
Solidity 中 call delegatecall transfer 大致理解
学习中自我总结transfer如果异常会转账失败,抛出异常(等价于requi(send()))(合约地址转账) 有gas限制,最大2300,目前不建议使用,因为随着 eip 的升级,底层的操作gas会发生变化,可能会导致之前安全的代码不在安全。 call 保持上下文。 delegatecall 切换上下文。 call 和 delagetecall 如果异常会转账失败,仅会返回false,不会终止执行(调用合约的方法并转账)可用与合约之间的调用。如果使用addr.transfer(1 eth..原创 2022-03-08 12:38:58 · 4881 阅读 · 0 评论