개요
smart contract가 무엇인지 알아 본다.
smart contract 정의
서면으로 이루어지던 계약을 code로 구현하고 특정 조건이 충족되었을 때 해당 계약이 이행되게 하는 script 입니다.
블록체인에서의 smart contract 란?
contract code를 compile하여 bytecode로 변경 후 blockchain의 body 안에 넣고 특정 조건이 되면 실행 하는것이 lock chain에서는 smart contract 입니다.
블록체인에서의 smart contract가 배포되는 방법
[smart contract 배포 도식]
1. smart contract code compile 과정 및compile 결과물 설명
- smart contract를 배포 하는 것은 solitidy 언어로 smart contract code를 생성하고 이를 compile하여 block chain에
배포하는것을 말합니다.
* 배포는 IDE에서 제공하는 버튼을 이용하면 손쉽게 배포가 가능 합니다.
1) https://ide.klaytn.com/ 에서 smart contract code를 작성 한 후 compile하여 배포 한다.
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
contract Contract1 {
address public owner;
constructor() {
owner = msg.sender;
}
bytes32[] proposalNames;
function beforeAll (uint256 num) public {
proposalNames.push(bytes32("candidate1"));
proposalNames.push(bytes32(num));
}
}
2) 배포시 생성되는 전체 결과물
- 다음은 IDE에서 배포 후 보여주는 결과물 전체 항목 입니다.
3) 생성된 배포 결과물 핵심 정보
(1) byte code
정의
- block chain에 deploy될 smart contract의 byte code 입니다.
사용 시기
- block chain에 배포될 때 사용 됩니다.
형태
- solidity로 작성한 code를 compile한 결과물 16진수로 이루어져있습니다.
(2) Function signature
정의
- function name과 parameter를 sha-3를 이용해서 만든 4byte signature 입니다.
사용 시기
- Contract의 function을 실행 시키기 위해서 사용 됩니다.
Contract 의 함수를 실행시키기 위해서는 Transaction 의
to: 주소에는 Contract Address
input data: 에는 function signature 4byte 함께 paramete vaule값을 16진수로하여 32byte
길이로하여 입력하면 됩니다
Ex) 실제 호출 payload
- Function : baz(uint32 x, bool y)
baz는 uint32와 bool로 정적인 type 을 인수로 갖는 함수입니다.
69, true 인수로 function를 call한다고 하면 encoding data는 다음과 같습니다.
- function signatue = 0xcdcd77c0
- 인수1 69 = 0000000000000000000000000000000000000000000000000000000000000045
- 인수2 true = 0000000000000000000000000000000000000000000000000000000000000001
// 인코딩 데이터
0xcdcd77c000000000000000000000000000000000000000000000000000000000000045
0000000000000000000000000000000000000000000000000000000000000001
(3) ABI (Application Binary Interface)
정의
- 특정 언어나 플랫폼에 종속되지 않은 방식으로 기술된 Application Interface 에 대한 정의입니다.
- Smart Contract 의 function과 parameter에 대한 MetaData를 정의해
Contract의 객체를 만들 수 있고 Contract의 함수를 호출할 수 있는 표준방법입니다.
사용 시기
- 이 ABI 를 갖고 JavaScript 언어 기반의 어플리케이션을 만들 때 객체를 만들게 할 수 있고, 쉽게 그 객체의
Method를 호출하는것 만으로 Contract 의 함수가 호출되도록 할 수 있는 것이다. 현재 Ethereum은
web3.js 와함께 JavaScript 응용에서 쉽게 ABI 로 객체를 만들어 사용하도록 지원하며, 1.4.0 이후의
go-ethereum 에서는 Go Native 언어 기반의 응용에서 Smart Contract 를 쉽게 Binding 가능하도록
ABI 기반으로 Go Code 를 생성 해주는 ABIGen 을 제공하고 있다.
참조 사이트
https://medium.com/haechi-audit-kr/smart-contract-a-to-z-79ebc04d6c86
https://goodjoon.tistory.com/261
https://docs.soliditylang.org/en/latest/solidity-by-example.html#id2
https://medium.com/linum-labs/a-technical-primer-on-using-encoded-function-calls-50e2b9939223
'내맘대로 Study > 블록체인' 카테고리의 다른 글
[블록체인] token 과 coin 비교 (0) | 2022.04.20 |
---|---|
[solidity] 개발자를 위한 속성 문법 (2) | 2022.04.11 |
[클레이튼] 테스트 klaytn wallet 만들기 (0) | 2022.04.04 |
[클레이튼] 클래이튼 이해하기 (0) | 2022.04.03 |
[클레이튼] 기존 플랫폼과의 비교 (0) | 2022.03.29 |