-
Smart contract를 solidity언어로 개발하여 Ganache에 올리고 metamask로 기부하는 예제
준비
코드
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.8.0 < 0.9.0; contract Donation1 { event EvtDonateFrom(address indexed addr, uint256 val1); event EvtDonateTo(address indexed addr, uint256 val1); event EvtRecv(address indexed addr, uint256 val1); address public donateTg; address public owner; //constructor(string memory _key1, uint _key2) { constructor(address payable _donateTarget) { owner = msg.sender; donateTg = _donateTarget; } receive() external payable { emit EvtRecv(msg.sender, msg.value); (bool bDonate,)= donateTg.call{value:msg.value}(""); require(bDonate, "Failed, donateTg.call Donate"); emit EvtDonateFrom(msg.sender, msg.value); emit EvtDonateTo(donateTg, msg.value); } //for test event EvtCallAddress(address indexed _addr, uint256 payment, bool bRst); function callV1(address _to) public payable{ (bool success,) = _to.call{value:msg.value}(""); require(success,"failed to callV1"); emit EvtCallAddress(_to, msg.value, success); } }
Remix에서 Compile
Remix에서 배포
기부 받을 대상의 address 확인.
기부 대상을 입력하고 배포
배포자: 0x346B73aD471823c824D5c3b48c6a70914e1b6125
기부대상: 0xD0796c3dcF6C622b5a42D2Bc3B65B273cFd12B2D
Contract 주소: 0xd33D3f6197B492519bB459AC539Ab80C8105516Dcreation of Donation1 pending... [block:1 txIndex:0]from: 0x346...b6125to: Donation1.(constructor)value: 0 weidata: 0x608...12b2dlogs: 0hash: 0xebe...9c652 status true Transaction mined and execution succeed transaction hash 0x68efb8855ff56d92f4cf1a17cabf3fe21feaa814e8405fa654a09886ac3febfa from 0x346B73aD471823c824D5c3b48c6a70914e1b6125 to Donation1.(constructor) gas 454993 gas transaction cost 454993 gas input 0x608...12b2d decoded input { "address _donateTarget": "0xD0796c3dcF6C622b5a42D2Bc3B65B273cFd12B2D" } decoded output - logs [] val 0 wei
Remix에서 Contract 주소 확인
배포 후 Ether
Metamask에서 기부
테스트를 위해 3번 account 사용
Contract 주소를 입력하면 금액을 입력할 수 있다.
예상 가스 요금
0.00105428
0.001054MONEY1
최대 요금
0.00105428MONEY1
합계
10.00105428
10.00105428MONEY1
금액 + 가스 요금
최대 금액: 10.00105428MONEY1확인을 누르면 Contract로 돈을 보내고 Contract에서 기부 대상에게 다시 보낸다.
기부 결과 확인
'Blockchain' 카테고리의 다른 글
Remix Ganache 연결 (0) 2023.01.08 Metamask 계정 다시 만들기(지갑 초기화) (0) 2023.01.08 Metamask Ganache 연결 (0) 2023.01.08 Metamask Network 삭제 (0) 2023.01.08 Solidity Call, Fallback, Receive Ex (1) 2023.01.08 Solidity What does _ (underscore) (0) 2023.01.08 Geth Ethereum client (0) 2023.01.07 ERC721 관련 (0) 2023.01.07