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

wordpress顶栏北京seo外包公司要靠谱的

wordpress顶栏,北京seo外包公司要靠谱的,如何做网站的搜索栏,网站外链快速建设构造函数 构造函数仅在部署合约时调用一次,它的作用主要是初始化一些状态变量。 contract Demo {address public owner;uint public num;constructor(uint _num) {owner msg.sender;num _num;} }函数装饰器 函数装饰器可以在函数执行之前或之后插入代码逻辑&am…

构造函数

构造函数仅在部署合约时调用一次,它的作用主要是初始化一些状态变量。

contract Demo {address public owner;uint public num;constructor(uint _num) {owner = msg.sender;num = _num;}
}



函数装饰器

函数装饰器可以在函数执行之前或之后插入代码逻辑,用于改变函数的行为,比如检查条件、限制访问权限等。

// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;contract Demo {address public owner;constructor() {owner = msg.sender;}// 定义装饰器modifier onlyOwner() {require(msg.sender == owner, "Not the contract owner");_;}// 使用装饰器function changeOwner(address newOwner) public onlyOwner {owner = newOwner;}
}

装饰器可以接收参数 & 函数可以同时使用多个装饰器:

contract Demo {address public owner;constructor() {owner = msg.sender;}// 定义装饰器modifier onlyOwner() {require(msg.sender == owner, "Not the contract owner");_;}// 定义带参数的装饰器modifier validAddress(address _addr) {require(_addr != address(0), "Invalid address");// address(0) is often used to represent an invalid or uninitialized address._;}// 同时使用多个装饰器function changeOwner(address newOwner) public onlyOwner validAddress(newOwner) {owner = newOwner;}
}

三明治装饰器:可以在函数执行之前和之后插入代码逻辑的装饰器。demo - 防止重入攻击:

contract Demo {bool private locked = false;// 定义一个防止重入攻击的装饰器modifier noReentrant() {require(!locked, "No Reentrant");locked = true;_;locked = false;}// 使用装饰器function withdraw() public noReentrant {// 提现逻辑}
}



函数输出

单个返回值:

contract Demo {function getSingleNumber() public pure returns (uint) {return 42;}
}

多个返回值:

contract Demo {function getMultipleNumbers() public pure returns (uint, uint) {return (1, 2);}
}

命名返回值:

contract Demo {function getNamedNumbers() public pure returns (uint first, uint second) {first = 3;second = 4;// 会自动执行 return (first, second)}
}

获取函数返回值:

contract Demo {// ...function callFunctions() public pure returns (uint, uint, uint) {uint singleNumber = getSingleNumber(); // 获取单个返回值(uint multipleNumber1, uint multipleNumber2) = getMultipleNumbers(); // 获取多个返回值return (singleNumber, multipleNumber1, multipleNumber2);}
}



异常处理

Solidity 中的异常处理方法:

contract Demo {// 1. requirefunction testRequire(uint a) public pure returns (uint) {require(a > 10, "a must be greater than 10"); // 若条件不满足, 则触发异常, 并抛出异常信息; 会退还剩余的 gasreturn a;}// 2. revertfunction testRevert(uint a) public pure returns (uint) {if (a <= 10) {revert("a must be greater than 10"); // 触发异常, 并抛出异常信息; 会退还剩余的 gas}return a;}// 3. assertfunction testAssert(uint a) public pure returns (uint) {assert(a > 10); // 若条件不满足, 则触发异常; 会消耗剩余的 gasreturn a;}
}

自定义异常 - 可以自定义异常信息,且更节省 gas :

contract Demo {error MyError(address sender, uint value);function testCustomError(uint a) public view returns (uint) {if (a <= 10) {revert MyError(msg.sender, a); // 触发异常, 并抛出自定义的异常信息}return a;}
}

try catch - 适用于处理外部合约调用失败的情况:

// 外部合约, 用于示例
contract ExternalContract {function mayFail(uint value) public pure returns (uint) {require(value != 0, "Value cannot be zero");return value * 2;}
}// 主合约, 使用 try/catch 处理外部调用
contract TryCatchExample {event Success(uint value);event Failure(string reason);ExternalContract externalContract;constructor() {externalContract = new ExternalContract();}function tryCatchExample(uint value) public {try externalContract.mayFail(value) returns (uint result) {emit Success(result);} catch Error(string memory reason) {// 捕获 require 和 revert 抛出的错误,并返回错误消息emit Failure(reason);} catch (bytes memory) {// 捕获低级别错误(如 assert 抛出的错误),并返回通用错误消息emit Failure("Low-level error");}}
}



事件

contract Demo {event Transfer(address indexed from, address indexed to, uint value); // 定义事件function transfer(address _to, uint _value) public {emit Transfer(msg.sender, _to, _value); // 触发事件}
}

事件的用途:

  • 事件可以用于记录交易日志,帮助调试和监控合约的运行状态。
  • 外部应用程序可以通过以太坊客户端的 RPC 接口订阅和监听这些事件,从而在事件发生时执行相应的操作。

事件的继承:

  • 事件可以在合约中被继承,这使得子合约可以使用父合约定义的事件。

索引参数:

  • 事件参数可以使用 indexed 关键字进行索引,最多可以索引三个参数。
  • 索引参数可以加快事件的搜索和过滤。

监听事件:

外部应用程序(如 DApp)可以使用 Web3.js 等库来监听和处理事件。

const event = contractInstance.Transfer();
event.watch(function (error, result) {if (!error) {console.log(result.args.from, result.args.to, result.args.value);}
});

http://www.khdw.cn/news/6186.html

相关文章:

  • 宁夏建设工程招投标管理中心网站建设网站的十个步骤
  • 怎么做一购物网站自己怎么开发app软件
  • 儋州网站建设网站建设与营销经验
  • wordpress建站多少钱网络推广是什么
  • 新乡营销型网站建设seo技术推广
  • 推广获客seo是对网站进行什么优化
  • 企业网站 数据库百度有免费推广广告
  • 西宁网站设计公司搜索引擎优化工具有哪些
  • 微信会员卡系统怎么做苏州优化网站公司
  • 凡科建站和wordpress网站制作详细流程
  • 聊城做网站推广公司电商seo搜索引擎优化
  • 东莞公司网站策划百度推广登录入口官网
  • 学电子商务去哪个学校比较好seo建站技巧
  • 义乌外贸建站东莞新闻最新消息今天
  • 南通做网站价格做网站的流程与步骤
  • 眉山建行网站小程序商城制作一个需要多少钱
  • 网站整体设计意图及其功能品牌策划案例
  • 网站开发笔记本哪家公司做推广优化好
  • asp网站 换模板企业宣传软文
  • 北京市两学一做网站推广渠道怎么写
  • 手机打字赚钱一单一结广州seo顾问服务
  • 建站快车金牌代理商网络营销方案范文
  • 网站开发简单做销售最挣钱的10个行业
  • 做众筹的网站百度移动点击排名软件
  • 房山网站制作宁波seo推广
  • wordpress 主题制作 functions.php宁波seo推荐优化
  • wordpress建站后怎样发布佛山seo网站排名
  • 做网站需要公司授权嘛百度禁止seo推广
  • 东莞网站建设营销平台的百度推广seo怎么学
  • 专业做影楼招聘网站有哪些怎么从网上找国外客户