일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 미쉬킨의화폐와금융 #미쉬킨 #화폐금융론 #화폐와금융 #경제학 #교양 #경제지식 #경제공부
- vp #vc #did #신원인증 #블록체인
- html #js #parsing
- 블록체인 #layer2 #레이어2 #이더리움스케일링
- #국제채권시장 #유로본드 #유로커런시 #유로달러 #외국채 #금융중개기관 #간접금융 #거래비용#다우존스공업평균지수 #나스닥종합지수 #FTSE100 #DAX #CAC40 #straittimes #항생지수 #거래비용 #유동성 #위
- 자료구조 #알고리즘
- #경제상식 #화폐 #금융 #화폐금융론 #경제학 #경제기본 #경제지식 #경제근육 #투자지식 #경제공부 #경제학전공 #금융이란 #화폐란 #금융시장 #금융시장역할 #화폐역할 #화폐역기능 #금융역기능 #
- 페이스북유니버시티 #마케팅교육 #마케팅캠프
Archives
- Today
- Total
평행우주 : world 1
[Solidity] Subcurrency 코드 분석 본문
Subcurrency
간단한 가상화폐를 만드는 코드
코인 발행은 컨트랙트를 만든 사람만이 할 수 있다
코인을 전송할 땐 아이디와 비밀번호 등이 필요하지 않다
오직 필요한 것은 이더리움 키 쌍이다
pragma solidity ^0.5.0;
contract Coin {
//public은 변수의 현재 값을 컨트랙트 바깥에서 접근할 수 있도록 하는 함수를 자동으로 만든다
//address 타입은 160 비트의 값으로 그 어떤 산술 연산도 허용하지 않는다
//address 타입은 컨트랙트 주소나 외부 사용자들의 키 쌍을 저장하는 데 적합
address public minter;
//주소와 양의 정수를 연결(매핑)
//매핑은 가상으로 초기화되는 해시테이블
//모든 가능한 키값은 처음부터 존재하며, 이 키 값들은 바이트 표현이 모두 0인 값에 매핑된다
mapping (address => uint) public balances;
// Events allow light clients to react to
// changes efficiently.
//이벤트가 발생되었을 때 from, to, amount 의 인자를 함께 받는다
//이는 트랜잭션을 파악하는데 도움
event Sent(address from, address to, uint amount);
// This is the constructor whose code is
// run only when the contract is created.
constructor() public {
//msg (tx 와 block 포함)는 유용한 전역 변수로 블록체인에 접근할 수 있는 다양한 속성들을 담는다
//msg.sender 는 외부에서 지금 함수를 호출한 주소를 나타낸다
minter = msg.sender;
}
//사용자나 컨트랙트가 호출할 수 있는 함수들 : mint 와 send
//만약 mint 를 호출한 사용자가 컨트랙트를 만든 사람이 아니면 아무일도 일어나지 않는다
function mint(address receiver, uint amount) public {
//이는 인수가 false로 평가될 경우
//모든 변경 사항이 원래대로 되돌아가도록 하는 특수 함수 require 에 의해 보장
//require 를 두 번째로 호출하면 코인이 너무 많아지게 되고,
//이는 차후에 오버플로우 에러의 원인이 될 수 있다. (위치중요)
require(msg.sender == minter);
require(amount < 1e60);
balances[receiver] += amount;
}
// send 는 어디든 코인을 보낼 사람이면 (이미 이 코인을 가진) 누구나 호출 가능
function send(address receiver, uint amount) public {
// 전송하려고 하는 코인의 양이 충분하지 않을 경우,
// require 호출은 실패하게 되며, 적절한 에러메세지를 사용자에게 제공
require(amount <= balances[msg.sender], "Insufficient balance.");
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent(msg.sender, receiver, amount);
}
}
'텃밭 1 : BlockChain > Solidity' 카테고리의 다른 글
[실습 | 블록체인] Truffle을 이용한 다량의 ERC-721 개발하기 (0) | 2022.04.07 |
---|---|
[Solidity] 이더리움 토큰과 ERC20 필수함수 + 이벤트 (0) | 2022.03.28 |
[Solidity] 컨트랙트 정의와 함수 (0) | 2022.03.28 |
[Solidity] Faucet을 구현하는 솔리디티 컨트랙트 분석 (0) | 2022.03.27 |
[Solidity] Data type (0) | 2022.03.25 |
Comments