달력

4

« 2020/4 »

  •  
  •  
  •  
  • 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
  •  
  •  


 

 

계약 생성

계약의 생성은 외부에서 이더리움 Transaction call 통해서 생성하거나 또는 Solidity Contract 내부에서 생성하는 가지 방법이 있습니다.

 

·       Contract 내부에서 생성하는 방법

·       Contract 외부에서 생성하는 방법

 

 

 

 

 

Contract 내부에서 생성하는 방법

·       Solidity Contract 내부에서 생성하는 방법입니다.

·       Contract 내부에서 생성하는 방법은 new 키워드를 통해서 다른 Contract 생성하는 방법이 있습니다.

 

 

 

 

 

Contract 외부에서 생성하는 방법

·       외부에서 이더리움 Transaction call 통해서 생성하는 방법입니다.

·       외부에서 생성하는 가장 대표적인 방법이 Javascript API web3.js 통하는 것입니다.

 

 

web3.js - Ethereum JavaScript AP

https://web3js.readthedocs.io/en/1.0/


 

 

 

 

 

Contract 내부 생성 vs Contract 외부 생성

 

Contract 내부 생성

Contract 외부 생성

Ethereum Transaction call

Solidity Contract 내부

Javascript API web3.js 사용

new 키워드를 사용

 

 

 



Posted by codedragon codedragon

댓글을 달아 주세요


 

 

 

함수 호출(Function Calls)

함수를 호출하는 방식은 스마트 계약 내에서 이루어지는 Internal function call 내부 함수 호출과 Contract 함수를 호출하는 External Function Call 외부함수 호출로 구분됩니다.

 

·       Internal Function Call

·       External Function Call

 

 

 

 

Internal Function Call

·       내부 함수 호출은 Contract 내부에서 함수를 호출합니다. 동일 스마트 계약 함수들끼리만 가능합니다.

·       EVM 내에서의 단순한 호출이므로 현재의 메모리 상태가 유지되는 특징이 있습니다.

 

 

 

 

 

 

 

 

 

External Function Call

·       외부 함수 호출은 스마트 계약의 함수를 호출합니다.

·       내부 함수 호출이 단순 호출(Simple jump) 반해서 외부 함수 호출은 Message Call 형태를 띠게 됩니다.

·       함수 호출에 따라 변숫값(메모리에 저장된 ) 복제되어 전달됩니다.

·       Message Call 형태이므로 value gas 전달되어야 하며, .value() .gas()함수를 통해서 호출됩니다.

 

 

 

 

 

Internal Function Call vs External Function Call

 

Internal Function Call

External Function Call

단순 호출(Simple jump)

메시지콜(Message Call)

 

 



Posted by codedragon codedragon

댓글을 달아 주세요


 

 

 

특수용도 변수들 & 함수들

이더리움 스마트 계약은 특수 용도의 변수들과 함수들을 정의하고 있습니다.

 


 

 

 

구분

설명

blockhash

·       Blockhash blocknumber input 인자로 받습니다.

·       주어진 block number 해당하는 32 bytes hash값을 리턴합니다.

block.coinbase

·       현재 블록 채굴자의 외부 계정 주소(address) 또는 지갑 주소를 리턴하게 됩니다.

block.difficulty

·       현재 블록의 채굴 난이도를 반환합니다.

block.gaslimit

·       현재 블록의 가스 리미트를 반환합니다.

block.number

·       현재 블록의 넘버를 반환합니다.

·       현재 블록의 넘버는 현재 블록까지의 블록체인 길이이기도 니다.

block.timestamp

·       현재 블록의 timestamp로서 unix epoch 이후 단위를 알려줍니다.

gasleft()

·       Gasleft 함수로써 현재 남은 가스량을 알려줍니다.

msg.gas

·       gasleft() 함수와 마찬가지로 현재 남은 가스량을 알려줍니다.

·       0.4.21 버전 이전에 사용되다가, 이후 gasleft() 대체되었습니다.

msg.data

·       현재 message call 전체 데이터를 반환합니다. Cal Data라고도 부릅니다.

msg.sig

·       msg.data 또는 Call Data 4 bytes 반환합니다.

·       함수 ID로도 사용됩니다.

msg.value

·       현재 message call 함께 전송된 Ether 양입니다.

·       스마트 계약에서 Ether 기본단위인 wei 단위로 표현됩니다.

now

·       현재 블록의 timestamp로서 block.timestamp 동일합니다.

tx.gasprice

·       Transaction Gas Price 반환합니다.

tx.origin

·       transaction 송신자의 주소(address) 반환합니다.

 

 

이더리움 스마트 계약은 블록의 넘버와 같은 블록 정보에 접근할 있고 이더리움 백서에 언급된 Blockchain Awareness 개념이 구현되어 있습니다.

비트코인은 Blockchain Blindness, 비트코인 스크립트는 블록의 정보를 수가 없습니다.

 


'Security > BlockChain' 카테고리의 다른 글

이더리움 통화량  (0) 2020.02.02
비트코인 블록 탐색기(Blockchain Explorer)  (0) 2020.01.27
특수용도 변수들 & 함수들  (0) 2020.01.21
블록체인의 활용분야  (0) 2020.01.14
Turing Complete  (0) 2020.01.07
State Variable 접근 유형  (0) 2019.12.30
Posted by codedragon codedragon

댓글을 달아 주세요



 

 

State Variable 접근 유형

접근 유형에는 다음과 같이 4가지 유형이 존재합니다.

 

 

private < internal < external < public

 

 

 

public

·         public으로 선언된 함수나 state 변수는 내부 호출 또는 message call 통해서 호출 또는 접근이 가능합니다.

·         public state 변수는 자동적으로 getter 함수가 생성됩니다.

 

 

 

 

 

external

·         external  스마트 계약  거래를 통해서 호출이 가능합니다.

·         external Internal 통해서 호출하는 대신 this 객체를 이용해서 외부 호출방식으로 내부호출도 가능합니다.

 

 

 

 

internal

·         Internal 선언된 함수  변수는 해당 contract 내부적으로만 접근이 가능합니다.

·          Contract  transaction, message call 통해서 호출  접근이 불가능합니다.

 

 

 

 

 

private

·         private 선언된 함수와 변수는 해당 스마트 계약에만 종속됩니다.

·         스마트 계약도 객체지향 언어의 일종으로 함수와 변수에 대한 정의를 상속(inheritance)  있습니다이때 private 선언된 함수와 변수는 상속이 되지 않습니다.

 



Posted by codedragon codedragon

댓글을 달아 주세요


 

 

제어 구조(Control structure)

·       Solidity 언어는 기존의 Javascript 언어 C 언어와 유사합니다.

·       Solidity Javascript 대부분의 control structure 거의 그대로 사용할 있습니다.

·       switch goto 기존 언어와 사용방법이 다르므로 사용에 주의를 기울여야 합니다.

·       switch goto를 제외한 나머지 if, else, while, do, for, break, continue, return 기존 언어 그대로 사용됩니다.

 



Posted by codedragon codedragon

댓글을 달아 주세요

2019. 10. 31. 16:02

Scopoing Security/BlockChain


 

 

Scopoing

통상 일반적인 프로그래밍 언어에서 선언된 변수는 문법적 블록 내에서 유효합니다. 이에 반해 solidity 함수 내에서 선언된 변수는 함수 내에서만 scope 가집니다.

 

일반적인 프로그래밍 언어

solidity  언어

문법적 블록 내에서 유효

solidity 함수 내에서만 유효

 

 





'Security > BlockChain' 카테고리의 다른 글

스마트 계약 구조  (0) 2019.11.20
제어 구조(Control structure)  (0) 2019.11.10
Scopoing  (0) 2019.10.31
hydra (히드라) 영문 문서  (0) 2019.10.15
간단한 스마트 계약의 예제  (0) 2019.10.08
Solidity 특징  (0) 2019.09.26
Posted by codedragon codedragon

댓글을 달아 주세요


 

 

간단한 스마트 계약의 예제

스마트 계약의 구조를 이해할 있는 가장 기본적인 스마트 계약의 예제입니다.

예제는 스마트 계약이 갖추어야 기본 요소들을 모두 포함하고 있습니다.

 

SimpleStorage.sol


http://bit.ly/2CyJW2i

 



'Security > BlockChain' 카테고리의 다른 글

Scopoing  (0) 2019.10.31
hydra (히드라) 영문 문서  (0) 2019.10.15
간단한 스마트 계약의 예제  (0) 2019.10.08
Solidity 특징  (0) 2019.09.26
선언된 변수  (0) 2019.08.29
Ether 송금과 수수료  (0) 2019.08.18
Posted by codedragon codedragon

댓글을 달아 주세요


 

 

Solidity 특징

·       Turing Complete 프로그래밍 언어

·       BitCoin(비트코인) vs Ethereum(이더리움)

 

 

Turing Complete 프로그래밍 언어

·       Turing Complete 프로그래밍 언어입니다. Turing Complete 프로그래밍 언어로 어떠한 알고리즘과 응용프로그램도 구현할 있습니다.

·       비트코인의 경우 프로그래밍이 가능한 Script 언어가 있지만 Turing Complete하지 않습니다. 따라서 비트코인 Script 언어를 가지고는 모든 알고리즘이나 응용프로그램을 구현할 없습니다.

Turing Complete 언급되는 이유는 이더리움이 비트코인과 많이 비교되기 때문입니다.

·       비트코인은 화폐의 기능으로서 저장, 전송에 적합하지만 Turing Incomplete하므로 이더리움과 같은 범용적인 스마트 계약을 작성할 없습니다.

 

 

 

 

BitCoin(비트코인) vs Ethereum(이더리움)

비트코인의 경우 프로그래밍이 가능한 Script 언어가 있지만 Turing Complete하지 않습니다. 따라서 비트코인 Script 언어를 가지고는 모든 알고리즘이나 응용프로그램을 구현할 없습니다.

BitCoin

Ethereum

Programmable Script

Programmable Language

Turing Incomplete

Turing Complete

화폐의 기능으로서 저장, 전송에 적합

화폐기능 + 범용적인 스마트 계약 작성

P2P 전자화폐

스마트 계약과 분산 애플리케이션

 

 



'Security > BlockChain' 카테고리의 다른 글

hydra (히드라) 영문 문서  (0) 2019.10.15
간단한 스마트 계약의 예제  (0) 2019.10.08
Solidity 특징  (0) 2019.09.26
선언된 변수  (0) 2019.08.29
Ether 송금과 수수료  (0) 2019.08.18
스마트 계약 활용  (0) 2019.07.28
Posted by codedragon codedragon

댓글을 달아 주세요



 

 

선언된 변수

·         선언된 변수는 별도의 값을 할당하지 않는다면 Zero Bytes 초깃값이 설정됩니다.

·         bool type 경우 초깃값(default value) false이고, uint int 경우에는 0 값으로 설정됩니다.

 




Posted by codedragon codedragon

댓글을 달아 주세요


 

 

 

Ether 송금과 수수료

 

Metamask라는 이더리움 전자지갑을 통해 1 Ether 송금한 입니다.

MyEtherMetaMask

0x3edd58d56c31005b331e788fe8e6bcb9227394e0c2d090f9a5e8f3683344b7bb

 

9.000 ETH

5115.24 USD

Amount

1.000 ETH

568.36 USD

Gas Limit

21000 UNITS

Gas Price

5 GWEI

Max Transaction Fee

0.000105 ETH

0.06 USD

Max Total

1.000 ETH

568.42 USD

Data included

0 bytes

 

 

 

송금액은 1 Ether 이고, 소요되는 가스인 GAS Limit 21,000 단위가 됩니다.

Amount

1.000 ETH

568.36 USD

Gas Limit

21000 UNITS

 

 

 

 

단위당 비용인 GAS Prices 5 GWEI 되는 것으로,  1 GWEI 10 분의 1 Ether 됩니다. (5 GWEI = 0.000000005 ETH)

Gas Price

5 GWEI

 

 

 

 

송금 수수료를 계산하면 GAS Limit GAS Price 곱하여 산출됩니다.

21,000 x 0.000000005 ETH = 0.000105 ETH

 

Max Transaction Fee

0.000105 ETH

0.06 USD

 

 

 

 

1 Ether 송금할 , 송금액인 1 Ether 송금수수료를 더해야 금액이 산출됩니다.

1 ETH(송금액) + 0.000105 ETH(거래수수료)= 1.000105 ETH

Max Total

1.000 ETH

568.42 USD

 

 


Posted by codedragon codedragon

댓글을 달아 주세요