エンティティの理解(クリプトンゾンビ)
9681 ワード
クリプトンゾンビへ
修飾子のプロパティ
引数を持つ関数コントロール
関数コントローラは、引数を受け入れることもできます.例:
"_ ; "実行可能な関数の残りの内容を使用することに注意してください.
構造体をパラメータに渡す
ソースの弱点
上記の方法は,CAアドレスとEOAアドレスの形態類似点とTx.originのセキュリティホールをfallback関数として利用するfishing技術である.したがって,簡単な送金であっても,EtherScan等による送金の前にアドレスがEOAかCAかを確認する必要がある.
+既知のBC攻撃事例を理解する
<エンティティ関数の構文部分はすべてCryptoZombiesの内容を参照しています.>
SandBoxサービス、イーサネットブロックチェーンの原理を理解するために使用
修飾子のプロパティ
modifier onlyOwner() {
require(msg.sender == owner)
;
}
前述したように、修飾子プロパティを使用して関数を宣言します.functnion test1() public onlyOwner {
~~~;
}
この修飾子に設定されたrequire構文はtest 1関数にも適用されます.JSでclassを使用して特定の値をプリセットする概念と同様に、関数式と同じ形式であることに注意してください.引数を持つ関数コントロール
関数コントローラは、引数を受け入れることもできます.例:
// 사용자의 나이를 저장하기 위한 매핑
mapping (uint => uint) public age;
// 사용자가 특정 나이 이상인지 확인하는 제어자
modifier olderThan(uint _age, uint _userId) {
require (age[_userId] >= _age);
_;
}
// 차를 운전하기 위햐서는 16살 이상이어야 한다
// `olderThan` 제어자를 인수와 함께 호출하려면 ↓
function driveCar(uint _userId) public olderThan(16, _userId) {
// (필요한 함수 내용들 입력)
}
こちらです. olderthan
コントロールを表示すると、関数に似たパラメータが表示されます.まだあります. driveCar
関数は、受信したパラメータを制御者として渡します.制御者の最後の行"_ ; "実行可能な関数の残りの内容を使用することに注意してください.
構造体をパラメータに渡す
private
または internal
構造体のstorageポインタをパラメータとして関数に渡すことができます.たとえば、関数間 Zombie
名前の構造を交換するとfunction _doStuff(Zombie storage _zombie) internal {
}
このようにして、構造体をパラメータとして関数に渡し、構造体要素への参照を渡すことができる.ソースの弱点
pragma solidity 0.8.4;
contract fishingTest {
address owner;
constructor() payable {
owner = msg.sender;
}
function chkBalance() public view returns(uint) {
return address(this).balance;
}
function withdraw(address _to) public {
require(tx.origin == owner);
payable(_to).transfer(address(this).balance);
}
function clear() public {
require(owner == msg.sender);
selfdestruct(payable(owner));
}
}
上図には、作成者のみがrequire関数のrequire構文を通過できることが示されています.しかし、作成者がdetakeを呼び出さなくても、契約のイーサをキャプチャすることができます.// Vulnerable contract
function withdraw(address payable _recipient) public {
require(tx.origin == owner);
_recipient.transfer(address(this).balance);
}
// Malicious contract
fallback() external payable {
vulnerableContract.withdraw(attackerAddress);
}
略奪者は生成者に少量のイーサを借り,略奪者本人のEOAを送信するふりをし,略奪としてのfallback関数を含むcontract CAアドレスを送信する.作成者がイーサをアドレスに送信すると、自動的に「奪取承諾」のfallback関数が実行され、イーサは予め「奪取承諾」を入力した「奪取者」のアドレスに奪取される.上記の方法は,CAアドレスとEOAアドレスの形態類似点とTx.originのセキュリティホールをfallback関数として利用するfishing技術である.したがって,簡単な送金であっても,EtherScan等による送金の前にアドレスがEOAかCAかを確認する必要がある.
+既知のBC攻撃事例を理解する
<エンティティ関数の構文部分はすべてCryptoZombiesの内容を参照しています.>
SandBoxサービス、イーサネットブロックチェーンの原理を理解するために使用
Reference
この問題について(エンティティの理解(クリプトンゾンビ)), 我々は、より多くの情報をここで見つけました https://velog.io/@knave/7.30テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol