Solidity原理(二):ライブラリ(Library)(修正対象)


ライブラリとは
Solidityでは、ライブラリと契約は少し似ていますが、Javaにstatic関数のみが含まれているクラスと理解できます.その役割と目的はコード多重化である.通常の契約とは少し違いますが、Libraryにはstorage変数は含まれません.
ライブラリの作成と使用:
次のLibraryでは、mappingを含むデータ構造があり、クエリーと挿入の機能を提供しています.関数に入力されたデータにはstorageキーが追加されています.ここでは、データが入力された参照です.
// Code for StringToUintMap.sol

pragma solidity ^0.4.15;

library StringToUintMap {  
    struct Data {
        mapping (string => uint8) map;
    }

    function insert(
        Data storage self,
        string key,
        uint8 value) public returns (bool updated)
    {
        require(value > 0);

        updated = self.map[key] != 0;
        self.map[key] = value;
    }

    function get(Data storage self, string key) public returns (uint8) {
        return self.map[key];
    }
}

次の契約はStringToUIntMapを使用しています.この契約を使用する前に、Libraryはまず配置され、その後、Library配置のアドレスを指定する必要があります.このプロセスはリンク(Linking)と呼ばれます.
// Code for PersonsAge.sol

pragma solidity ^0.4.15;

import { StringToUintMap } from "../libraries/StringToUintMap.sol";

contract PersonsAge {

    StringToUintMap.Data private _stringToUintMapData;

    event PersonAdded(string name, uint8 age);
    event GetPersonAgeResponse(string name, uint8 age);

    function addPersonAge(string name, uint8 age) public {
        StringToUintMap.insert(_stringToUintMapData, name, age);

        PersonAdded(name, age);
    }

    function getPersonAge(string name) public returns (uint8) {
        uint8 age = StringToUintMap.get(_stringToUintMapData, name);

        GetPersonAgeResponse(name, age);

        return age;
    }
}