最近solidityの勉強を始めました。
https://cryptozombies.io/jp/course でなんとなくSolidityの書き方が身についてきて、そろそろ自分のスマートコントラクトを作ってみたくなったということで、Remixで簡単な送金ができるコントラクトを作ります。
Remix
RemixはEthereumのスマートコントラクトを開発するための統合開発環境です。ブラウザで動きます。
同じ名前のwebフレームワークがありますが関係ありません。
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を押す
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 使ってデプロイした
送金
0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2さんに別のアカウントから6425792 wget返してあげます。
-
サイドパネルからACCOUNTを0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02dbさんに変更
-
VALUEを6425792 Weiに設定し Deployed Contractsから sendに0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2を入れて押します。
まとめ
100より増えてます.call()関数は追加のガスを含めて送金するらしいです。ちょうどにするにはtransfer()かgasを差し引いた額を送金する必要があります。