導入
Ethereum のすべての口座(人のウォレットも、コントラクト自身も)は アドレスで表されます。address 型は Solidity の主役のひとつで、送金の宛先・所有者の識別などに使います。
説明
アドレスは 0x で始まる42文字の16進数(20バイト)です。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Addresses {
address public owner = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
// このコントラクト自身の残高(wei単位)を返す
function myBalance() public view returns (uint256) {
return address(this).balance;
}
// 送金を受け取れるアドレスは payable を付ける
address payable public wallet;
}
address… 口座アドレス。.balanceでそのアドレスの ETH 残高を読める。address(this)…thisは「このコントラクト自身」。コントラクトも口座を持ち ETH を保有できる。address payable… ETH を送金できるアドレス。ただのaddressには送金できず、payableを付けた版が必要(第4章の送金で使います)。
ETH の金額は、実は最小単位 wei(ウェイ) で扱われます。
| 単位 | wei換算 | イメージ |
|---|---|---|
1 wei | 1 | 最小単位 |
1 gwei | 1,000,000,000 (10⁹) | ガス代の表示によく使う |
1 ether | 1,000,000,000,000,000,000 (10¹⁸) | 1 ETH |
uint256 oneEther = 1 ether; // = 1000000000000000000 wei
uint256 gas = 20 gwei; // = 20000000000 wei
Solidity は ether / gwei / wei という単位サフィックスを用意しており、1 ether と書くと自動で wei に換算されます。内部の計算はすべて wei(整数) で行われる点を覚えておきましょう(Solidity に小数はありません)。
やってみよう
「1.5 ETH」を扱いたいとき、小数は使えないので 1500000000000000000 wei(= 1.5 * 10¹⁸)のように整数の wei で考えます。金額計算はすべて整数、という制約が後の割り算の注意点(切り捨て)につながります。