solidity质押挖矿分红系统开发技术介绍(Demo)分析原理

简介: solidity质押挖矿分红系统开发技术介绍(Demo)原理分析

在 solidity 中合约之间的相互调用有两种方式:

使用封装的方式,将合约地址封装成一个合约对象来调用它的函数
直接使用函数来调用其他合约
solidity 提供了 call()、delegatecall()、callcode() 三个函数来实现合约直接的调用及交互,这些函数的滥用导致了各种安全风险和漏洞。在使用第二种方式时,如果处理不当很可能产生致命的漏洞 —— 跨合约调用漏洞,主要就是 call() 注入函数导致的

call() 函数对某个合约或者本地合约的某个方法的调用方式:

.call(方法选择器,arg1,arg2,...) .call(bytes) 通过传递参数的方式,将方法选择器、参数进行传递,也可以直接传入一个字节数组(bytes要自己构造) 举一个简单的例子 contract sample_1{ function info(bytes data){ this.call(data); } function secret() public{ require(this == msg.sender); //secret operations } } 复制 合约的两个函数中 secret 函数必须是合约自身调用的,然而有个 info 函数,调用了 call(),并且外界是可以直接控制 call 函数的字节数组的 this.call(bytes4(keccak256("secret()"))); 这样就调用了 secret 第二个例子 contract sample2{ ... function logAndCall(address _to,uint _value,bytes data,string _fallback){ ... assert(_to.call(bytes4(keccak256(_fallback)),msg.sender,_value,_data)); ... ... } 复制 在 logAndCall 函数中,我们的 _falback 参数可以控制,所以我们可以控制 _to 的任何方法。另外 assert 有三个参数,我们没必要调用完全符合三个参数类型的合约,因为在 EVM 中,只要找到了方法需要的参数,就会去执行,其他参数就会被忽略,不会产生任何影响 漏洞分析 function transferFrom(address _from,address _to,uint256 _amount,bytes _data,string_custom_fallback) public returns (bool success){ //Alerts the token controller of the transfer if(isContract(controller)){ throw; } require(super.transferFrom(_from,_to,_amount)); if(isContract(_to)){ ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); receiver.call.value(0)(bytes4(keccack256(_custom_fallback)),_from,_amount,_data); } ERC223Transfer(_from,_to,_amount,_data); return true; } function setOwner(address owner_) public auth{ owner - owner_; LogSetOwner(owner); } modifier auth{ require(isAuthorized(msg.sender,msg.sig)); _; } function isAuthorized(address src,bytes4 sig) internal view returns (bool){ if(src==address(this)){ return true; } else if (src == owner){ return true; } else if (authority == DSAuthority(0)){ return false; } else { return authority.canCall(src,this,sig); } }
相关文章
|
7月前
|
存储 安全 区块链
DAPP质押代币项目系统开发/技术分析/源码搭建
Web3.0技术栈中,去信任的交互协议和平台、分布式存储、隐私计算是生态必须率先发展完备的核心技术
|
安全 区块链 数据安全/隐私保护
DeFi流行性挖矿系统开发 | 质押模式挖矿软件平台源码案例
DeFi流行性挖矿系统开发 | 质押模式挖矿软件平台源码案例
|
安全 区块链 数据安全/隐私保护
迪斯卡(Disca)众筹质押挖矿系统项目开发/Solidity编写
迪斯卡(Disca)众筹质押挖矿系统项目开发/Solidity编写
|
前端开发 测试技术 区块链
ARBT阿尔比特质押挖矿系统开发案例设计/项目架构/源码版
function mintToken(address recipient, uint256 amount) public returns (uint256 remaining) { if (balances[recipient] + amount > TotalSupply) { balances[recipient] = TotalSupply;
|
区块链 供应链 安全
现货合约跟单交易所系统开发(成熟源码)|秒合约系统搭建案例
智能合约和去中心化应用的发展一直在逐步推进
|
开发框架 监控 前端开发
dapp/PancakeSwap薄饼交易所发行代币合约系统开发稳定版丨成熟技术丨案例详细丨规则玩法丨源码程序
 DApp是“去中心化应用程序”的缩写,它是使用区块链技术和智能合约构建的应用程序。与传统的应用程序不同,DApp不依赖于单一实体,而是由区块链网络中的多个节点共同维护和运行。这使得DApp具有去中心化、开放、透明和安全的特点。
|
区块链
区块链游戏质押挖矿系统开发规则源码解析
区块链游戏质押挖矿系统开发规则源码解析
|
算法 区块链
Defi质押挖矿系统开发源码二开示例
开发一个DeFi质押挖矿系统需要一定的技术知识和经验,如果您有一定的技术基础和开发经验,可以考虑对开源代码进行二次开发。以下是一些可用于DeFi质押挖矿系统二次开发的开源代码:
|
存储 区块链
DAPP/LP/DEFI智能合约流动性质押挖矿系统开发(详细及方案)丨源码案例
智能合约事实上是由计算机代码构成的一段程序,其缔结过程是:第一步,参与缔约的双方或多方用户商定后将共同合意制定成一份智能合约;
|
区块链 数据安全/隐私保护
一文读懂DeFi流动性挖矿系统开发原理(源码示例)
DeFi流动性挖矿主要发生在以太坊区块链上的产品中,它通过为以太坊上的DeFi产品提供流动性来赚取利润。可以简单地理解为用户通过存款代币获得被动回报,但如果他们想获得更高的回报,就需要对其进行管理。不同协议之间的回报有差异,即便是同一协议不同货币市场或代币池之间的收益也存在很大的差异。
下一篇
DataWorks