{"id":24327805,"url":"https://github.com/solidity-utilities/library-mapping-address","last_synced_at":"2026-04-20T13:38:33.378Z","repository":{"id":38097545,"uuid":"416514543","full_name":"solidity-utilities/library-mapping-address","owner":"solidity-utilities","description":"Solidity library for mapping addresses","archived":false,"fork":false,"pushed_at":"2023-07-03T10:09:31.000Z","size":2814,"stargazers_count":0,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-18T00:05:42.203Z","etag":null,"topics":["address","ethereum","library","mapping","solidity","truffle"],"latest_commit_sha":null,"homepage":"","language":"Solidity","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/solidity-utilities.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-10-12T22:18:26.000Z","updated_at":"2021-12-05T02:49:02.000Z","dependencies_parsed_at":"2023-02-18T13:30:35.971Z","dependency_job_id":null,"html_url":"https://github.com/solidity-utilities/library-mapping-address","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solidity-utilities%2Flibrary-mapping-address","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solidity-utilities%2Flibrary-mapping-address/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solidity-utilities%2Flibrary-mapping-address/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solidity-utilities%2Flibrary-mapping-address/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/solidity-utilities","download_url":"https://codeload.github.com/solidity-utilities/library-mapping-address/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242990362,"owners_count":20217975,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["address","ethereum","library","mapping","solidity","truffle"],"created_at":"2025-01-17T22:15:38.548Z","updated_at":"2026-04-20T13:38:28.341Z","avatar_url":"https://github.com/solidity-utilities.png","language":"Solidity","funding_links":["https://liberapay.com/solidity-utilities"],"categories":[],"sub_categories":[],"readme":"# Library Mapping Address\n[heading__library_mapping_address]:\n  #library-mapping-address\n  \"\u0026#x2B06; Solidity library for mapping addresses\"\n\n\nSolidity library for mapping addresses\n\n\n## [![Byte size of Library Mapping Address][badge__main__library_mapping_address__source_code]][library_mapping_address__main__source_code] [![Open Issues][badge__issues__library_mapping_address]][issues__library_mapping_address] [![Open Pull Requests][badge__pull_requests__library_mapping_address]][pull_requests__library_mapping_address] [![Latest commits][badge__commits__library_mapping_address__main]][commits__library_mapping_address__main]  [![Build Status][badge__github_actions]][activity_log__github_actions]\n\n\n---\n\n\n- [:arrow_up: Top of Document][heading__library_mapping_address]\n\n- [:building_construction: Requirements][heading__requirements]\n\n- [:zap: Quick Start][heading__quick_start]\n\n- [\u0026#x1F9F0; Usage][heading__usage]\n\n- [\u0026#x1F523; API][heading__api]\n  - [Library `LibraryMappingAddress`][heading__library_librarymappingaddress]\n    - [Method `get`][heading__method_get]\n    - [Method `getOrElse`][heading__method_getorelse]\n    - [Method `getOrError`][heading__method_getorerror]\n    - [Method `has`][heading__method_has]\n    - [Method `overwrite`][heading__method_overwrite]\n    - [Method `overwriteOrError`][heading__method_overwriteorerror]\n    - [Method `remove`][heading__method_remove]\n    - [Method `removeOrError`][heading__method_removeorerror]\n    - [Method `set`][heading__method_set]\n    - [Method `setOrError`][heading__method_setorerror]\n\n- [\u0026#x1F5D2; Notes][heading__notes]\n\n- [:chart_with_upwards_trend: Contributing][heading__contributing]\n  - [:trident: Forking][heading__forking]\n  - [:currency_exchange: Sponsor][heading__sponsor]\n\n- [\u0026#x1f4dc; Change Log][heading__change_log]\n  - [Version `0.1.0`][heading__version_010]\n\n- [:card_index: Attribution][heading__attribution]\n\n- [:balance_scale: Licensing][heading__license]\n\n\n---\n\n\n\n## Requirements\n[heading__requirements]:\n  #requirements\n  \"\u0026#x1F3D7; Prerequisites and/or dependencies that this project needs to function properly\"\n\n\n\u003e Prerequisites and/or dependencies that this project needs to function properly\n\n\nThis project utilizes Truffle for organization of source code and tests, thus\nit is recommended to install Truffle _globally_ to your current user account\n\n\n```Bash\nnpm install -g truffle\n```\n\n\n______\n\n\n## Quick Start\n[heading__quick_start]:\n  #quick-start\n  \"\u0026#9889; Perhaps as easy as one, 2.0,...\"\n\n\n\u003e Perhaps as easy as one, 2.0,...\n\n\nNPM and Truffle are recommended for importing and managing project dependencies\n\n\n```Bash\ncd your_project\n\nnpm install @solidity-utilities/library-mapping-address\n```\n\n\n\u003e Note, source code for this library will be located within the\n\u003e `node_modules/@solidity-utilities/library-mapping-address` directory of\n\u003e _`your_project`_ root\n\n\nSolidity contracts may then import code via similar syntax as shown\n\n\n```Solidity\nimport {\n    LibraryMappingAddress\n} from \"@solidity-utilities/library-mapping-address/contracts/LibraryMappingAddress.sol\";\n```\n\n\n\u003e Note, above path is **not** relative (ie. there's no `./` preceding the file\n\u003e path) which causes Truffle to search the `node_modules` sub-directories\n\n\nReview the\n[Truffle -- Package Management via NPM][truffle__package_management_via_npm]\ndocumentation for more installation details.\n\n\n---\n\n\nAlternatively this library may be installed via Truffle, eg...\n\n\n```Bash\ncd your_project\n\ntruffle install library-mapping-address\n```\n\n... However, if utilizing Truffle for dependency management Solidity contracts\nmust import code via a slightly different path\n\n\n```Solidity\nimport {\n    LibraryMappingAddress\n} from \"library-mapping-address/contracts/LibraryMappingAddress.sol\";\n```\n\n\n---\n\n\n\u003e In the future, after beta testers have reported bugs and feature requests, it\n\u003e should be possible to link the deployed `LibraryMappingAddress` via Truffle\n\u003e migration similar to the following.\n\u003e\n\u003e\n\u003e **`migrations/2_your_contract.js`**\n\u003e\n\u003e\n\u003e     const LibraryMappingAddress = artifacts.require(\"LibraryMappingAddress\");\n\u003e     const YourContract = artifacts.require(\"YourContract\");\n\u003e\n\u003e     module.exports = (deployer, _network, _accounts) {\n\u003e       LibraryMappingAddress.address = \"0x0...\";\n\u003e       // deployer.deploy(LibraryMappingAddress, { overwrite: false });\n\u003e       deployer.link(LibraryMappingAddress, YourContract);\n\u003e       deployer.deploy(YourContract);\n\u003e     };\n\n\n______\n\n\n## Usage\n[heading__usage]:\n  #usage\n  \"\u0026#x1F9F0; How to utilize this repository\"\n\n\n\u003e How to utilize this repository\n\n\nWrite a set of contracts that make use of, and extend, `LibraryMappingAddress` features.\n\n\n```solidity\n// SPDX-License-Identifier: AGPL-3.0\npragma solidity 0.8.7;\n\nimport {\n    LibraryMappingAddress\n} from \"@solidity-utilities/mapped-addresses/contracts/LibraryMappingAddress.sol\";\n\n/// @title Example contract to be stored and retrieved by `AccountStorage`\n/// @author S0AndS0\ncontract Account {\n    address payable public owner;\n    string public name;\n\n    constructor(address payable _owner, string memory _name) {\n        owner = _owner;\n        name = _name;\n    }\n}\n\n/// @title Programming interface for storing contracts within custom mapping\n/// @author S0AndS0\ncontract AccountStorage {\n    using LibraryMappingAddress for mapping(address =\u003e address);\n    mapping(address =\u003e address) data;\n    mapping(address =\u003e uint256) indexes;\n    address[] public keys;\n    address public owner;\n\n    constructor(address _owner) {\n        owner = _owner;\n    }\n\n    /// @notice Requires message sender to be an instance owner\n    /// @param _caller {string} Function name that implements this modifier\n    modifier onlyOwner(string memory _caller) {\n        string memory _message = string(\n            abi.encodePacked(\n                \"AccountStorage.\",\n                _caller,\n                \": Message sender not an owner\"\n            )\n        );\n        require(msg.sender == owner, _message);\n        _;\n    }\n\n    /// @notice Converts `LibraryMappingAddress.get` value `address`\n    /// @param _key {address}\n    /// @return Account\n    /// @custom:throws {Error} `\"LibraryMappingAddress.get: value not defined\"`\n    function get(address _key) public view returns (Account) {\n        return Account(data.get(_key));\n    }\n\n    /// @notice Presents `LibraryMappingAddress.has` result for stored `data`\n    /// @return bool\n    function has(address _key) public view returns (bool) {\n        return data.has(_key);\n    }\n\n    /// @notice Allow full read access to all `keys` stored by `data`\n    /// @dev **Warning** Key order is not guarantied\n    /// @return address[]\n    function listKeys() public view returns (address[] memory) {\n        return keys;\n    }\n\n    /// @notice Converts `LibraryMappingAddress.remove` value `address`\n    /// @dev **Warning** Overwrites current key with last key\n    /// @return Account\n    /// @custom:javascript Returns transaction object\n    /// @custom:throws {Error} `\"AccountStorage.remove: Message sender not an owner\"`\n    /// @custom:throws {Error} `\"LibraryMappingAddress.remove: value not defined\"`\n    function remove(address _key) public onlyOwner(\"remove\") returns (Account) {\n        address _value = data.removeOrError(\n            _key,\n            \"AccountStorage.remove: value not defined\"\n        );\n        uint256 _last_index = keys.length - 1;\n        address _last_key = keys[_last_index];\n        if (keys.length \u003e 1) {\n            uint256 _target_index = indexes[_key];\n            keys[_target_index] = keys[_last_index];\n            indexes[_last_key] = _target_index;\n        }\n        delete indexes[_last_key];\n        keys.pop();\n        return Account(_value);\n    }\n\n    /// @notice Call `selfdestruct` with provided `address`\n    /// @param _to **{address}** Where to transfer any funds this contract has\n    /// @custom:throws **{Error}** `\"AccountStorage.selfDestruct: message sender not an owner\"`\n    function selfDestruct(address payable _to)\n        external\n        onlyOwner(\"selfDestruct\")\n    {\n        selfdestruct(_to);\n    }\n\n    /// @notice Convert `_value` for `LibraryMappingAddress.set`\n    /// @param _key {address}\n    /// @param _value {Account}\n    /// @custom:throws {Error} `\"AccountStorage.set: Message sender not an owner\"`\n    /// @custom:throws {Error} `\"LibraryMappingAddress.set: value already defined\"`\n    function set(address _key, Account _value) public onlyOwner(\"set\") {\n        data.set(_key, address(_value));\n        keys.push(_key);\n    }\n\n    /// @notice Allow callers access to `keys.length`\n    /// @return uint256 Length of keys `address` array\n    /// @custom:javascript Returns `BN` data object\n    function size() public view returns (uint256) {\n        return keys.length;\n    }\n}\n```\n\n\nAbove the `AccountStorage` contract;\n\n\n- maintains a list of keys\n\n- restricts mutation to owner only\n\n- converts between references (address) and references from/to `Account`\n\n\nThere is likely much that can be accomplished by leveraging these abstractions,\ncheck the [API][heading__api] section for full set of features available.  And\nreview the\n[`test/test__examples__AccountStorage.js`][source__test__test__examples__accountstorage_js]\nfile for inspiration on how to use this library within projects.\n\n\n______\n\n\n## API\n[heading__api]:\n  #api\n  \"Application Programming Interfaces for Solidity smart contracts\"\n\n\n\u003e Application Programming Interfaces for Solidity smart contracts\n\n\n**Developer note** -\u003e Check the [`test/`][source__test] directory for\nJavaScript and Solidity usage examples\n\n\n---\n\n\n### Library `LibraryMappingAddress`\n[heading__library_librarymappingaddress]:\n  #library-librarymappingaddress\n  \"Organizes methods that may be attached to `mapping(address =\u003e address)` type\"\n\n\n\u003e Organizes methods that may be attached to `mapping(address =\u003e address)` type\n\n\n**Warning** any value of `address(0x0)` is treated as _null_ or _undefined_\n\n\n**Source** [`contracts/LibraryMappingAddress.sol`][source__contracts__librarymappingaddress_sol]\n\n\n---\n\n\n#### Method `get`\n[heading__method_get]:\n  #method-get\n  \"Retrieves stored value `address` or throws an error if _undefined_\"\n\n\n\u003e Retrieves stored value `address` or throws an error if _undefined_\n\n\n[**Source**][source__contracts__librarymappingaddress_sol__get] `get(mapping(address =\u003e address) _self, address _key)`\n\n\n**Parameters**\n\n\n- `_self` **{mapping(address =\u003e address)}** Mapping of key/value `address` pairs\n\n- `_key` **{address}** Mapping key `address` to lookup corresponding value `address` for\n\n\n**Returns** -\u003e **{address}** Value for given key `address`\n\n\n**Throws** -\u003e **{Error}** `\"LibraryMappingAddress.get: value not defined\"`\n\n\n---\n\n\n#### Method `getOrElse`\n[heading__method_getorelse]:\n  #method-getorelse\n  \"Retrieves stored value `address` or provided default `address` if _undefined_\"\n\n\n\u003e Retrieves stored value `address` or provided default `address` if _undefined_\n\n\n[**Source**][source__contracts__librarymappingaddress_sol__getorelse] `getOrElse(mapping(address =\u003e address) _self, address _key, address _default)`\n\n\n**Parameters**\n\n\n- `_self` **{mapping(address =\u003e address)}** Mapping of key/value `address` pairs\n\n- `_key` **{address}** Mapping key `address` to lookup corresponding value `address` for\n\n- `_default` **{address}** Value to return if key `address` lookup is _undefined_\n\n\n**Returns** -\u003e **{address}** Value `address` for given key `address` or `_default` if _undefined_\n\n\n---\n\n\n#### Method `getOrError`\n[heading__method_getorerror]:\n  #method-getorerror\n  \"Allows for defining custom error reason if value `address` is _undefined_\"\n\n\n\u003e Allows for defining custom error reason if value `address` is _undefined_\n\n\n[**Source**][source__contracts__librarymappingaddress_sol__getorerror] `getOrError(mapping(address =\u003e address) _self, address _key, string _reason)`\n\n\n**Parameters**\n\n\n- `_self` **{mapping(address =\u003e address)}** Mapping of key/value `address` pairs\n\n- `_key` **{address}** Mapping key `address` to lookup corresponding value `address` for\n\n- `_reason` **{string}** Custom error message to throw if value `address` is _undefined_\n\n\n**Returns** -\u003e **{address}** Value for given key `address`\n\n\n**Throws** -\u003e **{Error}** `_reason` if value is _undefined_\n\n\n---\n\n\n#### Method `has`\n[heading__method_has]:\n  #method-has\n  \"Check if `address` key has a corresponding value `address` defined\"\n\n\n\u003e Check if `address` key has a corresponding value `address` defined\n\n\n[**Source**][source__contracts__librarymappingaddress_sol__has] `has(mapping(address =\u003e address) _self, address _key)`\n\n\n**Parameters**\n\n\n- `_self` **{mapping(address =\u003e address)}** Mapping of key/value `address` pairs\n\n- `_key` **{address}** Mapping key to check if value `address` is defined\n\n\n**Returns** -\u003e **{bool}** `true` if value `address` is defined, or `false` if _undefined_\n\n\n---\n\n\n#### Method `overwrite`\n[heading__method_overwrite]:\n  #method-overwrite\n  \"Store `_value` under given `_key` **without** preventing unintentional overwrites\"\n\n\n\u003e Store `_value` under given `_key` **without** preventing unintentional overwrites\n\n\n[**Source**][source__contracts__librarymappingaddress_sol__overwrite] `overwrite(mapping(address =\u003e address) _self, address _key, address _value)`\n\n\n**Parameters**\n\n\n- `_self` **{mapping(address =\u003e address)}** Mapping of key/value `address` pairs\n\n- `_key` **{address}** Mapping key to set corresponding value `address` for\n\n- `_value` **{address}** Mapping value to set\n\n\n**Throws** -\u003e  **{Error}** `\"LibraryMappingAddress.overwrite: value cannot be 0x0\"`\n\n\n---\n\n\n#### Method `overwriteOrError`\n[heading__method_overwriteorerror]:\n  #method-overwriteorerror\n  \"Store `_value` under given `_key` **without** preventing unintentional overwrites\"\n\n\n\u003e Store `_value` under given `_key` **without** preventing unintentional overwrites\n\n\n[**Source**][source__contracts__librarymappingaddress_sol__overwriteorerror] `overwriteOrError(mapping(address =\u003e address) _self, address _key, address _value, string _reason)`\n\n\n**Parameters**\n\n\n- `_self` **{mapping(address =\u003e address)}** Mapping of key/value `address` pairs\n\n- `_key` **{address}** Mapping key to set corresponding value `address` for\n\n- `_value` **{address}** Mapping value to set\n\n- `_reason` **{string}** Custom error message to present if value `address` is `0x0`\n\n\n**Throws** -\u003e **{Error}** `_reason` if value is `0x0`\n\n\n---\n\n\n#### Method `remove`\n[heading__method_remove]:\n  #method-remove\n  \"Delete value `address` for given `_key`\"\n\n\n\u003e Delete value `address` for given `_key`\n\n\n[**Source**][source__contracts__librarymappingaddress_sol__remove] `remove(mapping(address =\u003e address) _self, address _key)`\n\n\n**Parameters**\n\n\n- `_self` **{mapping(address =\u003e address)}** Mapping of key/value `address` pairs\n\n- `_key` **{address}** Mapping key to delete corresponding value `address` for\n\n\n**Returns** -\u003e **{address}** Value for given key `address`\n\n\n**Throws** -\u003e **{Error}** `\"LibraryMappingAddress.remove: value not defined\"`\n\n\n---\n\n\n#### Method `removeOrError`\n[heading__method_removeorerror]:\n  #method-removeorerror\n  \"Delete value `address` for given `_key`\"\n\n\n\u003e Delete value `address` for given `_key`\n\n\n[**Source**][source__contracts__librarymappingaddress_sol__removeorerror] `removeOrError(mapping(address =\u003e address) _self, address _key, string _reason)`\n\n\n**Parameters**\n\n\n- `_self` **{mapping(address =\u003e address)}** Mapping of key/value `address` pairs\n\n- `_key` **{address}** Mapping key to delete corresponding value `address` for\n\n- `_reason` **{string}** Custom error message to throw if value `address` is _undefined_\n\n\n**Returns** -\u003e **{address}** Stored value `address` for given key `address`\n\n\n**Throws** -\u003e **{Error}** `_reason` if value is _undefined_\n\n\n---\n\n\n#### Method `set`\n[heading__method_set]:\n  #method-set\n  \"Store `_value` under given `_key` while preventing unintentional overwrites\"\n\n\n\u003e Store `_value` under given `_key` while preventing unintentional overwrites\n\n\n[**Source**][source__contracts__librarymappingaddress_sol__set] `set(mapping(address =\u003e address) _self, address _key, address _value)`\n\n\n**Parameters**\n\n\n- `_self` **{mapping(address =\u003e address)}** Mapping of key/value `address` pairs\n\n- `_key` **{address}** Mapping key to set corresponding value `address` for\n\n- `_value` **{address}** Mapping value to set\n\n\n**Throws**\n\n\n- **{Error}** `\"LibraryMappingAddress.set: value already defined\"`\n\n- **{Error}** `\"LibraryMappingAddress.set: value cannot be 0x0\"`\n\n\n---\n\n\n#### Method `setOrError`\n[heading__method_setorerror]:\n  #method-setorerror\n  \"Store `_value` under given `_key` while preventing unintentional overwrites\"\n\n\n\u003e Stores `_value` under given `_key` while preventing unintentional overwrites\n\n\n[**Source**][source__contracts__librarymappingaddress_sol__setorerror] `setOrError(mapping(address =\u003e address) _self, address _key, address _value, string _reason)`\n\n\n**Parameters**\n\n\n- `_self` **{mapping(address =\u003e address)}** Mapping of key/value `address` pairs\n\n- `_key` **{address}** Mapping key to set corresponding value `address` for\n\n- `_value` **{address}** Mapping value to set\n\n- `_reason` **{string}** Custom error message to present if value `address` is defined\n\n\n**Throws**\n\n\n- **{Error}**  `_reason` if value is defined\n\n- **{Error}** `\"LibraryMappingAddress.setOrError: value cannot be 0x0\"`\n\n\n______\n\n\n## Notes\n[heading__notes]:\n  #notes\n  \"\u0026#x1F5D2; Additional things to keep in mind when developing\"\n\n\n\u003e Additional things to keep in mind when developing\n\n\nSolidity libraries provide methods for a given type **only** for the `contract`\nthat is _`using`_ the library, review the [Usage][heading__usage] example for\ndetails on how to _forward_ library features to external consumers.\n\n\n---\n\n\nThis repository may not be feature complete and/or fully functional, Pull\nRequests that add features or fix bugs are certainly welcomed.\n\n\n______\n\n\n## Contributing\n[heading__contributing]:\n  #contributing\n  \"\u0026#x1F4C8; Options for contributing to library-mapping-address and solidity-utilities\"\n\n\nOptions for contributing to library-mapping-address and solidity-utilities\n\n\n---\n\n\n### Forking\n[heading__forking]:\n  #forking\n  \"\u0026#x1F531; Tips for forking `library-mapping-address`\"\n\n\n\u003e Tips for forking `library-mapping-address`\n\n\nMake a [Fork][library_mapping_address__fork_it] of this repository to an\naccount that you have write permissions for.\n\n\n- Clone fork URL. The URL syntax is _`git@github.com:\u003cNAME\u003e/\u003cREPO\u003e.git`_, then add this repository as a remote...\n\n\n```Bash\nmkdir -p ~/git/hub/solidity-utilities\n\ncd ~/git/hub/solidity-utilities\n\ngit clone --origin fork git@github.com:\u003cNAME\u003e/library-mapping-address.git\n\ngit remote add origin git@github.com:solidity-utilities/library-mapping-address.git\n```\n\n\n- Install development dependencies\n\n\n```Bash\ncd ~/git/hub/solidity-utilities/library-mapping-address\n\nnpm ci\n```\n\n\n\u003e Note, the `ci` option above is recommended instead of `install` to avoid\n\u003e mutating the `package.json`, and/or `package-lock.json`, file(s) implicitly\n\n\n- Commit your changes and push to your fork, eg. to fix an issue...\n\n\n```Bash\ncd ~/git/hub/solidity-utilities/library-mapping-address\n\n\ngit commit -F- \u003c\u003c'EOF'\n:bug: Fixes #42 Issue\n\n\n**Edits**\n\n\n- `\u003cSCRIPT-NAME\u003e` script, fixes some bug reported in issue\nEOF\n\n\ngit push fork main\n```\n\n\n- Then on GitHub submit a Pull Request through the Web-UI, the URL syntax is _`https://github.com/\u003cNAME\u003e/\u003cREPO\u003e/pull/new/\u003cBRANCH\u003e`_\n\n\n\u003e Note; to decrease the chances of your Pull Request needing modifications\n\u003e before being accepted, please check the\n\u003e [dot-github](https://github.com/solidity-utilities/.github) repository for\n\u003e detailed contributing guidelines.\n\n\n---\n\n\n### Sponsor\n  [heading__sponsor]:\n  #sponsor\n  \"\u0026#x1F4B1; Methods for financially supporting `solidity-utilities` that maintains `library-mapping-address`\"\n\n\n\u003e Methods for financially supporting `solidity-utilities` that maintains\n\u003e `library-mapping-address`\n\n\nThanks for even considering it!\n\n\nVia Liberapay you may\n\u003csub\u003e[![sponsor__shields_io__liberapay]][sponsor__link__liberapay]\u003c/sub\u003e on a\nrepeating basis.\n\n\nFor non-repeating contributions Ethereum is accepted via the following public address;\n\n\n    0x5F3567160FF38edD5F32235812503CA179eaCbca\n\n\nRegardless of if you're able to financially support projects such as\n`library-mapping-address` that `solidity-utilities` maintains, please consider\nsharing projects that are useful with others, because one of the goals of\nmaintaining Open Source repositories is to provide value to the community.\n\n\n______\n\n\n## Change Log\n[heading__change_log]:\n  #change-log\n  \"\u0026#x1f4dc; Note, this section only documents breaking changes or major feature releases\"\n\n\n\u003e Note, this section only documents breaking changes or major feature releases\n\n\n---\n\n\n### Version `0.1.0`\n[heading__version_010]:\n  #version-010\n  \"Make all functions `external` and prevent setting `0x0` values\"\n\n\n\u003e Make all functions `external` and prevent setting `0x0` values\n\n\n```bash\ngit diff 'v0.1.0' 'v0.0.5'\n```\n\n\n**Developer notes**\n\n\nNew error message will be reported if `overwrite`, `overwriteOrError`, `set`,\nor `setOrError` receive a `_value` of `0x0` to define. Please use `remove`,\nor `removeOrError`, to un-set a value. Note, for `overwriteOrError` and\n`setOrError`, this new error message is reported **after** `_reason` if the\nvalue _undefined_.\n\n\nThe conversion of `public` to `external` type required duplication of code.\nThis is a trade-off for reducing execution stack size, and possible gas fees,\nwhich comes at the cost of future development effort.\n\n\n______\n\n\n## Attribution\n[heading__attribution]:\n  #attribution\n  \"\u0026#x1F4C7; Resources that where helpful in building this project so far.\"\n\n\n\u003e Resources that where helpful in building this project so far.\n\n\n- [GitHub -- `github-utilities/make-readme`](https://github.com/github-utilities/make-readme)\n\n- [Husky Docs](https://typicode.github.io/husky/#/)\n\n- [NPM -- Creating and Publishing an Organization Scoped Package](https://docs.npmjs.com/creating-and-publishing-an-organization-scoped-package)\n\n- [Solidity Docs -- Compiler Input and Output JSON Description](https://docs.soliditylang.org/en/develop/using-the-compiler.html#compiler-input-and-output-json-description)\n\n- [Solidity Docs -- Error handling: Assert, Require, Revert and Exceptions](https://docs.soliditylang.org/en/develop/control-structures.html?highlight=require#error-handling-assert-require-revert-and-exceptions)\n\n- [Solidity Docs -- NatSpec Format](https://docs.soliditylang.org/en/v0.8.9/natspec-format.html)\n\n- [Solidity Docs -- Using the Compiler -- Linking Libraries](https://docs.soliditylang.org/en/latest/using-the-compiler.html#index-2)\n\n- [StackExchange Ethereum -- How can I reference a deployed library in my solidity contract](https://ethereum.stackexchange.com/questions/107891/)\n\n- [StackExchange Ethereum -- Start up ganache-cli ethereum client in travis CI for testing](https://ethereum.stackexchange.com/questions/42648/)\n\n- [Truffle -- Package Managment via NPM](https://www.trufflesuite.com/docs/truffle/getting-started/package-management-via-npm)\n\n\n______\n\n\n## License\n[heading__license]:\n  #license\n  \"\u0026#x2696; Legal side of Open Source\"\n\n\n\u003e Legal side of Open Source\n\n\n```\nSolidity library for mapping addresses\nCopyright (C) 2021 S0AndS0\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as published\nby the Free Software Foundation, version 3 of the License.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License\nalong with this program.  If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n```\n\n\nFor further details review full length version of\n[AGPL-3.0][branch__current__license] License.\n\n\n\n[branch__current__license]:\n  LICENSE\n  \"\u0026#x2696; Full length version of AGPL-3.0 License\"\n\n\n[badge__commits__library_mapping_address__main]:\n  https://img.shields.io/github/last-commit/solidity-utilities/library-mapping-address/main.svg\n\n[commits__library_mapping_address__main]:\n  https://github.com/solidity-utilities/library-mapping-address/commits/main\n  \"\u0026#x1F4DD; History of changes on this branch\"\n\n\n[library_mapping_address__community]:\n  https://github.com/solidity-utilities/library-mapping-address/community\n  \"\u0026#x1F331; Dedicated to functioning code\"\n\n\n[issues__library_mapping_address]:\n  https://github.com/solidity-utilities/library-mapping-address/issues\n  \"\u0026#x2622; Search for and _bump_ existing issues or open new issues for project maintainer to address.\"\n\n[library_mapping_address__fork_it]:\n  https://github.com/solidity-utilities/library-mapping-address/fork\n  \"\u0026#x1F531; Fork it!\"\n\n[pull_requests__library_mapping_address]:\n  https://github.com/solidity-utilities/library-mapping-address/pulls\n  \"\u0026#x1F3D7; Pull Request friendly, though please check the Community guidelines\"\n\n[library_mapping_address__main__source_code]:\n  https://github.com/solidity-utilities/library-mapping-address/\n  \"\u0026#x2328; Project source!\"\n\n[badge__issues__library_mapping_address]:\n  https://img.shields.io/github/issues/solidity-utilities/library-mapping-address.svg\n\n[badge__pull_requests__library_mapping_address]:\n  https://img.shields.io/github/issues-pr/solidity-utilities/library-mapping-address.svg\n\n[badge__main__library_mapping_address__source_code]:\n  https://img.shields.io/github/repo-size/solidity-utilities/library-mapping-address\n\n\n[sponsor__shields_io__liberapay]:\n  https://img.shields.io/static/v1?logo=liberapay\u0026label=Sponsor\u0026message=solidity-utilities\n\n[sponsor__link__liberapay]:\n  https://liberapay.com/solidity-utilities\n  \"\u0026#x1F4B1; Sponsor developments and projects that solidity-utilities maintains via Liberapay\"\n\n\n[badge__github_actions]:\n  https://github.com/solidity-utilities/library-mapping-address/actions/workflows/test.yaml/badge.svg?branch=main\n\n[activity_log__github_actions]:\n  https://github.com/solidity-utilities/address-storage/deployments/activity_log\n\n\n[truffle__package_management_via_npm]:\n  https://www.trufflesuite.com/docs/truffle/getting-started/package-management-via-npm\n  \"Documentation on how to install, import, and interact with Solidity packages\"\n\n\n[source__test]:\n  test\n  \"CI/CD (Continuous Integration/Deployment) tests and examples\"\n\n[source__test__test__examples__accountstorage_js]:\n  test/test__examples__AccountStorage.js\n  \"JavaScript code for testing test/examples/AccountStorage.sol\"\n\n[source__contracts__librarymappingaddress_sol]:\n  contracts/LibraryMappingAddress.sol\n  \"Solidity code for LibraryMappingAddress\"\n\n[source__contracts__librarymappingaddress_sol__get]:\n  contracts/LibraryMappingAddress.sol#L8\n  \"Solidity code for LibraryMappingAddress.get function\"\n\n[source__contracts__librarymappingaddress_sol__getorelse]:\n  contracts/LibraryMappingAddress.sol#L26\n  \"Solidity code for LibraryMappingAddress.getOrElse function\"\n\n[source__contracts__librarymappingaddress_sol__getorerror]:\n  contracts/LibraryMappingAddress.sol#L40\n  \"Solidity code for LibraryMappingAddress.getOrError function\"\n\n[source__contracts__librarymappingaddress_sol__has]:\n  contracts/LibraryMappingAddress.sol#L56\n  \"Solidity code for LibraryMappingAddress.has function\"\n\n[source__contracts__librarymappingaddress_sol__overwrite]:\n  contracts/LibraryMappingAddress.sol#L68\n  \"Solidity code for LibraryMappingAddress.overwrite function\"\n\n[source__contracts__librarymappingaddress_sol__overwriteorerror]:\n  contracts/LibraryMappingAddress.sol#L85\n  \"Solidity code for LibraryMappingAddress.overwriteOrError function\"\n\n[source__contracts__librarymappingaddress_sol__remove]:\n  contracts/LibraryMappingAddress.sol#L101\n  \"Solidity code for LibraryMappingAddress.remove function\"\n\n[source__contracts__librarymappingaddress_sol__removeorerror]:\n  contracts/LibraryMappingAddress.sol#L119\n  \"Solidity code for LibraryMappingAddress.removeOrError function\"\n\n[source__contracts__librarymappingaddress_sol__set]:\n  contracts/LibraryMappingAddress.sol#L136\n  \"Solidity code for LibraryMappingAddress.set function\"\n\n[source__contracts__librarymappingaddress_sol__setorerror]:\n  contracts/LibraryMappingAddress.sol#L158\n  \"Solidity code for LibraryMappingAddress.setOrError function\"\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolidity-utilities%2Flibrary-mapping-address","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolidity-utilities%2Flibrary-mapping-address","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolidity-utilities%2Flibrary-mapping-address/lists"}