일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- kas
- nodejs
- 웹
- API
- 클레이튼
- Web
- 서비스체인
- javascript
- web3.js
- 앵커링
- Geth
- SCN
- 솔리디티
- frontend
- 블록체인 구조와 이론
- Solidity
- blockchain
- 프론트엔드
- Klaytn
- 제어자
- Klaytn API Service
- ethereum
- geth구현
- 프레임워크
- 접근제어자
- vue
- vue.js
- 블록체인
- 이더리움
- web3
- Today
- Total
목록Solidity (12)
BloCCat
1.solidity extention 이 설치 돼있어야함 2.f1 누른후 solidity: change global compiler version(remote) 클릭 후 변경 출처 https://medium.com/michaels-dapp-dev-tips/how-to-change-the-solidity-compiler-in-vs-code-4c2660a856da How to Change the Solidity Compiler in VS Code Easily Change Solidity Compiler Versions medium.com
1. 접근 제어자 - 가시성 (visibliity)로 분류 내부 컨트랙트 호출 외부 컨트랙트 호출 상속 컨트랙트 호출 public O O O private O X X external X O X internal O X O 2. 함수 타입 제어자 데이터 읽기 데이터 쓰기 가스비용 view O X X pure X X X payable O O O 3. 사용자 정의 제어자 modifire로 정의, 내용은 require(조건) , _; https://bloccat.tistory.com/29?category=926808 Ownable.sol 생성자 : 컨트랙트랑 같은 이름으로 정의하거나 constructor() 로 정의 modifier : 함수 제어자, 다른 함수들에 대한 접근을 제어하기 위해 사용되는 일종의 유사 ..
payable - 가상화폐로 접근하기 위한 키워드, 이더 코인을 전송하는 smart contract를 작성하기 위해서 반드시 사용 * payable을 작성한 함수에서만 이더를 보낼 수 있기 때문에 smart contract 외부에서 해당 함수들 중에 코인을 전송 시키는 함수를 사용하려 한다면, 해당 함수는 반드시 payable 키워드가 함께 작성된 함수이어야 한다. contract OnlineStore { function buySomething() external payable { // 함수 실행에 0.001이더가 보내졌는지 확실히 하기 위해 확인: require(msg.value == 0.001 ether); // 보내졌다면, 함수를 호출한 자에게 디지털 아이템을 전달하기 위한 내용 구성: transf..
함수 제어자는 인수 또한 받을 수 있다. // 사용자의 나이를 저장하기 위한 매핑 mapping (uint => uint) public age; // 사용자가 특정 나이 이상인지 확인하는 제어자 modifier olderThan(uint _age, uint _userId) { require (age[_userId] >= _age); _; } function driveCar(uint _userId) public olderThan(16, _userId) { // 필요한 함수 내용들 }
Gas : Dapp이 사용하는 연료 Dapp 함수를 호출할 때마다 (=트랜잭션이 발생할 때마다) 사용자가 내야하는 실제 돈(이더) 가스를 아끼기 위한 코딩법 1. 구조체 압축 struct 안에 여러개의 uint 타입의 데이터가 있다면 더 작은 크기의 uint를 쓰자. 그 변수들은 더 적은 공간을 차지하기 위해 스스로 메모리를 압축하여 사용한다. struct NormalStruct { uint a; uint b; uint c; } struct MiniMe { uint32 a; uint32 b; uint c; } // `mini`는 구조체 압축을 했기 때문에 `normal`보다 가스를 조금 사용한다 NormalStruct normal = NormalStruct(10, 20, 30); MiniMe mini =..
* 꼭 알고 넘어가야 할 것 1.컨트랙트 불변성 컨트랙트는 변하지 않는다. 즉 한번 블록체인에 배포된 컨트랙트는 수정/업데이트를 할 수 없다. 반대로 이런 특성때문에 함수 호출에 대한 의심또한 할 수 없다. 2. 외부 의존성 내 컨트랙트에 외부 컨트랙트 주소(CA)값을 인터페이스 개체에 직접 넣어 사용하게 되면 외부 컨트랙트가 문제가 생길시 내 컨트랙트(함수)에도 영향을 끼치게 된다. 따라서 이런 부분을 방지하기 위해 문제가 생기면 문제가 생긴부분만 바꿔주는 함수를 만들어 값을 저장한다. (SET METHOD) 변경 전 address ckAddress = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d; KittyInterface kittyContract = KittyInte..
생성자 : 컨트랙트랑 같은 이름으로 정의하거나 constructor() 로 정의 modifier : 함수 제어자, 다른 함수들에 대한 접근을 제어하기 위해 사용되는 일종의 유사 함수. /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address in..
1. 매핑 기본적으로 키-값(key-value) 저장소로 데이터를 저장하고 검색하는 데 이용 // 금융 앱용으로, 유저의 계좌 잔액을 보유하는 uint를 저장한다: mapping (address => uint) public accountBalance; // 혹은 userID로 유저 이름을 저장/검색하는 데 매핑을 쓸 수도 있다 mapping (uint => string) userIdToName; 2. msg.sender : 함수를 호출한 eoa(계정주소) 혹은 ca(컨트랙트 주소) mapping (address => uint) favoriteNumber; function setMyNumber(uint _myNumber) public { // `msg.sender`에 대해 `_myNumber`가 저장되도록..
1. 함수 선언 function eatHamburgers(string _name, uint _amount) { } parameter명은 _를 붙이는 것이 관습 2. public / private solidity에서 함수는 기본적으로 public으로 선언됨. 다만 함수는 기본적으로 private로 선언하고 공개할 수 있는 함수만 public으로 선언할 것. uint[] numbers; function _addToArray(uint _number) private { numbers.push(_number); } 3. 함수의 반환값 타입 지정 string greeting = "What's up dog"; function sayHello() public returns (string) { return greetin..
1. license & version 설정 // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 uint8, uint16,uint32 과 같이 비트제한 가능, 제한 없으면 256비트 int : 정수형 -> int와 마찬가지로 비트제한이 가능하며 없으면 256비트 bool : 논리 자료형 string : UTF-8 인코딩 문자열 bytes : 바이트 address : 이더리움 주소 값 (0xaDc7192A0…) 4.수학 연산 다른 언어와 마찬가지로 기본 연산에 지수 연산까지 지원 uint x = 5 ** 2; // = 5^2 = 25 5.구조체와 배열 struct Person { uint age; string name; } // 2개의 원소를 담을 수 ..