首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏nft市场

    智能合约安全——selfdestruct攻击

    selfdestruct函数(自毁函数)由以太坊智能合约提供,用于销毁区块链上的合约系统。当合约执行自毁操作时,合约账户上剩余的以太币会发送给指定的目标,然后其存储和代码从状态中被移除。 selfdestruct函数虽然能在紧急情况下帮助开发人员删除智能合约并将合约内的余额转移到指定的地址,但这一特性也被不法分子利用,使它成为了攻击手段。 玩家每次玩游戏时都会调用 EtherGame.deposit 函数向合约中先打入一个ETH,随后函数会检查合约中的余额(balance)是否小于等于 7 ,只有合约中的余额小于等于 7 时才能继续否则将回滚 ETH进去,所以通过正常路径是不可能一次向 EtherGame 打入大于 1 枚的ETH的,但是我们又需要打入大于 1 枚的ETH到 EtherGame 合约中,所以selfdestruct函数就登场了 修复建议 我们来分析一下攻击者的思路:利用selfdestruct函数强制转账给游戏地址,导致unit balance = address(this).balance查询出的balance的值大于7,诱发

    81020编辑于 2022-07-27
  • 来自专栏自动化、性能测试

    Mysql 常用函数5)- substring 函数

    Mysql常用函数的汇总,可看下面文章 https://www.cnblogs.com/poloyy/p/12890763.html substring 的作用 截取指定范围的字符串,学过Java的同学 ,对这个应该不陌生,字符串函数也有一个substring,作用一样哈 substring 的语法格式 SUBSTRING(s,n,len) 语法格式说明 s:指定字符串 n:起始位置,从1开始 len

    65220发布于 2020-06-09
  • 来自专栏一个会写诗的程序员的博客

    5函数函数式编程第5函数函数式编程

    5函数函数式编程 凡此变数中函彼变数者,则此为彼之函数。 Kotlin代码可以这样写 package com.easy.kotlin fun main(args: Array<String>) { val list = listOf(1, 2, 3, 4, 5, 6, 7}); out.println(filterOdds(list)); // 输出:[1, 3, 5, 7] } public static List<Integer (2, 2) // 4 5.3 lambda表达式 我们在本章开头部分讲到了这段代码 val list = listOf(1, 2, 3, 4, 5, 6, 7) list.filter { it % 3, 4, 5, 6, 7) >>> list.filter(isOdd) // 直接传入isOdd函数 [1, 3, 5, 7] 5.4 高阶函数 其实,在上面的代码示例 list.filter(isOdd

    65310发布于 2018-08-17
  • 来自专栏技术分享

    C语言(5)----函数

    所以这个时候函数出现了。它用来使程序发生,使程序运行,它本身就是运行的指令。 我们可以用数学来类比C语言中的函数概念。注意,接下来所说的函数都是指C语言中的函数。 2.函数是什么? 另外,函数需要做到高内聚低耦合,这样才能使函数的可变性更高。 4.函数的分类 ·库函数:为了用户的需要,ANSIC规定了一些常用的函数标准,这些标准被称为标准库,那么代表这些标准的函数叫做库函数。 ·自定义函数:有时候库函数不能完成理想的任务,就需要用户自己去创造一个自定义函数来完成任务。 5.函数的格式 其实库函数和自定义函数的格式都是一样的,只是一个无需自己再规定,一个需要自己先自定义。 执行函数的过程就是输入参数-函数分析参数-输出结果(返回结果) 6.实参和形参 在5中我们已经知道了有个东西叫做形式参数,也就是形参,这里我们来具体介绍实参和形参。 实参:实际参数。 11.函数的声明和定义 函数的定义顾名思义,就是定义这个函数的作用 函数的声明就是告诉有这个函数,如果不声明的话编译器就理解不了,也就无法使用这个函数

    26110编辑于 2024-06-18
  • 来自专栏黯羽轻扬

    函数_TypeScript笔记5

    一.类型 函数的类型分为两部分: 参数:各个参数的类型 返回值:返回值的类型 例如: // 具名函数 function add(x: number, y: number): number { return x + y; }// 匿名函数 let myAdd = function(x: number, y: number): number { return x + y; }; 带类型的函数声明足够表达一个函数的类型信息 那么有办法复用一个函数的类型吗? 有。 把类型抽离出来就可以复用了,姑且称之为类型描述 类型描述 可以通过箭头函数语法描述函数的类型: let myAdd: (x: number, y: number) => number = function (摘自Types of polymorphism in java- Runtime and Compile time polymorphism) 简言之,能让同名函数的不同版本共存。

    1K30发布于 2019-06-12
  • 来自专栏Ethereum

    《纸上谈兵·solidity》第 20 课:Solidity 安全专题(二)—— 编译器特性与低级漏洞

    2、ABI 混淆攻击 ABI 负责定义函数签名到 函数选择器(4 字节) 的映射。 攻击者可能利用选择器碰撞,让不同函数共享同一个选择器,从而调用到意料之外的逻辑。 function transfer(address to, uint256 amount) public {} function f123456789() public {} } 不同函数签名哈希后的前 防御手段: 使用最新 Solidity 编译器,避免 ABI 自动推导漏洞 避免函数名过长或构造极端签名 使用工具检测潜在冲突(如 Slither、Surya) 3、selfdestruct 的风险 selfdestruct 虽然 EIP-6049 已提出废弃 selfdestruct,但目前仍存在隐患: 强制转账:攻击者可以部署一个带余额的合约,并 selfdestruct 强行转账到任意合约,即使目标合约没写 receive 5、总结 本课揭示了 Solidity 与 EVM 的底层隐患: 存储槽冲突 —— 升级合约的最大坑 ABI 混淆 —— 极端但可能的攻击面 selfdestruct —— 强制转账与合约摧毁 开发者必须

    38710编辑于 2025-08-27
  • 来自专栏有趣的django

    5.python函数

    ) 结果:120 过程: factorial(5) # 第 1 次调用使用 5 5 * factorial(4) # 第 2 次调用使用 4 5 * (4 * factorial(3)) # 第 3 次调用使用 3 5 * (4 * (3 * factorial(2))) # 第 4 次调用使用 2 5 * (4 * (3 * (2 * factorial(1)))) # 第 5 次调用使用 1 5 * (4 * (3 * (2 * 1))) # 从第 5 次调用返回 5 * (4 * (3 * 2)) # 从第 4 次调用返回 5 * (4 * 6) # 从第 ]) print(list(a)) 结果:[1, 3, 5, 7] 匿名函数lambda lambda 函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方 优点:让代码更加精简,不需要考虑命名的问题

    80471发布于 2018-04-11
  • 来自专栏深入浅出区块链技术

    实践create2进行合约无缝升级(2) - Metapod.sol 解析

    [13] MSIZE [14] MSTORE [15] STATICCALL // 这里是调用caller的getInitializationCode()函数 [16] POP [18] PUSH1 // 将自己kill掉 [36] JUMPDEST [37] DUP1 [38] REVERT // 可以看出来,实际上上面代码完成的,就是TransientContract合约构造函数的主要内容。 caller 去执行selfdestruct来销毁合约。 destroy 有了上面deploy的解释,那这个函数就不难理解了,调用selfdesctruct函数销毁部署的合约。 临时合约 selfdestruct,将钱转到最终合约。

    87520编辑于 2022-11-07
  • 来自专栏Ethereum

    《纸上谈兵·solidity》第 3 课:事件(Event)机制与链上日志——不是 print,是广播!

    在 Solidity 中,事件(event)不是控制台输出,也不是日志记录函数,而是链上广播机制。 ","address":"0x7109709ecfa91a80626ff3989d68f67f5b1dd12d","maybe_precompile":null,"selfdestruct_address ","address":"0x5fbdb2315678afecb367f032d93f642f64180aa3","maybe_precompile":false,"selfdestruct_address ","address":"0x5fbdb2315678afecb367f032d93f642f64180aa3","maybe_precompile":null,"selfdestruct_address ","address":"0x7109709ecfa91a80626ff3989d68f67f5b1dd12d","maybe_precompile":null,"selfdestruct_address

    39310编辑于 2025-07-29
  • 来自专栏技术分享

    指针(5)---回调函数

    回调函数的含义 回调函数通常作为参数传递给其他函数,它是一个通过函数指针调用的函数。简单来说这个函数的作用就是用来在特殊的条件满足时用来调用其他函数的一个函数。 回调函数的使用 当相同或者相似的函数出现多份的时候,那么由于相同的部分出现过多就会显得代码冗余,可读性不高。此时如果将相似代码中的不同区域挑出进行分类,那么就能实现代码的优化。 在简单的四则运算中,拥有四种情况:加减乘除,那么我们就需要调用这四组函数来实现计算器。 d %d", &x, &y); ret = pf(x, y); printf("ret = %d\n", ret); } 它使用了一个基于函数指针数组的函数calc来实现函数的回调,从而达到下方的效果 ,利用数组的元素变化替代特殊情况来调用不同的函数

    24910编辑于 2024-06-18
  • 来自专栏若尘的技术专栏

    practice_5(列表函数

    append()和extend()和insert() a = [1,2,3,4,5] a.append([6,7,8]) print(a) b = [1,2,3,4,5] b.extend([6,7,8 ]) print(b) c = [1,2,3,4,5] c.insert(3,10) print(c) [1, 2, 3, 4, 5, [6, 7, 8]] [1, 2, 3, 4, 5, 6, 7, 8] [1, 2, 3, 10, 4, 5] 假定给出一个列表 member = "图灵", "的", "周老师", "是最帅的" 想要把member变成 member = "图灵", 99, "的 ls = [1, [1, 2, ['图灵学院']], 3, 5, 8, 13, 18] ls = [1, [1, 2, ['图灵学院']], 3, 5, 8, 13, 18] ls[1][2][0] = "周老师" print(ls) [1, [1, 2, ['周老师']], 3, 5, 8, 13, 18] 将列表推导式还原出来 ls = [(x, y) for x in range(10) for

    399107发布于 2021-05-19
  • 来自专栏睡不着所以学编程

    JavaScript高级(5) 函数进阶

    难的地方要来了 函数进阶 目标: 我们以前定义函数的方法有两种,命名函数和匿名函数,今天学习第三种,根据大写的F我们可以看出这是一个构造函数 语法格式: new Function('参数1 ', '参数2', '函数体') 注意函数体是字符串形式 但是应该能感觉到这个方法很麻烦吧,参数和函数体都要用字符串书写... 指向 这些this的指向,是当我们调用函数的时候确定的.调用的方式的不同决定了this指向的不同,一般指向我们的调用者 改变函数内部this指向 JavaScript为我们专门提供了一些函数方法来帮助我们更优雅的处理函数内部 传递的其他参数 返回由指定的this值和初始化参数改造的原函数拷贝 因为bind( )方法不会调用函数,所以会有一个返回值,返回值就是我们function改造完的原函数的拷贝,就是产生了一个新的函数 ,返回给我们 不会调用原来的函数,可以改变原来函数内部的this指向 返回的是原函数改变this之后产生的新函数 如果有的函数我们不需要立即调用,但是又想改变这个函数的内部this指向,此时就用bind

    31120编辑于 2022-09-20
  • 来自专栏深入浅出区块链技术

    预防智能合约的漏洞 - 应对意外转入以太币

    自毁函数(Self-destruct) 每个合约都可以执行selfdestruct函数,这个函数会从合约地址移除所有字节码并将存储在这个地址的所有以太币转移到参数指定的地址。 因此,selfdestruct函数可以强制转移以太币到任何合约,不管这个合约中存在什么代码,甚至根本没有 payable 函数。 这就是说,攻击者可以创建一个有selfdestruct的合约,并向其发送以太币,调用selfdestruct(target),从而强制将以太币转移到target合约。 2. 攻击者可以通过selfdestruct函数(前面提到过的)强制向该合约发送少量的以太币(如 0.1 以太币),以此阻止将来有玩家达到 MileStone。 如果要求存储的以太币是一个确切数量,应该自定义变量,在 payable 函数中递增,这样才能安全的追踪存入的以太币。这种变量不会受到调用selfdestruct强制发送以太币的影响。

    1.6K20编辑于 2022-04-08
  • 来自专栏YashanDB知识库

    YashanDB MD5函数

    md5MD5(expr)MD5函数用于计算expr的MD5值。expr的值须为字符型,或可转换为字符型的其他类型。返回一个varchar(32)类型的固定长度的十六进制字符串。 本函数遵循如下规则:当expr的值为NULL或空串时,函数返回值为NULL。当expr为nchar类型或做变量的char类型时,函数会将其末尾的空格进行消除,再计算MD5值。 当expr为double或float类型,函数返回其科学计数法的MD5值。当expr为bool类型,函数返回其对应的bool类型数据值(1和0)的MD5值。 本函数不支持向量化计算。 SELECT MD5(NULL) FROM DUAL;MD5(NULL)---------SELECT MD5('') FROM DUAL;MD5('')-------SELECT MD5('

    18000编辑于 2025-06-17
  • 来自专栏PHP在线

    PHP5常用函数

    PHP已经更新到很多个版本,最近用的比较多的要数PHP5。下面我们为大家总结了PHP5常用函数,以便大家将来实际编写代码中查看。 define() 函数定义一个常量。   constant() 函数返回常量的值。   PHP5常用函数之connection_status() 函数返回当前的连接状态。    vfprintf() 函数把格式化的字符串写到指定的输出流。   PHP5常用函数之ucwords () 函数把字符串中每个单词的首字符转换为大写。    PHP5常用函数之strpbrk() 函数在字符串中搜索指定字符中的任意一个。 strncmp() 函数比较两个字符串。 strncasecmp() 函数比较两个字符串。 str_ireplace() 函数使用一个字符串替换字符串中的另一些字符。 PHP5常用函数之sscanf() 函数根据指定的格式解析来自一个字符串的输入。

    2.5K30发布于 2018-03-07
  • 来自专栏文武兼修ing——机器学习与IC设计

    JavaScript入门笔记(5函数

    /* a = 1 b = 2 [ 3, 4, 5 ] */ test_rest() /* a = undefined b = undefined [] */ 函数与变量作用域 函数内的变量作用域是函数的 data = 10 function test_window() { var data = 5 console.log(data) //5 } test_window() 另外,JavaScript : map()函数:将一个列表(也可能是其他数据结构)中的所有属性使用传入的函数处理并返回处理完后的列表,原列表不变 var test_list = [1,2,3,4,5] console.log(test_list.map reduce()函数:用于迭代处理,输入有两个值,分别是上一次该函数运行的结果和本次输入的属性,同样原列表不变 console.log(test_list) //[ 1, 2, 3, 4, 5 ] console.log ] sort()函数:用于排序,默认都转换为string后按ASCII码排序,可传入一个函数说明大小关系 console.log(test_list) //[ 1, 2, 3, 4, 5 ] console.log

    79080发布于 2018-04-27
  • 来自专栏字节脉搏实验室

    智能合约安全审计之路-拒绝服务漏洞

    拒绝服务的原因 意外执行了SELFDESTRUCT指令 访问控制策略出错 Gas达到区块上限 非预期的异常抛出 ? 漏洞分析 selfdestruct()合约自毁函数 指令执行后,合约将拒绝服务,地址对应的字节码将被标注为删除 合约地址中所有的ETH将被发送到指定的新地址 进行ETH转移时,即使目标地址为一个合约地址 ,也不会触发该地址的fallback函数,因此不需要该合约有任何的payable函数 如果selfdestruct函数被非预期的执行,则整个合约会拒绝服务 ? (_who); } } 漏洞点:在address owner处发送地址到_who处,由于调用了selfdestruct()函数对selfdestructGame合约进行自毁,将selfdestructGame ,在经过transfer函数的时候会发生异常,导致交易回滚,从而使bid()函数拒绝服务。

    1.8K40发布于 2020-03-31
  • 来自专栏changxin7

    5.匿名函数,内置函数II,闭包

    5)匿名函数不管多复杂.只能写一行.且逻辑结束后直接返回数据 接下来做几个匿名函数的小题: 写匿名函数:接收一个可切片的数据,返回索引为0与2的对应的元素(元组形式)。 ) # 返回此序列最小值 ret = min([1,2,-5,],key=abs) # 按照绝对值的大小,返回此序列最小值 print(ret) # 加key是可以加函数名,min自动会获取传入函数中的参数的每个元素 xa5\xbd\xe6\xad\xa6\xe5\xa4\xa7' s1 = bs.decode('utf-8') print(s1) 结果: 你好太白 s = '你好' bs = bytes(s, .根据函数运算的结果进行排序 reverse :是否是倒叙,True 倒叙 False 正序 lst = [1,3,2,5,4] lst2 = sorted(lst) print(lst) # 4] [1, 2, 3, 4, 5] [5, 4, 3, 2, 1] 字典使用sorted排序 dic = {1:'a',3:'c',2:'b'} print(sorted(dic)) # 字典排序返回的就是排序后的

    81430发布于 2019-09-10
  • 来自专栏Ethereum

    《纸上谈兵·solidity》第 29 课:智能合约安全审计案例复盘 -- Parity Wallet Hack(2017)

    两次重大漏洞第一次攻击(2017年7月)漏洞位置:initWallet 函数初始化逻辑错误。问题原因:合约允许任何人调用 initWallet(),从而重新设置钱包拥有者。 WalletLibrary 地址 function doSomething(bytes data) public { lib.delegatecall(data); // 调用库合约函数 关键教训库合约必须不可变(不能有 init、selfdestruct函数)。delegatecall 风险极大,应谨慎使用。合约升级机制必须经过严格设计和审计。4. 5. 启示初始化函数一定要保护(onlyOwner),不能随意被调用。delegatecall 必须小心使用,库合约最好是无状态(Stateless)。 selfdestruct 是危险函数,应该避免在核心合约中出现。智能合约一旦部署,升级和错误修复极其困难。6.

    43610编辑于 2025-09-07
  • 来自专栏TechBlog

    经典智能合约案例之发红包

    ,指定发红包的人和红包数量 需要一个查询红包余额的功能函数(提示:address(this).balance) 实现抢红包的功能 需要一个给抢红包的人转账的功能函数 函数中需要判断:1 红包剩余个数大于0;(提示:断言) 红包数量随着函数执行的次数相应减少; 抢红包的金额采用随机的方式(提示:用keccak256函数计算当前时间戳的哈希),红包的金额是100以内的数(提示: 哈希值对100取余) 转账功能:msg.sender.transfer(amount) (amount为金额); 实现退还红包余额 可以借助selfdestruct函数,用于销毁合约,其原型如下 : function selfdestruct(address user) user代表合约销毁时的受益人; 实现一个kill函数,用它来销毁合约,指定发红包的人为受益人; 合约代码: msg.sender] = true; } // Refund the balance of the red envelope function kill() public{ selfdestruct

    59920编辑于 2023-05-29
领券