对区块链中蜜罐智能合约相关内容的学习与分析——基于The phenomenon of smart contract honeypots

智能合约代币_如何通过SOL币进行智能合约的开发与应用_智能合约开发工具

条件成立的情形

智能合约代币_智能合约开发工具_如何通过SOL币进行智能合约的开发与应用

在蜜罐智能合约中,msg.value >= this.balance 这个条件不一般。只有原余额是0,转账数量也是0时,它才会成立。这是个关键判断点,在合约运行时有限制作用。比如实际操作中,要是想做某种交易,就得留意这个条件是否满足。不然可能导致交易失败,或者出现异常情况。

智能合约开发工具_智能合约代币_如何通过SOL币进行智能合约的开发与应用

竞猜金额要求

合约有规定。每次竞猜都要发送至少0.1个以太币。也就是require(amount = betPrice)。这是参与竞猜者的硬性门槛。让参与竞猜有了成本。市场上这种规定常见。能保证竞猜活动有资金量和活跃性。

智能合约开发工具_智能合约代币_如何通过SOL币进行智能合约的开发与应用

地址修改差异

智能合约开发工具_智能合约代币_如何通过SOL币进行智能合约的开发与应用

msg.value大于jackopt时,KingOfTheHill里的owner会被改成发送者的地址。不过,Owned里的owner还是合约创建人的地址。这种差异在合约执行时很关键。它可能致使权限和资金流向不一样。在一些操作里,不同的“所有者”设置,也许会对相应功能能否顺利执行产生影响。

智能合约开发工具_如何通过SOL币进行智能合约的开发与应用_智能合约代币

函数调用判断

调用蜜罐智能合约firstTestwithdrawal()时。emails.delegatecall(bytes4(sha3("logEvent()")));会进行判断。判断的是第一个变量Owner。看它是不是0x46FEEB381E90F7E30635B4F33CE3F6FA8EA6ED9B。要是相等,那就把adr设置成当前合约的地址。这一逻辑在合约安全检查里相当关键。它保障了只有符合条件的地址,才能够进行相关操作。

转账数值示例

就拿转1 ether来讲,msg.value = 1000000000000000000 (wei)。这清晰地表明了在智能合约中,转账金额的具体呈现形式。在实际进行转账操作时,知晓这种转换关系十分重要。不然的话,很容易出现转账金额有误等问题。

数据类型说明

智能合约开发工具_智能合约代币_如何通过SOL币进行智能合约的开发与应用

使用var i的时候,i的数据类型会是uint8。这能在Solidity官方手册里查到。明确数据类型对合约编程很关键。不同数据类型有不同取值范围和运算规则。要是不留意数据类型,合约运行时可能会出现意外错误。

智能合约代币_如何通过SOL币进行智能合约的开发与应用_智能合约开发工具

循环运行机制

只要转账超过0.1 ether,并且调用Test()。就会进入循环。最终得到amountToTransfer的值。然后把相应的wei发送给访问者。在不考虑整数溢出时。amountToTransfer将会是msg.value * 2。这种机制看起来挺简单。然而它存在一定风险。这是因为整数溢出有可能改变循环的运行逻辑。

整数溢出影响

因为for循环里的i有整数溢出情况,当i等于255时执行i++,之后i变为0,这使得multi等于0< amountToTransfer,提前终止了循环。这种情况在编程中是个比较隐蔽的问题,如果不仔细检查和处理,可能会给合约带来安全隐患和错误的结果。

<b>调用处理变化</b>

调用send(from,to,"",amount)时,编译器处理后的调用变为send(from,to,amount)。这一变化展现了编译器处理函数调用的规则。了解这些规则,能助开发者更好编写代码,避免因编译器处理而出错。

智能合约代币_智能合约开发工具_如何通过SOL币进行智能合约的开发与应用

<b>编译版本影响</b>

Remix里把编译器版本改成0.4.11+commit.68ef5810.Emscripten.clang后,执行divest()函数,结果不一样了。不同编译器版本或许会给合约代码带来不同影响。这就需要开发者在开发时谨慎挑选编译器版本,以此确保合约能正常运行。

智能合约代币_如何通过SOL币进行智能合约的开发与应用_智能合约开发工具

<b>取款调用问题</b>

调用divest()取出存进去的钱时。最终会调用this.loggedTransfer(amount, "", msg.sender, owner);。但因编译器有bug。最终调用的是this.loggedTransfer(amount, msg.sender, owner);。具体转账函数处为owner.call.value(amount)`。因编译器存在漏洞而导致的调用错误,有可能致使资金转账出现差错,进而给投资者造成损失。

了解了诸多蜜罐智能合约的运行机制与潜在问题后。你觉得使用智能合约时。最需留意的是哪方面?赶紧点赞分享本文。留言说说你的看法。

作者头像
imtoken钱包创始人

imtoken官网

上一篇:十九届中央财经委员会第七次会议聚焦数字货币及相关国际合作要点
下一篇:LINK与智能合约深度绑定:Chainlink如何成为连接现实与区块链的桥梁