`

solidity库

 
阅读更多
库类似于合约,但主要作用是代码重用。库中包含了可以被合约调用的函数。

Solidity中,对库的使用有一定的限制。以下是库的主要特征。

如果库函数不修改状态,则可以直接调用它们。这意味着纯函数或视图函数只能从库外部调用。
库不能被销毁,因为它被认为是无状态的。
库不能有状态变量。
库不能继承任何其他元素。
库不能被继承。

pragma solidity ^0.5.0;

library Search {
   function indexOf(uint[] storage self, uint value) public view returns (uint) {
      for (uint i = 0; i < self.length; i++) if (self[i] == value) return i;
      return uint(-1);
   }
}
contract Test {
   uint[] data;
   constructor() public {
      data.push(1);
      data.push(2);
      data.push(3);
      data.push(4);
      data.push(5);
   }
   function isValuePresent() external view returns(uint){
      uint value = 4;

      // 使用库函数搜索数组中是否存在值
      uint index = Search.indexOf(data, value);
      return index;
   }
}



using A for B指令,可用于将库A的函数附加到给定类型B。这些函数将把调用者类型作为第一个参数(使用self标识)。

pragma solidity ^0.5.0;

library Search {
   function indexOf(uint[] storage self, uint value) public view returns (uint) {
      for (uint i = 0; i < self.length; i++)if (self[i] == value) return i;
      return uint(-1);
   }
}
contract Test {
   using Search for uint[];
   uint[] data;
   constructor() public {
      data.push(1);
      data.push(2);
      data.push(3);
      data.push(4);
      data.push(5);
   }
   function isValuePresent() external view returns(uint){
      uint value = 4;      

      // data 表示库
      uint index = data.indexOf(value);
      return index;
   }
}

分享到:
评论

相关推荐

    cryptofin-solidity:一组Solidity库,用于在以太坊上构建安全且节气的智能合约

    Solidity库的集合,最初侧重于数组。 文档是从Natspec生成的。 快速开始 npm install --save cryptofin-solidity 在项目中使用 import "cryptofin-solidity/contracts/array-utils/AddressArrayUtils.sol"; contract...

    uniswap-lib:Uni在Uniswap合同之间共享的Solidity库

    uniswap-lib 在Uniswap合同之间共享的Solidity库。 该软件包着眼于安全性和执行气体效率​​。安装运行yarn安装依赖项。测试运行yarn test执行测试套件。用法通过yarn add @uniswap/lib安装在另一个项目中然后通过...

    LooksRare Token(LOOKS)源代码NFT智能合约crypto货币solidity

    "Ownable.sol"和"Context.sol"是常见的Solidity库,用于管理合约所有权和提供执行上下文。"Ownable"合约通常用于设定合约初始所有者,并提供了转移所有权的机制。"Context"合约则提供了一个无状态的基类,方便其他...

    solidity-contracts:松散的Solidity代码集合。 临时存储用于Solidity合同的标准库。 该库中的代码只能在符合大都市的网络中运行,并且只能使用Solidity版本0.5.0和更高版本进行编译

    标准库应提供Solidity库/函数,以执行常见任务,例如使用字符串,位和其他常见类型,以及使用以太坊和以太坊相关技术,例如Patricia Tries。 配套 这些是不同的程序包。 位 bits包用于处理位域(uint)。 合约 位 ...

    solidity-sigutils::writing_hand:一个用于验证以太坊消息多重签名的Solidity库

    solidity-sigutils 一个用于验证以太坊消息多重签名的实体库。 这些实用程序使与基于和以太坊签名消息进行交互变得简单。 它们是Cleargraph的开放式和分散式身份系统的基础,并且可以在分散式应用程序中用于许多其他...

    solidity编程指南.pdf

    5. Solidity版本:文件提到Solidity 4和Solidity 5,这表明文档涵盖了不同版本的Solidity语言特性和更新。Solidity语言随时间发展,不同版本可能会引入新特性和改进,也可能更改或弃用某些功能。 6. 编程语言和框架...

    以太坊solidity字符串拼接实现

    因此,开发者需要了解如何在Solidity中实现字符串拼接,这通常涉及到字节和字符串之间的转换以及有时借助第三方库。 首先,我们需要明确Solidity中字符串的处理方式。在早期版本的Solidity(0.4.x及之前),字符串...

    UnorderedKeySet:Solidity CRUD库

    总之,UnorderedKeySet是一个Solidity库,专为以太坊智能合约设计,用于高效地管理无序的键值集合,支持基本的CRUD操作。它的应用将提升合约的存储管理效率,对于构建复杂的智能合约系统来说,是一个非常有价值的...

    Solidity-中文-develop.zip

    Solidity develop 文档(开发版) Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++,Python 和 Javascript...Solidity 是静态类型语言,支持继承、库和复杂的用户定义类型等特性。

    solidity-中文文档

    《Solidity 中文文档》是针对智能合约编程语言 Solidity 的一份详尽指南,它为开发者提供了学习和理解 Solidity 的关键知识点。Solidity 是以太坊区块链平台上的主要编程语言,用于编写智能合约,这些合约是自动执行...

    solidity2.pdf

    Solidity的库使用特殊的调用保护来防止意外的重入攻击。 ### ABI编码函数 应用二进制接口(ABI)用于合约之间的函数调用编码。 ### 错误处理 Solidity提供了多种错误处理方式,例如throw和require语句。 ### 事件...

    Introducing.Ethereum.and.Solidity

    你还将深入理解Solidity语言的关键概念,如合约的生命周期、状态变量、函数修饰符(如`public`、`internal`、`private`)、继承、库、事件和错误处理。 文档将首先介绍以太坊的生态系统,包括以太坊虚拟机(EVM)、...

    Solidity 官方文档中文版

    此外,库(library)提供了一种复用代码的方法,它可以在多个合约之间共享功能,但不消耗合约的存储空间。 **8. 排序与随机性** 由于区块链的确定性特性,Solidity不直接支持真正的随机数。然而,可以利用外部的...

    solidity VSCode插件0.0.135

    VSCode中的solidity插件,版本号0.0.135 由于最新版本(0.0.165)的插件会导致引用OpenZeppelin的时候出现如下报错: Expected string literal (path), "*" or alias list. 或者 Source "@openzeppelin/contracts/...

    前端开源库-solidity-sha3

    前端开源库-solidity-sha3solidity-sha3,javascript中的solidity sha3

    solidity官方文档中文版

    1. Solidity语言介绍: - Solidity是一种面向区块链、特别是以太坊平台的编程语言。 - 它的语法类似于JavaScript,易于熟悉和上手。 - Solidity被设计用于编写智能合约,即在以太坊虚拟机(EVM)上运行的程序。 ...

    以太坊Solidity本地编译

    它的语法类似于JavaScript,但增加了许多面向智能合约的特性,如继承、库、自定义错误和事件等。开发者可以利用Solidity编写智能合约,这些合约一旦部署到以太坊网络,就能在去中心化的环境中执行预定的逻辑。 ...

    intellij-solidity:IntelliJ的Solidity插件

    IntelliJ IDEA的Solidity插件intellij-solidity极大地提升了以太坊智能合约的开发体验,不仅提供了丰富的代码辅助功能,还集成了测试和调试工具,使得开发者能够在熟悉的环境中高效地进行区块链应用开发。...

    Truffle官网离线使用.rar

    在进行离线开发时,你可能需要预先下载所有依赖的Solidity库和其他npm模块,确保在没有网络连接时也能正确编译和运行智能合约。同时,如果要部署到以太坊网络,需确保已经拥有足够的以太币来支付gas费用,并提前知道...

    Solidity-中文-stable.zip

    Solidity develop 文档(稳定版) Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++,Python 和 Javascript...Solidity 是静态类型语言,支持继承、库和复杂的用户定义类型等特性。

Global site tag (gtag.js) - Google Analytics