Solidity原理(二):ライブラリ(Library)(修正対象)
1602 ワード
ライブラリとは
Solidityでは、ライブラリと契約は少し似ていますが、Javaにstatic関数のみが含まれているクラスと理解できます.その役割と目的はコード多重化である.通常の契約とは少し違いますが、Libraryにはstorage変数は含まれません.
ライブラリの作成と使用:
次のLibraryでは、mappingを含むデータ構造があり、クエリーと挿入の機能を提供しています.関数に入力されたデータにはstorageキーが追加されています.ここでは、データが入力された参照です.
次の契約はStringToUIntMapを使用しています.この契約を使用する前に、Libraryはまず配置され、その後、Library配置のアドレスを指定する必要があります.このプロセスはリンク(Linking)と呼ばれます.
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;
}
}