首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏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
  • 来自专栏python3

    python 函数3

    函数小高级 ( 5* ) 1 函数名可以当作变量来使用 def func(): print(123) v1 = func # func代表函数的地址 func() v1() # v1 } print(info) 2 函数也可以当作参数来进行传递 def func(arg): print(arg) func(1) func([1,2,3,4]) def show() = func_list[2](1,2) print(v3) 总结: 列表所有方法基本上都是返回None,字符串的所有方法基本上都是返回新值。 3. 内置函数 函数分为:自定义函数 和 内置函数 目前python的内置函数分为几大类: 1.强制转换 bool() / int() / str() / list() / dict() /tuple()

    60220发布于 2020-01-16
  • 来自专栏网优小兵玩Python

    Python 3 函数

    但也可以自己创建函数,这被叫做用户自定义函数。 ---- 函数定义 ---- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 函数内容以冒号起始,并且缩进。 return [表达式] 结束函数,选择性地返回一个值给调用方。 函数调用 ---- 定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。 a = 100 # 调用changeme函数b = 89mylist = [1,2,3]cme( 89,mylist )print ("函数外取值: ", mylist)print ("b的值:",b)

    1.5K30发布于 2019-09-07
  • 来自专栏python3

    python 函数3

    函数 >>> def ds(x):                         return 2 * x + 1 >>> ds(5) 11 >>> lambda x : 2 * x + 1                  <function <lambda> at 0x035C65D0> >>> a = lambda x : 2 * x + 1                #lambda关键字来创建匿名函数 >>> a (5) 11 >>> def add(x,y): return x + y >>> add(3,4) 7 >>> b = lambda x,y : x + y >>> b(3, 4) 7 >>> list 5, 7, 9] >>> list(filter(lambda x : x % 2, range(10))) [1, 3, 5, 7, 9] >>> list(map(lambda x : x * 2 , range(10)))     #map()  会根据提供的函数对指定序列做映射 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

    36130发布于 2020-01-03
  • 来自专栏捞月亮的小北

    3-函数

    其实,上述的这一类的需求呢,我们通过 MySQL 中的函数都可以很方便的实现 。 MySQL 中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数。 2. : 2. lower : 全部转小写 语法: select lower('Hello'); 执行结果: 3. upper : 全部转大写 语法: select upper('Hello'); trim(' Hello MySQL '); 结果显示: 7. substring : 截取子字符串 语法: select substring('Hello MySQL',1,5); 结果显示: 3. curtime(); 结果显示: 3. now:当前日期和时间 语法: select now(); 结果显示: 4. 流程函数 流程函数也是很常用的一类函数,可以在 SQL 语句中实现条件筛选,从而提高语句的效率。

    33810编辑于 2023-12-01
  • 来自专栏自动化、性能测试

    Mysql 常用函数3)- ifnull 函数

    Mysql常用函数的汇总,可看下面文章 https://www.cnblogs.com/poloyy/p/12890763.html ifnull 的作用 可以判断某个字段的值是否为 null,为 null 则返回预先设定的值;有点像编程里面的三元表达式(只可意会不可言传,不懂三元表达式就忽略吧~) if 的语法格式 IFNULL(v1,v2) 语法格式说明 如果 v1 不为 NULL,则 IFNULL 函数返回

    1.1K10发布于 2020-06-09
  • 来自专栏Ethereum

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

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

    38710编辑于 2025-08-27
  • 来自专栏python3

    python-3_函数_匿名函数_正则_

    函数一起使用,可以使函数中断并保存函数的中断状态,yield,可以减少程序的阻塞 例子: def run():     print "test1"     yield 1                函数函数中可以直接修改全局的列表 字典等复杂的数据类型。 lambda函数(匿名函数): def f(x):    return x**2     g = lambda x:x**2  匿名函数的写法 print map(f,range(10))   把列表输入函数运算 ,再返回结果 print map(lambda x:x**2,range(10)) sorted()用法:例子是对字典key进行排序(虽然字典是无序的) dic1={3:2,4:3,6:9,'a': ]  b=[5,6,7,8,9,10] zip(a,b) [(1,5),(2,6),(3,7),(4,8)] map(None,a,b) [(1,5),(2,6),(3,7),(4,8),(none,9

    46510发布于 2020-01-11
  • 来自专栏python3

    Python基础3 函数、递归、内置函数

    函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用:  去重 关系测试, 交集\差集\并集\反向(对称)差集 >>> a = {1,2,3,4} >>> b ={3,4,5,6} >>> a {1, 2, 3, 4} >>> type(a 3.返回值  要想获取函数的执行结果,就可以用return语句把结果返回 注意: 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束         print("第3层打印",name)       change_name2() #调用内层函数     print("第2层打印",name)     change_name() print 每次进入更深一层递归时,问题规模相比上次递归都应有所减少 3

    69820发布于 2020-01-08
  • 来自专栏Docker 部署服务命令

    Python3 函数

    /usr/bin/python3 # 定义函数 def printme( str ): # 打印任何传入的字符串 print (str) return # 调用函数 printme("我要调用用户自定义函数 再次调用同一函数 ---- 参数传递 在 python 中,类型属于对象,变量是没有类型的: a=[1,2,3] a="Runoob" 以上代码中,[1,2,3] 是 List 类型,"Runoob" /usr/bin/python3 # 可写函数说明 def changeme( mylist ): "修改传入的列表" mylist.append([1,2,3,4]) print ("函数内取值 故输出结果如下: 函数内取值: [10, 20, 30, [1, 2, 3, 4]] 函数外取值: [10, 20, 30, [1, 2, 3, 4]] ---- 参数 以下是调用函数时可使用的正式参数类型 ) print (vardict) # 调用printinfo 函数 printinfo(1, a=2,b=3) 以上实例输出结果: 输出: 1 {'a': 2, 'b': 3} 声明函数时,参数中星号

    1.3K20编辑于 2021-12-02
  • 来自专栏python3

    python3 函数

    位置参数:sys.argv[XX] 代码名称、函数、变量不可以与系统默认参数、模块名字相同 if __name__ == '__main__': __name__: 在主动调用的时候返回__ 前向引用: def foo(): print('in foo') bar() #此时函数的内容并没有执行,当调用的时候才开始真正的执行函数 #foo () 如果这个时候调用foo()函数的话,会报错,因为bar函数还没有生成 def bar(): print('in bar') foo() 内部函数/内嵌函数: bar()只能在foo函数内部调用,foo函数结束bar则结束,类似于局部变量的意思 函数操作符: 使用一对圆括号()调用函数,如果没有圆括号,只是对函数的引用 任何输入的参数都必须放置在括号中 调用:把函数执行一遍 引用:把函数本身指向引用者 >>> def func(): ...

    77720发布于 2020-01-03
  • 来自专栏风吹杨柳

    opencv 3 -- waitKey()函数

    函数功能: waitKey()函数的功能是不断刷新图像,频率时间为delay,单位为ms 返回值为当前键盘按键值 1、waitKey()–是在一个给定的时间内(单位ms)等待用户按键触发; 则表示程序会无限制的等待用户的按键事件 一般在imgshow的时候,如果设置waitKey(0),代表按任意键继续 2.显示视频时,延迟时间需要设置为 大于0的参数 delay>0时,延迟”delay”ms,在显示视频时这个函数是有用的 , 用于设置在显示完一帧图像后程序等待”delay”ms再显示下一帧视频; 如果使用waitKey(0)则只会显示第一帧视频 3.这样的代码: if cv2.waitKey(100) == 27 print 'wait 100 ms' pass 等待用户触发事件,等待时间为100ms, 如果在这个时间段内, 用户按下ESC(ASCII码为27),执行if体 如果没有按,if函数不做处理

    1.8K20发布于 2019-07-08
  • 来自专栏yifei的专栏

    python3_函数

    python函数。 python函数 #! 1) =', quadratic(2, 3, 1)) print('quadratic(1, 3, -4) =', quadratic(1, 3, -4)) if quadratic(2, 3, 1 =', kw) def f2(a, b, c=0, *, d, **kw): print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw) 在函数调用的时候 = 99 kw = {'ext': None} 最神奇的是通过一个tuple和dict,你也可以调用上述函数: >>> args = (1, 2, 3, 4) >>> kw = {'d': 99, ' 3) >>> kw = {'d': 88, 'x': '#'} >>> f2(*args, **kw) a = 1 b = 2 c = 3 d = 88 kw = {'x': '#'} 所以,对于任意函数

    40820编辑于 2022-11-14
  • 来自专栏python3

    Python3 函数

    分类: 内建函数 自定义函数 说明: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数 函数的第一行语句可以选择性地使用文档字符串 —用于存放函数说明 函数内容以冒号起始,并且缩进 return [表达式] 结束函数,选择性地返回一个值给调用方。 示例3(有返回值函数): #! ); 代码截图3: ? 运行截图3: ?

    67810发布于 2020-01-03
  • 来自专栏气象杂货铺

    Basemap工具函数(3)

    一些函数(比如 barbs,quiver,streamplot)使用的是向量数据,要求向量分量是地图坐标系(比如 u 是左右方向,v 是上下方向)。 y3 = map(45, 45) plt.plot([x1, x2, x3], [y1, y2, y3], color='k', linestyle='-', linewidth=2) ax1 = 注意结果和预期不同,因为经度在正确区间外 shiftgrid 此函数和 shiftdata 方法类似。向西或向东以东所有经度和数据。 basemap.shiftgrid(lon0, datain, lonsin, start=True, cyclic=360.0) 注意这不是 basemap实例方法,而是basemap模块中的函数 lon 如果 lon0是经度的初始点或是输出数组的最后一个点,要设置 start cyclic 设置经度值,经度在[0 lon0]区间 函数返回被排序后的数据和转换后的经度 注意: 和 shiftdata 的主要差异是

    1.4K30发布于 2020-04-21
  • 来自专栏python3

    Python3函数

    Python3 函数 函数文字定义:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段;函数能提高应用的模块性,和代码的重复利用率。 输出 [6, 7, 4, 3, 8] # 示例3,默认值只分配一次 #! (x,y) calc(2,5) 输出 x+y: 7 x-y: -3 # 返回值为函数本身 #! (x,y) return mul # 返回 mul函数本身,可以赋给变量 calc(3,5) 输出 x+y: 8 x-y: -2 <function __main__.calc. <locals>.mul(x, y)> c = calc(3,5) # c 被赋值为mul函数 输出 x+y: 8 x-y: -2 闭包 函数返回值为内部函数的名字,内部函数又处理外层函数变量;这个整体叫闭包

    1.4K10发布于 2020-01-03
  • 来自专栏深入浅出区块链技术

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

    36] JUMPDEST [37] DUP1 [38] REVERT // 可以看出来,实际上上面代码完成的,就是TransientContract合约构造函数的主要内容。 caller 去执行selfdestruct来销毁合约。 比如主网的这个: > web3.utils.sha3("0xd69410ca1adca9ff38988d75dd1f6ee19b1a6bfa919701").slice(-40); '00000000002b13cccec913420a21e4d11b2dcd3c destroy 有了上面deploy的解释,那这个函数就不难理解了,调用selfdesctruct函数销毁部署的合约。 临时合约 selfdestruct,将钱转到最终合约。

    87520编辑于 2022-11-07
  • 来自专栏字节脉搏实验室

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

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

    1.8K40发布于 2020-03-31
  • 来自专栏Laoqi's Linux运维专列

    python3函数

    : def plus(a,b,c): return a+b+c print(plus(1,2,3)) ## 匿名函数 aa = lambda x,y,z:x+y+z print(aa(3,3,3 分析: ##申明一个函数,第一个参数是整形,第二个参数是list ##l的默认值是空 也就是说当传入的参数为2的时候此时的l值为空,输出的值为 [0, 1] 但是当x传入3,l传入[3,2,1]的时候, [3, 7, 11, 15, 19] map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串: () reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是: reduce(f, [x1, x2 y print(reduce(add, [1, 2, 3, 4])) 输出: 10 当然求和运算可以直接用Python内建函数sum(),没必要动用reduce。

    1.9K50发布于 2018-05-09
  • 来自专栏Laoqi's Linux运维专列

    python3函数

    定义一个函数 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。 world 再来个实例: def fun(a, *hehe, **hahaha): print("{0}--{1}--{2}".format(a, hehe, hahaha)) fun(1,2,3,4,5 ,x=1,y=2) 输出: 1--(2, 3, 4, 5)--{'x': 1, 'y': 2} 分析: 我使用了–来分割,可以看出来其中的赋值如下: a = 1 hehe = 2, 3, 4, 5 : def plus(a,b,c): return a+b+c print(plus(1,2,3)) ## 匿名函数 aa = lambda x,y,z:x+y+z print(aa(3,3,3 无参数匿名函数: t = lambda : True print (t) 输出: True 默认参数: lambda x,y=3: x*y #允许参数存在默认值 a = lambda *z:z #*z

    1K110发布于 2018-05-09
领券