Remixで簡単な送金をしてみる

最近solidityの勉強を始めました。
https://cryptozombies.io/jp/course でなんとなくSolidityの書き方が身についてきて、そろそろ自分のスマートコントラクトを作ってみたくなったということで、Remixで簡単な送金ができるコントラクトを作ります。
## Remix
RemixはEthereumのスマートコントラクトを開発するための統合開発環境です。ブラウザで動きます。
同じ名前のwebフレームワークがありますが関係ありません。
 
https://remix.ethereum.org/

## solidityファイルを作成

remixにアクセスしてファイルを作成します。

```contracts/ManagementEth.sol
// SPDX-License-Identifier: GPL-3.0

import "contracts/2_Owner.sol";

pragma solidity >=0.7.0 <0.9.0;

contract ManagementEth {

    function send(address payable _target) external payable {
        (bool res, ) = _target.call{
            value: msg.value
        }("");
        require(res, "failed");
    }

    function showMyBalance() external view returns(uint){
        return msg.sender.balance;
    }

}
```

## デプロイ

ブロックチェーン上にデプロイします。

- 再生ボタン(cmd + S)でコンパイル
- サイバーから「DEPLOY & RUN TRANSACTIONS」パネルを開く
- Deployを押す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798091/e32a4282-a0b6-a43a-2903-d300464914dd.png)


```bash

creation of ManagementEth pending...
[vm]from: 0xAb8...35cb2to: ManagementEth.(constructor)value: 0 weidata: 0x608...a0033logs: 0hash: 0xed5...9224e
status	0x1 Transaction mined and execution succeed
transaction hash	0xed58f7596617921c0670c96feb3802206f0422d89c399f35d1c167a93f59224e
block hash	0x3d2b57755af153fa73142490787264474d465396058ff298612e2fb04f244aeb
block number	22
contract address	0x417Bf7C9dc415FEEb693B6FE313d1186C692600F
from	0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2
to	ManagementEth.(constructor)
gas	244831 gas
transaction cost	212896 gas 
execution cost	148394 gas 
input	0x608...a0033
output	0x608060405260043610610028575f3560e01c80633e58c58c1461002c57806352796d4214610048575b5f80fd5b6100466004803603810190610041919061019a565b610072565b005b348015610053575f80fd5b5061005c61011e565b60405161006991906101dd565b60405180910390f35b5f8173ffffffffffffffffffffffffffffffffffffffff163460405161009790610223565b5f6040518083038185875af1925050503d805f81146100d1576040519150601f19603f3d011682016040523d82523d5f602084013e6100d6565b606091505b505090508061011a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011190610291565b60405180910390fd5b5050565b5f3373ffffffffffffffffffffffffffffffffffffffff1631905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61016982610140565b9050919050565b6101798161015f565b8114610183575f80fd5b50565b5f8135905061019481610170565b92915050565b5f602082840312156101af576101ae61013c565b5b5f6101bc84828501610186565b91505092915050565b5f819050919050565b6101d7816101c5565b82525050565b5f6020820190506101f05f8301846101ce565b92915050565b5f81905092915050565b50565b5f61020e5f836101f6565b915061021982610200565b5f82019050919050565b5f61022d82610203565b9150819050919050565b5f82825260208201905092915050565b7f6661696c656400000000000000000000000000000000000000000000000000005f82015250565b5f61027b600683610237565b915061028682610247565b602082019050919050565b5f6020820190508181035f8301526102a88161026f565b905091905056fea2646970667358221220de3b5346c61e6f73badeb61ec8dbb025f541ac42c1134fc2cd68745e739835a664736f6c634300081a0033
decoded input	{}
decoded output	 - 
logs	[]
raw logs	[]
```

- アドレス 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2 がデプロイ
- 「DEPLOY & RUN TRANSACTIONS」メニューのACCOUTで「0xAb8…35cb2(99.999999999993574208 ether)」
- 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2さんは最初に100ether持ってたうちの6425792 wei 使ってデプロイした
    - サイドパネルからshowBalanceをクリックすると関数を実行し残高を確認できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798091/06406702-58df-0bb5-60c7-bdf8e44b92ee.png)
        

## 送金

0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2さんに別のアカウントから6425792 wget返してあげます。

- サイドパネルからACCOUNTを0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02dbさんに変更

- VALUEを6425792 Weiに設定し Deployed Contractsから sendに0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2を入れて押します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798091/397ea372-ab74-309d-f44d-101b4d2358fd.png)

## まとめ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798091/4f2f1ea2-fd5e-ff58-da70-54003a3954c7.png)


100より増えてます．call()関数は追加のガスを含めて送金するらしいです。ちょうどにするにはtransfer()かgasを差し引いた額を送金する必要があります。