πͺ 2023. 05. 12. Friday_ ν λͺ λ¨ κ³΅μ§! λλ₯! πͺ
β
μλ νμΈμ!π
λͺ¨λ ν¨κ» 4κ°μ λμ νλμ λ©μ§ νλ‘μ νΈλ₯Ό μμ±νλ κ·Έλ κΉμ§ νμ΄ν
ν©μλ€ !πππ
β
* μ΄ κ³³μμλ λΉμΌμ λ°°μ΄ λ΄μ©μ 볡μ΅νλ μ©λλ‘ κΈμ μμ±νλ €κ³ ν©λλ€.
β
* μ€λμ μ리λν°μ 'PAYABLE' λ΄μ©μ 볡μ΅ν΄λ³΄κ² μ΅λλ€.
β
β
β
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.18;
contract Note {
address a;
address payable owner;
function setOwner() public {
owner = payable(msg.sender);
}
function getOwner() public view returns(address payable) {
return owner;
}
function setA() public {
a = msg.sender;
}
function getA() public view returns(address) {
return a;
}
```solidity
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.18;
/*
μ€μ΅κ°μ΄λ
1. 1λ² μ§κ° μ€λΉ(μ£Όμ 볡λΆ) -> setOwner, 2λ² μ§κ° μ€λΉ(μ£Όμ 볡λΆ) -> setA
2. deploy ν 1λ² μ§κ°μΌλ‘ 10eth -> deposit()
3. contract μμ‘ λ³ν νμΈ
4. 1λ² μ§κ° λ£κ³ , 1000000000000000000 transferTo() -> 1λ²μ§κ°, contract μμ‘ λ³ν νμΈ
5. 2λ² μ§κ°, 1000000000000000000, transferTo() -> 2λ² μ§κ°, contract μμ‘ λ³ν νμΈ
0x5B38Da6a701c568545dCfcB03FcB875f56beddC4
0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2
*/
contract Note {
address a;
address payable owner;
function deposit() public payable returns(uint){
return msg.value;
}
function setOwner() public {
owner = payable(msg.sender);
}
function getOwner() public view returns(address payable) {
return owner;
}
function setA() public {
a = msg.sender;
}
function getA() public view returns(address) {
return a;
}
/////////////λμ 보λ΄λ ν¨μ///////////////////////////////////////
function transferTo(address payable _to, uint _amount) public {
_to.transfer(_amount); // μ§κ°μ£Όμ.transfer(κ·λͺ¨)
}
function transferToOwner(uint _amount) public {
owner.transfer(_amount);
}
/*function transferToA(uint _amount) public {
a.transfer(_amount);
}*/
}
β
β
βοΈ address μ μΈ
β β βͺοΈ address a : address ν λ³μ aλ₯Ό μ μΈ
β β βͺοΈ address payable owner : λμ λ°μ μ μλ address ν λ³μ ownder μ μΈ
β
βοΈ setOwner()
β β βͺοΈ ν¨μλ₯Ό λλ₯Έ μ¬λμ΄ ownerκ° λ μ μλλ‘ μ€μ νλ ν¨μ
β β βͺοΈ msg.sender : κ±°λλ₯Ό μΌμΌν¨ μ¬λμ μλ―Έ (== λ²νΌμ λλ₯Έ μ¬λ)
β β βͺοΈ this : λ°νν κ² == contract address (ν΄λΉ 컨νΈλ νΈ address λ°ν)
β
βοΈ getOwner()
β β βͺοΈ ownerμ μ§κ° μ£Όμλ₯Ό λ°λ ν¨μ
β β βͺοΈ return κ° : owner
β
βοΈ setA()
β β βͺοΈ ν¨μλ₯Ό λλ₯Έ μ¬λμ΄ aκ° λ μ μλλ‘ μ€μ νλ ν¨μ
β
βοΈλμ 보λ΄λ ν¨μ == μ§κ°μ£Όμ.transfer(μΌλ§νΌ 보λΌμ§ μ)
β
βοΈ transferTo()
β β βͺοΈ ~μκ² ~λ§νΌμ λμ 보λ΄λ ν¨μ
β β βͺοΈ input κ° : _to(λꡬμκ² λ³΄λΌ κ²μΈμ§ ) + _amount(μΌλ§λ§νΌ λ³΄λΌ κ²μΈμ§)
β
βοΈ transferToOwner()
β β βͺοΈ Ownerμκ² λμ 보λ΄λ ν¨μ
β β βͺοΈ input : Ownerλ‘ νΉμ μ§κ° μ£Όμλ₯Ό μ§μ νμμΌλ‘ _amount κ°λ§ νμνλ€.
β
βοΈ transferToA()
β β βͺοΈ Aμκ² λμ 보λ΄λ ν¨μ
β β βͺοΈ aλ payableμ΄ μκΈ° λλ¬Έμ 컨νΈλ νΈλ‘ λΆν° λμ λ°μ μ μλ€.
β β βͺοΈ λ°λΌμ λ€μ ν¨μλ μ€λ₯κ° λ°μνλ€.
β
β
β
β
βοΈ payable
β β βͺοΈ λμ λ°μ μ μλμ§ νμΈν΄μ€λ€.
β β β β β πΈex) 컨νΈλ νΈλ‘λΆν° λμ λ°μ κ²½μ°, payableμ΄ μμ΄μΌ λμ λ°μ μ μλ€!
β β βͺοΈ μ§κ° μκ³ λ₯Ό λ°κΏμ€λ€~!~
β β βͺοΈ μ»¨νΈλ νΈ μ
μ₯μμλ λμ΄ λΉ μ Έλκ°λ€κ³ ννν μ μλ€.
β
β
β
β
βοΈ function transferTo(address payable _to, uint _amount) public {}
β β βͺοΈ payableμ΄ μμΌλ©΄, 컨νΈλ νΈλ‘ λΆν° λμ λ°μ μ μλ€.
β β βͺοΈ BUT!!!
β β βͺοΈ μμ ν¨μμ²λΌ input κ°μ payableμ λΆμ¬μ κ°μ λ°μ κ²½μ°μλ λμ λ°μ μ μλ€.
β
β
β
function deposit() public payable{}
βοΈ deposit
β β βͺοΈ μ»¨νΈλ νΈμ μ’
μλμ΄ μλ ν¨μμ΄λ€.
β β βͺοΈ νΉμ μ€λ§νΈμ»¨νΈλ νΈκ° λμ λ°μ μ μκ² ν΄μ£Όλ ν¨μμ΄λ€!
β
receive() external payable{}
βοΈ receive
β β βͺοΈ μ΄λλ₯Ό λ°λλ° νΉνλ ν¨μμ΄λ€.
β β βͺοΈ μμ½μ΄λ‘ λμ΄ μλ€.
β
fallback() external payable{}
βοΈ fallback
β β βͺοΈ μ‘΄μ¬νμ§ μλ ν¨μλ₯Ό νΈμΆν λ μ¬μ©νλ ν¨μμ΄λ€.
β β βͺοΈ μμΈμ²λ¦¬μ λΉμ·νλ€κ³ μκ°νλ©΄ λλ€.
β
β
β
β
βοΈ deposit
β β βͺοΈ ν¨μλ₯Ό μ€ν μμΌμΌ 컨νΈλ νΈλ‘λΆν° λμ λ°μ μ μλ€.
β
βοΈ receive
β β βͺοΈ CA - CA κ±°λμ μ¬μ©
β β β β β πΈCA : 컨νΈλ νΈμ μ’
μλ μ§κ°
β β β β β πΈEOA : μ¬λμ΄ μμ ν μ§κ°
β β βͺοΈ λμ μ μ‘νλ κ±°λλ₯Ό λ°μνμ κ²½μ° μμμ νΈμΆλλ€.
β
βοΈ λμ 보λ΄λ ν¨μλ₯Ό μ€νμμΌ°μ κ²½μ° !
β β βͺοΈ ν¨μλ₯Ό μ€νμ, from - to λΆλΆμ νμΈν μ μλλ°
β β βͺοΈ receive: toμ ν¨μλͺ
μ΄ μ λΆλλ€.
β β βͺοΈ deposit : toμ λ°μν ν¨μλͺ
μ΄ λΆλλ€.
β
β
β
function deposit() public payable returns(uint) {
return msg.value;
}
βοΈ msg.value
β β βͺοΈ λ³΄λΈ λ§νΌμ λμ μμ νμΈν λ μ¬μ©νλ€.
β β βͺοΈ payable()κ° λΆμ΄ μμ΄μΌ μκ³ λ₯Ό νμΈν μ μλ€.
β β βͺοΈ deployν ν decoded ouput μμ λ£μ κ°μ νμΈν μ μλ€.
β
β
β
* balance : 컨νΈλ νΈμ balanceλ₯Ό μλ―Ένλ€.
1. 1λ² μ§κ° μ€λΉ(μ£Όμ 볡λΆ) -> setOwner, 2λ² μ§κ° μ€λΉ(μ£Όμ 볡λΆ) -> setA
2. deploy ν 1λ² μ§κ°μΌλ‘ 10eth -> deposit()
3. contract μμ‘ λ³ν νμΈ
4. 1λ² μ§κ° λ£κ³ , 1000000000000000000 transferTo() -> 1λ²μ§κ°, contract μμ‘ λ³ν νμΈ
5. 2λ² μ§κ°, 1000000000000000000, transferTo() -> 2λ² μ§κ°, contract μμ‘ λ³ν νμΈ
β
β β β
벨λ‘κ·Έ λ°λ¦¬λ©΄ μλλλ°...μ΄λ―Έγ
γ
λ°λ €λ²λ €μ κ³ ν΅λ°λ μ€ ..