当前位置: 首页 > news >正文

百度做网站投广告成都网页制作培训机构

百度做网站投广告,成都网页制作培训机构,个体做敦煌网站怎么样,深圳市手机网站建设哪家好背景 比如现在有一个需求、我需要通过外部合约获取BRC20 token的总交易量。那么我需要在brc20的转账函数里面做一些调整#xff0c;主要是两个函数内统计转移量。然后再提供外部获取函数。 /*** dev Sets amount as the allowance of spender over the callers tokens.** Ret…背景 比如现在有一个需求、我需要通过外部合约获取BRC20 token的总交易量。那么我需要在brc20的转账函数里面做一些调整主要是两个函数内统计转移量。然后再提供外部获取函数。 /*** dev Sets amount as the allowance of spender over the callers tokens.** Returns a boolean value indicating whether the operation succeeded.** IMPORTANT: Beware that changing an allowance with this method brings the risk* that someone may use both the old and the new allowance by unfortunate* transaction ordering. One possible solution to mitigate this race* condition is to first reduce the spenders allowance to 0 and set the* desired value afterwards:* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729** Emits an {Approval} event.*/function approve(address spender, uint256 amount) external returns (bool);/*** dev Moves amount tokens from sender to recipient using the* allowance mechanism. amount is then deducted from the callers* allowance.** Returns a boolean value indicating whether the operation succeeded.** Emits a {Transfer} event.*/function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);实操 1、定义了一个函数接口 // SPDX-License-Identifier: MIT pragma solidity ^0.8.20;interface Iquery{function getTotalTransferAmount() external view returns (uint256); }2、BRC20 token实现目标函数 // SPDX-License-Identifier: MIT pragma solidity 0.4.0 0.9.0;interface IBEP20 {/*** dev Returns the amount of tokens in existence.*/function totalSupply() external view returns (uint256);/*** dev Returns the token decimals.*/function decimals() external view returns (uint8);/*** dev Returns the token symbol.*/function symbol() external view returns (string memory);/*** dev Returns the token name.*/function name() external view returns (string memory);/*** dev Returns the bep token owner.*/function getOwner() external view returns (address);/*** dev Returns the amount of tokens owned by account.*/function balanceOf(address account) external view returns (uint256);/*** dev Moves amount tokens from the callers account to recipient.** Returns a boolean value indicating whether the operation succeeded.** Emits a {Transfer} event.*/function transfer(address recipient, uint256 amount) external returns (bool);/*** dev Returns the remaining number of tokens that spender will be* allowed to spend on behalf of owner through {transferFrom}. This is* zero by default.** This value changes when {approve} or {transferFrom} are called.*/function allowance(address _owner, address spender) external view returns (uint256);/*** dev Sets amount as the allowance of spender over the callers tokens.** Returns a boolean value indicating whether the operation succeeded.** IMPORTANT: Beware that changing an allowance with this method brings the risk* that someone may use both the old and the new allowance by unfortunate* transaction ordering. One possible solution to mitigate this race* condition is to first reduce the spenders allowance to 0 and set the* desired value afterwards:* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729** Emits an {Approval} event.*/function approve(address spender, uint256 amount) external returns (bool);/*** dev Moves amount tokens from sender to recipient using the* allowance mechanism. amount is then deducted from the callers* allowance.** Returns a boolean value indicating whether the operation succeeded.** Emits a {Transfer} event.*/function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);/*** dev Emitted when value tokens are moved from one account (from) to* another (to).** Note that value may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** dev Emitted when the allowance of a spender for an owner is set by* a call to {approve}. value is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value); }/** dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with GSN meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/ contract Context {// Empty internal constructor, to prevent people from mistakenly deploying// an instance of this contract, which should be used via inheritance.constructor () { }function _msgSender() internal view returns (address) {return msg.sender;}function _msgData() internal view returns (bytes memory) {this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691return msg.data;} }/*** dev Wrappers over Soliditys arithmetic operations with added overflow* checks.** Arithmetic operations in Solidity wrap on overflow. This can easily result* in bugs, because programmers usually assume that an overflow raises an* error, which is the standard behavior in high level programming languages.* SafeMath restores this intuition by reverting the transaction when an* operation overflows.** Using this library instead of the unchecked operations eliminates an entire* class of bugs, so its recommended to use it always.*/ library SafeMath {/*** dev Returns the addition of two unsigned integers, reverting on* overflow.** Counterpart to Soliditys operator.** Requirements:* - Addition cannot overflow.*/function add(uint256 a, uint256 b) internal pure returns (uint256) {uint256 c a b;require(c a, SafeMath: addition overflow);return c;}/*** dev Returns the subtraction of two unsigned integers, reverting on* overflow (when the result is negative).** Counterpart to Soliditys - operator.** Requirements:* - Subtraction cannot overflow.*/function sub(uint256 a, uint256 b) internal pure returns (uint256) {return sub(a, b, SafeMath: subtraction overflow);}/*** dev Returns the subtraction of two unsigned integers, reverting with custom message on* overflow (when the result is negative).** Counterpart to Soliditys - operator.** Requirements:* - Subtraction cannot overflow.*/function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {require(b a, errorMessage);uint256 c a - b;return c;}/*** dev Returns the multiplication of two unsigned integers, reverting on* overflow.** Counterpart to Soliditys * operator.** Requirements:* - Multiplication cannot overflow.*/function mul(uint256 a, uint256 b) internal pure returns (uint256) {// Gas optimization: this is cheaper than requiring a not being zero, but the// benefit is lost if b is also tested.// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522if (a 0) {return 0;}uint256 c a * b;require(c / a b, SafeMath: multiplication overflow);return c;}/*** dev Returns the integer division of two unsigned integers. Reverts on* division by zero. The result is rounded towards zero.** Counterpart to Soliditys / operator. Note: this function uses a* revert opcode (which leaves remaining gas untouched) while Solidity* uses an invalid opcode to revert (consuming all remaining gas).** Requirements:* - The divisor cannot be zero.*/function div(uint256 a, uint256 b) internal pure returns (uint256) {return div(a, b, SafeMath: division by zero);}/*** dev Returns the integer division of two unsigned integers. Reverts with custom message on* division by zero. The result is rounded towards zero.** Counterpart to Soliditys / operator. Note: this function uses a* revert opcode (which leaves remaining gas untouched) while Solidity* uses an invalid opcode to revert (consuming all remaining gas).** Requirements:* - The divisor cannot be zero.*/function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {// Solidity only automatically asserts when dividing by 0require(b 0, errorMessage);uint256 c a / b;// assert(a b * c a % b); // There is no case in which this doesnt holdreturn c;}/*** dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),* Reverts when dividing by zero.** Counterpart to Soliditys % operator. This function uses a revert* opcode (which leaves remaining gas untouched) while Solidity uses an* invalid opcode to revert (consuming all remaining gas).** Requirements:* - The divisor cannot be zero.*/function mod(uint256 a, uint256 b) internal pure returns (uint256) {return mod(a, b, SafeMath: modulo by zero);}/*** dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),* Reverts with custom message when dividing by zero.** Counterpart to Soliditys % operator. This function uses a revert* opcode (which leaves remaining gas untouched) while Solidity uses an* invalid opcode to revert (consuming all remaining gas).** Requirements:* - The divisor cannot be zero.*/function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {require(b ! 0, errorMessage);return a % b;} }/*** dev Contract module which provides a basic access control mechanism, where* there is an account (an owner) that can be granted exclusive access to* specific functions.** By default, the owner account will be the one that deploys the contract. This* can later be changed with {transferOwnership}.** This module is used through inheritance. It will make available the modifier* onlyOwner, which can be applied to your functions to restrict their use to* the owner.*/ contract Ownable is Context {address private _owner;event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);/*** dev Initializes the contract setting the deployer as the initial owner.*/constructor () {address msgSender _msgSender();_owner msgSender;emit OwnershipTransferred(address(0), msgSender);}/*** dev Returns the address of the current owner.*/function owner() public view returns (address) {return _owner;}/*** dev Throws if called by any account other than the owner.*/modifier onlyOwner() {require(_owner _msgSender(), Ownable: caller is not the owner);_;}/*** dev Leaves the contract without owner. It will not be possible to call* onlyOwner functions anymore. Can only be called by the current owner.** NOTE: Renouncing ownership will leave the contract without an owner,* thereby removing any functionality that is only available to the owner.*/function renounceOwnership() public onlyOwner {emit OwnershipTransferred(_owner, address(0));_owner address(0);}/*** dev Transfers ownership of the contract to a new account (newOwner).* Can only be called by the current owner.*/function transferOwnership(address newOwner) public onlyOwner {_transferOwnership(newOwner);}/*** dev Transfers ownership of the contract to a new account (newOwner).*/function _transferOwnership(address newOwner) internal {require(newOwner ! address(0), Ownable: new owner is the zero address);emit OwnershipTransferred(_owner, newOwner);_owner newOwner;} } import contracts/test/testQuery/Iqery.sol; contract BEP20Token is Context, IBEP20, Ownable,Iquery {using SafeMath for uint256;uint256 public totalTransferAmount ;mapping (address uint256) private _balances;mapping (address mapping (address uint256)) private _allowances;uint256 private _totalSupply;uint8 private _decimals;string private _symbol;string private _name;constructor() public {_name cor4 tokne;_symbol cor4 ;_decimals 18;_totalSupply 1000000000000000 *10**18;_balances[msg.sender] _totalSupply;emit Transfer(address(0), msg.sender, _totalSupply);}// 添加一个视图函数允许其他合约读取totalTransferAmountfunction getTotalTransferAmount() public view returns (uint256) {return totalTransferAmount;}/*** dev Returns the bep token owner.*/function getOwner() external view returns (address) {return owner();}/*** dev Returns the token decimals.*/function decimals() external view returns (uint8) {return _decimals;}/*** dev Returns the token symbol.*/function symbol() external view returns (string memory) {return _symbol;}/*** dev Returns the token name.*/function name() external view returns (string memory) {return _name;}/*** dev See {BEP20-totalSupply}.*/function totalSupply() external view returns (uint256) {return _totalSupply;}/*** dev See {BEP20-balanceOf}.*/function balanceOf(address account) external view returns (uint256) {return _balances[account];}/*** dev See {BEP20-transfer}.** Requirements:** - recipient cannot be the zero address.* - the caller must have a balance of at least amount.*/function transfer(address recipient, uint256 amount) external returns (bool) {_transfer(_msgSender(), recipient, amount);totalTransferAmount amount;return true;}/*** dev See {BEP20-allowance}.*/function allowance(address owner, address spender) external view returns (uint256) {return _allowances[owner][spender];}/*** dev See {BEP20-approve}.** Requirements:** - spender cannot be the zero address.*/function approve(address spender, uint256 amount) external returns (bool) {_approve(_msgSender(), spender, amount);return true;}/*** dev See {BEP20-transferFrom}.** Emits an {Approval} event indicating the updated allowance. This is not* required by the EIP. See the note at the beginning of {BEP20};** Requirements:* - sender and recipient cannot be the zero address.* - sender must have a balance of at least amount.* - the caller must have allowance for senders tokens of at least* amount.*/function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) {_transfer(sender, recipient, amount);_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, BEP20: transfer amount exceeds allowance));totalTransferAmount amount;return true;}/*** dev Atomically increases the allowance granted to spender by the caller.** This is an alternative to {approve} that can be used as a mitigation for* problems described in {BEP20-approve}.** Emits an {Approval} event indicating the updated allowance.** Requirements:** - spender cannot be the zero address.*/function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));return true;}/*** dev Atomically decreases the allowance granted to spender by the caller.** This is an alternative to {approve} that can be used as a mitigation for* problems described in {BEP20-approve}.** Emits an {Approval} event indicating the updated allowance.** Requirements:** - spender cannot be the zero address.* - spender must have allowance for the caller of at least* subtractedValue.*/function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, BEP20: decreased allowance below zero));return true;}/*** dev Creates amount tokens and assigns them to msg.sender, increasing* the total supply.** Requirements** - msg.sender must be the token owner*/function mint(uint256 amount) public onlyOwner returns (bool) {_mint(_msgSender(), amount);return true;}/*** dev Moves tokens amount from sender to recipient.** This is internal function is equivalent to {transfer}, and can be used to* e.g. implement automatic token fees, slashing mechanisms, etc.** Emits a {Transfer} event.** Requirements:** - sender cannot be the zero address.* - recipient cannot be the zero address.* - sender must have a balance of at least amount.*/function _transfer(address sender, address recipient, uint256 amount) internal {require(sender ! address(0), BEP20: transfer from the zero address);require(recipient ! address(0), BEP20: transfer to the zero address);_balances[sender] _balances[sender].sub(amount, BEP20: transfer amount exceeds balance);_balances[recipient] _balances[recipient].add(amount);emit Transfer(sender, recipient, amount);}/** dev Creates amount tokens and assigns them to account, increasing* the total supply.** Emits a {Transfer} event with from set to the zero address.** Requirements** - to cannot be the zero address.*/function _mint(address account, uint256 amount) internal {require(account ! address(0), BEP20: mint to the zero address);_totalSupply _totalSupply.add(amount);_balances[account] _balances[account].add(amount);emit Transfer(address(0), account, amount);}/*** dev Destroys amount tokens from account, reducing the* total supply.** Emits a {Transfer} event with to set to the zero address.** Requirements** - account cannot be the zero address.* - account must have at least amount tokens.*/function _burn(address account, uint256 amount) internal {require(account ! address(0), BEP20: burn from the zero address);_balances[account] _balances[account].sub(amount, BEP20: burn amount exceeds balance);_totalSupply _totalSupply.sub(amount);emit Transfer(account, address(0), amount);}/*** dev Sets amount as the allowance of spender over the owners tokens.** This is internal function is equivalent to approve, and can be used to* e.g. set automatic allowances for certain subsystems, etc.** Emits an {Approval} event.** Requirements:** - owner cannot be the zero address.* - spender cannot be the zero address.*/function _approve(address owner, address spender, uint256 amount) internal {require(owner ! address(0), BEP20: approve from the zero address);require(spender ! address(0), BEP20: approve to the zero address);_allowances[owner][spender] amount;emit Approval(owner, spender, amount);}/*** dev Destroys amount tokens from account.amount is then deducted* from the callers allowance.** See {_burn} and {_approve}.*/function _burnFrom(address account, uint256 amount) internal {_burn(account, amount);_approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, BEP20: burn amount exceeds allowance));} } 3、外部合约调用示例 // SPDX-License-Identifier: MIT pragma solidity ^0.8.20;interface Iquery{//声明需要调用的函数function getTotalTransferAmount() external view returns (uint256); }contract queryErc20 {Iquery public factory;//注入合约constructor (Iquery _factory) {factory _factory;}function getTotalTransferAmount2() public view returns (uint256) {return factory.getTotalTransferAmount();}}4、输出
http://www.hkea.cn/news/14581520/

相关文章:

  • 深圳哪个网站建设公司好做风险投资网站
  • 怎样建设个人网站网络服务费计入什么科目
  • 内丘附近网站建设价格网站建设网站维护的具体内容是什么
  • 河北企业建站系统信息开公司要多少注册资金
  • 网站悬浮窗广告怎么做网站建设需要参考哪些文献
  • 百度站长工具如何使用查看网站外链代码
  • 江西省建设协会网站信专业广州网站建设
  • 网站建设廾金手指专业壹陆徐州做网站的哪个好
  • 郴州网站排名优化三网合一 网站
  • 网站内容的排版布局梦之翼wordpress主题站
  • 网站 视觉上wordpress怎么搜索博客
  • 企业多语言网站开发手机设计专用软件
  • 共享经济型网站开发个人承接网站开发项目
  • 怎么做属于自己的音乐网站asp.net mvc 手机网站
  • 高端网站公司自定义表单网站
  • 建设网站注意哪几点重庆妇科医院咨询
  • 五屏网站建设动态wordpress整合ldap
  • 成都网站seo技术上海传媒公司艺人
  • 网站建设公司推江门建站网站模板
  • 阿里云建站视频教程微商城开发发
  • 软件技术有限公司Wordpress百万访问优化
  • 怎么建设官方网站特价锦州网站建设
  • 网站设计与平面设计区别网络热词2021流行语
  • 哪个网站可以做自由行地图做简单网站怎么做
  • 河南省建设工程信息网站宝安做网站
  • 网站建设考试试卷上海微网站制作设计制作
  • 购买网站空间的注意事项网站内容管理平台
  • 网站开发后台服务器功能wordpress移到子目录
  • 永州网站建设开发网站悬浮窗口
  • it网站建设中卫平面设计师招聘