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

    Solidity - 浆糊日记-address,balance,owner,this,msg.sender

    1607584987(1).png 1607584957(1).png msg.sender:值类型为 address,表示当前操作者的 address; address(msg.sender).balance [待定,需要确定一下]; balanceOf(msg.sender): 值类型为uint256,这个是 在contract中定义了一个变量 mapping(address => uint256) public

    2.2K30发布于 2020-12-10
  • 来自专栏深入浅出区块链技术

    WETH10 - 更高效的 WETH

    = address(this)); _balanceOf[msg.sender] += msg.value; emit Transfer(address(0), msg.sender = msg.sender) { uint256 allow = allowance[from][msg.sender]; if (allow ! (0), msg.sender, value); FlashMinterLike(msg.sender).executeOnFlashMint(value, data); require(_balanceOf[msg.sender] >= value, "! balance"); _balanceOf[msg.sender] -= value; emit Transfer(msg.sender, address(0), value

    1.7K30发布于 2020-11-03
  • 来自专栏用户9880750的专栏

    DAPP区块链公排互助系统开发丨技术分析搭建

    users[msg.sender].isExist, 'User exist'); require(_referrerID > 0 && _referrerID <= currUserID ] = userStruct; userList[currUserID] = msg.sender; users[msg.sender].levelExpired[1] = (1, msg.sender); emit regLevelEvent(msg.sender, userList[_referrerID], now); } function ] == 0) users[msg.sender].levelExpired[_level] = now + PERIOD_LENGTH; else users[msg.sender ].levelExpired[_level] += PERIOD_LENGTH; } payForLevel(_level, msg.sender); emit

    53200编辑于 2022-11-05
  • 来自专栏用户9880750的专栏

    深度了解量化合约对冲模式系统开发功能逻辑介绍

    ]:from账户给合约调用者的账户的额度 require(_value <= allowance[_from][msg.sender]); allowance[_from][ msg.sender]-=_value; _transfer(_from,_to,_value); return true; } //授权 function ][_spender] = _value; emit Approval(msg.sender,_spender,_value); return true; } totalSupply -= _value; emit Burn(msg.sender,_value); return true; } //在授权额度内销毁别人的代币 ]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply

    39910编辑于 2022-08-11
  • 来自专栏问题解决

    Solidity-浆糊日记-msg.value-Ether Units (wei, finney, szabo, ether)

    uint256 contract_account_balance); constructor() public payable { emit AddressBalanceShow(msg.sender , address(msg.sender).balance, address(this).balance); } function deposit() public payable { emit AddressBalanceShow(msg.sender, address(msg.sender).balance, address(this).balance); uint256 _value) public payable { msg.sender.transfer(_value); emit AddressBalanceShow(msg.sender , address(msg.sender).balance, address(this).balance); } }

    3.3K40发布于 2020-12-10
  • 来自专栏AI SPPECH

    036_访问控制在合约中详解:从Ownable到2025年多签治理,构建智能合约的安全权限体系

    ); } // 修饰器:限制只有所有者可以调用 modifier onlyOwner() { require(owner() == msg.sender = address(0), "Transfer to zero address"); require(_balances[msg.sender] >= amount, "Insufficient balance"); _balances[msg.sender] -= amount; _balances[to] += amount; ; } modifier onlyAdmin() { require(msg.sender == _admin, "Not admin"); _ (msg.sender); require(weight > 0, "No voting weight"); proposal.hasVoted[msg.sender

    36310编辑于 2025-11-19
  • 来自专栏极客编程

    用工厂模式管理以太坊的多个solidity智能合约

    function createCounter() public { if (counters[msg.sender] == 0) { counters[msg.sender] = = 0); Counter(counters[msg.sender]).increment(msg.sender); } 最后,为了读取计数器的值,我们将用户的地址作为参数来获取计数器的值。 ] == 0) { counters[msg.sender] = new Counter(msg.sender); } } function increment() public { require (counters[msg.sender] ! = 0); Counter(counters[msg.sender]).increment(msg.sender); } function getCount(address

    1.1K30发布于 2018-12-10
  • 来自专栏用户9880750的专栏

    关于币安链智能合约模式系统开发解析

    _from,address _to,uint256 _value)public returns(bool success){  require(_value<=allowance[_from][msg.sender ]);//Check allowance  allowance[_from][msg.sender]-=_value;  _transfer(_from,_to,_value);  return true ;  }  function approve(address _spender,uint256 _value)public  returns(bool success){  allowance[msg.sender ]>=_value);  balanceOf[msg.sender]-=_value;  totalSupply-=_value;  Burn(msg.sender,_value);  return ]);  balanceOf[_from]-=_value;  allowance[_from][msg.sender]-=_value;  totalSupply-=_value;  Burn(_from

    61920编辑于 2022-08-15
  • 来自专栏Seebug漏洞平台

    以太坊合约审计 CheckList 之“以太坊智能合约规范问题”影响分析报告

    ); if (balances[msg.sender] >= _amount && _amount > 0) { initialize( _to); if (balances[_to] + _amount > balances[_to]) { balances[msg.sender 构造函数大小写错误漏洞 contract own(){ function Own() { owner = msg.sender; } } 上述代码错误的将构造函数名大写, = address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances = address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances

    91020发布于 2018-08-16
  • 来自专栏Netkiller

    竞猜活动区块链方案探索

    name = _name; quota = _quota; number = 0; } modifier onlyOwner { require(msg.sender require(start == ture); if (number >= quota) { return false; } registrantsPaid[msg.sender ] == _password); delete registrantsPaid[msg.sender]; number--; } function setGuess (uint _answer) public{ require(start == ture); if(maxCounter > counter[msg.sender]){ counter[msg.sender]++; answer[answerIndex] = Answer(msg.sender, _answer);

    2.4K100发布于 2018-03-27
  • 来自专栏LoRexxar's Blog

    blockwell.ai 虚假转账 事件分析

    = address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances ][_spender] = _value; Approval(msg.sender, _spender, _value); return ); } Approval(msg.sender, _spender, allowance[msg.sender][_spender]); [msg.sender].sub(arg1); balances[arg0] = balances[arg0].add(arg1); emit Transfer(msg.sender ][arg0] = allowance[msg.sender][arg0].add(arg1) emit Approval(msg.sender, arg0, arg1)

    38120编辑于 2023-02-21
  • 来自专栏Seebug漏洞平台

    以太坊合约审计 CheckList 之变量覆盖问题

    } if (map.length <= uint256(msg.sender)+x) { map.length = uint256(msg.sender)+x + uint256(msg.sender)+x])! fallback函数 function (){ if(map.length>=uint256(msg.sender)){ require(map[uint256(msg.sender if (map.length <= uint256(msg.sender)) { map.length = uint256(msg.sender) + 1; if (map.length <= uint256(msg.sender)+x) { map.length = uint256(msg.sender)+x + 1; }

    81820发布于 2018-12-14
  • 来自专栏Ethereum

    《纸上谈兵·solidity》第 26 课:借贷合约简化实现

    ].collateralETH += msg.value; if (accounts[msg.sender].lastAccrued == 0) { accounts [msg.sender].lastAccrued = block.timestamp; } emit Deposit(msg.sender, msg.value); } ); Account storage account = accounts[msg.sender]; require(account.collateralETH > 0, " , amount); emit Borrow(msg.sender, amount); } /// @notice 还款 /// @dev 用户可以通过此函数还款 Account storage account = accounts[msg.sender]; require(account.debt >= amount, "repay too much

    33610编辑于 2025-09-04
  • 来自专栏我的知识小屋

    web3 solidity 基础 ERC20 大白话搞懂

    ]>amount);//判断钱够不够 balances[msg.sender] = balances[msg.sender]-amount;//原账户减去给自己 balances[account map 中添加一个记录,msg.sender 是我自己的地址,那意思就是我自己授权给了 spender 一个金额,这个金额是 amount。 ]); balances[from] = balances[from]-amount; appbalances[from][msg.sender] = appbalances[from][msg.sender ]>amount);//判断钱够不够 balances[msg.sender] = balances[msg.sender]-amount;//原账户减去给自己 balances ]>amount);//判断钱够不够 balances[msg.sender] = balances[msg.sender]-amount;//原账户减去给自己 balances

    96410编辑于 2022-10-28
  • 来自专栏cwl_Java

    快速学习-ERC20 代币合约

    send */ function transfer(address _to, uint256 _value) public returns(bool success) { _transfer(msg.sender ]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return ][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * Set allowance ] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply emit Burn(msg.sender, _value); return true

    77610发布于 2020-04-16
  • 来自专栏终有链响

    智能合约中未授权访问

    ] >= amount, "Insufficient balance"); payable(msg.sender).transfer(amount); balances[ msg.sender] -= amount; } } 在这个合约中,withdraw函数可以直接被任何地址调用,只要该地址有足够余额即可。 ; } modifier onlyOwner() { require(msg.sender == owner, "Only the contract owner can ] >= amount, "Insufficient balance"); payable(msg.sender).transfer(amount); balances[ msg.sender] -= amount; } } 现在,只有合约的创建者(即owner)可以调用withdraw函数。

    52010编辑于 2024-07-29
  • 来自专栏区块链入门

    慢雾科技:智能合约 transferFrom 权限控制不当导致的任意盗币攻击简述

    批准目标可以代我转账的上限) function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender ][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } // 代我转账的流程 function from] + balances[_to]; balances[_from] -= _value; balances[_to] += _value; allowed[_from][msg.sender ] 和 _value 的判断,比如函数开始应该判断: require(allowed[_from][msg.sender] >= _value); 如果 allowed[_from][msg.sender 然后,这还出现了个有趣的溢出: allowed[_from][msg.sender] -= _value; 当 allowed[_from][msg.sender] 不存在,那么值是 0,减去 _value

    93020发布于 2018-08-10
  • 来自专栏Seebug漏洞平台

    blockwell.ai KYC Casper Token “牛皮癣广告” 事件分析

    ][_spender] = _value; Approval(msg.sender, _spender, _value); return ] = allowance[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return ); } Approval(msg.sender, _spender, allowance[msg.sender][_spender]); [msg.sender].sub(arg1); balances[arg0] = balances[arg0].add(arg1); emit Transfer(msg.sender ][arg0] = allowance[msg.sender][arg0].add(arg1) emit Approval(msg.sender, arg0, arg1)

    68320发布于 2018-10-23
  • 来自专栏Netkiller

    竞猜活动区块链方案探索

    name = _name; quota = _quota; number = 0; } modifier onlyOwner { require(msg.sender require(start == ture); if (number >= quota) { return false; } registrantsPaid[msg.sender ] == _password); delete registrantsPaid[msg.sender]; number--; } function setGuess (uint _answer) public{ require(start == ture); if(maxCounter > counter[msg.sender]){ counter[msg.sender]++; answer[answerIndex] = Answer(msg.sender, _answer);

    3.8K230发布于 2018-03-09
  • 来自专栏犀牛饲养员的技术笔记

    用一个示例入门solidity编程语言

    ; } function deposit() public payable returns (uint) { require((balances[msg.sender ] + msg.value) >= balances[msg.sender]); balances[msg.sender] += msg.value; emit LogDepositMade (msg.sender, msg.value); // fire event return balances[msg.sender]; } function withdraw ]); balances[msg.sender] -= withdrawAmount; msg.sender.transfer(withdrawAmount); 构造方法只会在程序启动的时候调用一次,这里是把owner变量赋值为msg.sender,后者是一个约定的内部变量,表示的是方法的调用者。在这里当然就是指合约的创建人。

    74320编辑于 2023-02-24
领券