私は最近、Solidityを再学習し、詳細を統合し、初心者が使用できる「Solidity Minimalist Primer」を書いています(プログラミングの人は別のチュートリアルを見つけることができます)、週に1〜3回更新しています。
すべてのコードとチュートリアルは、GitHubでオープンソースです github.com/AmazingAng/WTFSolidity。
Solidityには、ETHを他のコントラクトに送る方法があり、transfer()、send()、call()の3つの方法があり、call()が推奨されています。
まず、ETHを受信するためのコントラクトであるReceiveETHをデプロイすることから始めましょう。 ReceiveETHコントラクトには、受け取ったETHの量とガスの残量を記録するイベントログがあります。 また、ETHを受信してログイベントを送信したときにトリガーされるreceive()と、コントラクトのETH残高を照会するgetBalance()の2つの関数があります。
コントラクトをデプロイした後、getBalance()関数を実行すると、現在のコントラクトのETH残高が0であることがわかります。
ETHをReceiveETHコントラクトに送る3つの方法を実装します。 まず、ETHコントラクトを送信するSendETHコントラクトに買掛金のコンストラクタとreceive()を実装し、デプロイ時およびデプロイ後にコントラクトに送金できるようにします。
使用法は転送です。
transfer() のガスリミットは 2300 で、転送には十分ですが、他のコントラクトの fallback() または receive() 関数は、あまり複雑なロジックを実装できません。
transfer() は、転送に失敗した場合、自動的に元に戻します。
コード例では、パラメーター Enter the address of the ReceiveETH contract の _to に注意し、金額は ETH 転送金額です。
使用量は送信(送信されたETHの量)です。
send() のガスリミットは 2300 で、転送には十分ですが、他のコントラクトの fallback() または receive() 関数では、あまり複雑なロジックを実装できません。
send() は、転送に失敗した場合、元に戻しません。
send() の戻り値は bool で、これは転送が成功したか失敗したかを意味し、それを処理するために追加のコードが必要です。
コード例:
使用法はcall{value: the amount of ETH sent}(“”)です。
call()にはガス制限がなく、他のコントラクトのfallback()またはreceive()関数をサポートして複雑なロジックを実装できます。
call() は、転送に失敗しても元に戻しません。
call() は (bool, data) を返しますが、bool は転送の成功または失敗を表し、処理するには追加のコードが必要です。
3つのメソッドをすべて実行すると、すべてETHをReceiveETHコントラクトに正常に送信できることがわかります。
この講演では、ETHを送信するための3つのソリッド化方法(転送、送信、呼び出し)を紹介します。
コールにはガスリミットがなく、最も柔軟性があり、最も推奨される方法であり、転送には2300のガスリミットがありますが、送信に失敗した場合は、次善の選択であるトランザクションを自動的に元に戻します、そして送信には2300のガスリミットがあり、送信に失敗した場合、トランザクションを自動的に元に戻すことはなく、ほとんど誰も使用しません。
11.45K 人気度
19.98K 人気度
13.67K 人気度
7.14K 人気度
96.02K 人気度
Solidity Minimalist Primer|第20回:ETHの送金、送信、呼び出し
私は最近、Solidityを再学習し、詳細を統合し、初心者が使用できる「Solidity Minimalist Primer」を書いています(プログラミングの人は別のチュートリアルを見つけることができます)、週に1〜3回更新しています。
すべてのコードとチュートリアルは、GitHubでオープンソースです github.com/AmazingAng/WTFSolidity。
Solidityには、ETHを他のコントラクトに送る方法があり、transfer()、send()、call()の3つの方法があり、call()が推奨されています。
ETHコントラクトの受け取り
まず、ETHを受信するためのコントラクトであるReceiveETHをデプロイすることから始めましょう。 ReceiveETHコントラクトには、受け取ったETHの量とガスの残量を記録するイベントログがあります。 また、ETHを受信してログイベントを送信したときにトリガーされるreceive()と、コントラクトのETH残高を照会するgetBalance()の2つの関数があります。
コントラクトをデプロイした後、getBalance()関数を実行すると、現在のコントラクトのETH残高が0であることがわかります。
ETHコントラクトの送信
ETHをReceiveETHコントラクトに送る3つの方法を実装します。 まず、ETHコントラクトを送信するSendETHコントラクトに買掛金のコンストラクタとreceive()を実装し、デプロイ時およびデプロイ後にコントラクトに送金できるようにします。
転送
使用法は転送です。
transfer() のガスリミットは 2300 で、転送には十分ですが、他のコントラクトの fallback() または receive() 関数は、あまり複雑なロジックを実装できません。
transfer() は、転送に失敗した場合、自動的に元に戻します。
コード例では、パラメーター Enter the address of the ReceiveETH contract の _to に注意し、金額は ETH 転送金額です。
送信
使用量は送信(送信されたETHの量)です。
send() のガスリミットは 2300 で、転送には十分ですが、他のコントラクトの fallback() または receive() 関数では、あまり複雑なロジックを実装できません。
send() は、転送に失敗した場合、元に戻しません。
send() の戻り値は bool で、これは転送が成功したか失敗したかを意味し、それを処理するために追加のコードが必要です。
コード例:
呼び出し
使用法はcall{value: the amount of ETH sent}(“”)です。
call()にはガス制限がなく、他のコントラクトのfallback()またはreceive()関数をサポートして複雑なロジックを実装できます。
call() は、転送に失敗しても元に戻しません。
call() は (bool, data) を返しますが、bool は転送の成功または失敗を表し、処理するには追加のコードが必要です。
コード例:
3つのメソッドをすべて実行すると、すべてETHをReceiveETHコントラクトに正常に送信できることがわかります。
まとめ
この講演では、ETHを送信するための3つのソリッド化方法(転送、送信、呼び出し)を紹介します。
コールにはガスリミットがなく、最も柔軟性があり、最も推奨される方法であり、転送には2300のガスリミットがありますが、送信に失敗した場合は、次善の選択であるトランザクションを自動的に元に戻します、そして送信には2300のガスリミットがあり、送信に失敗した場合、トランザクションを自動的に元に戻すことはなく、ほとんど誰も使用しません。