옵코드
옵코드(OPCode)는 명령 또는 함수라고도하는 모든 스크립트 단어의 목록이며, 데이터를 푸시하거나 Pubkey 스크립트 또는 서명 스크립트 내에서 기능을 수행하는 비트코인 스크립트 언어의 작업코드이다.
목차
개요
비트코인(Bitcoin) 노드에서 실행되는 소프트웨어는 프로그래밍 언어 C ++로 작성되지만 비트코인 트랜잭션에는 스크립트 라는 비트코인 관련 언어로 작성된 명령이 포함될 수도 있다. 이더리움(Ethereum) 플랫폼에는 분산 응용 프로그램 및 스마트 계약을 허용 하는 Turing-complete 프로그래밍 언어가 있지만 스크립트는 옵코드라는 일련의 명령으로 구성된 가능한 작은 범위의 작업 만 허용하는 기본 언어이다.[1]
명령어
상수
- OP_0, OP_FALSE : 빈 바이트 배열이 스택으로 푸시된다.
- N/A : 다음 옵코드 바이트는 스택에 푸시 할 데이터이다.
- OP_PUSHDATA1 : 다음 바이트는 스택으로 푸시 될 바이트 수를 포함한다.
- OP_PUSHDATA2 : 다음 2 바이트에는 리틀 엔디안 순서로 스택에 푸시 할 바이트 수가 포함된다.
- OP_PUSHDATA4 : 다음 4 바이트에는 리틀 엔디안 순서로 스택에 푸시 할 바이트 수가 포함된다.
- OP_1NEGATE : 숫자 -1이 스택으로 푸시된다. 코드 숫자로는 79로 나타내고,
- OP_1, OP_TRUE : 숫자 1이 스택으로 푸시된다.
- OP_2-OP_16 : 단어 이름(2-16)의 숫자가 스택으로 푸시된다.
흐름제어
- OP_NOP : 아무것도 하지 않는다.
- OP_IF : 최상의 스택 값이 False가 아닌 경우 명령문이 실행된다. 상단 스택값이 제거된다.
- OP_NOTIF : 최상위 스택 값이 False일 경우 명령문이 실행된다. 상단 스택값이 제거된다.
- OP_ELSE : 앞에서 OP_IF 또는 OP_NOTIF가 실행되지 않은 경우 이 명령문이 실행되고 실행 된 경우 이 명령문이 실행되지 않는다.
- OP_ENDIF : If/Else 블록을 종료한다. 모든 블록이 종료되거나 트랜잭션이 유효하지 않으며, OP_IF가 없는 OP_ENDIF도 유효하지 않다.
- OP_VERIFY : 최상위 스택 값이 True가 아닌 경우 트랜잭션을 유효하지 않은 것으로 표시한다. 상단 스택 값이 제거된다.
- OP_RETURN : 트랜잭션을 유효하지 않은 것으로 표시한다. OP_RETURN 이후 푸시문의 시퀀스를 포함하는 OP_RETURN으로 단일 출력을 허용한다.
스택
- OP_TOALTSTACK : 입력을 Alt 스택의 맨 위에 놓는다. 기본 스택에서 제거한다.
- OP_FROMALTSTACK : 입력을 기본 스택의 맨 위에 놓는다. 대체 스택에서 제거한다.
- OP_IFDUP : 상단 스택 값이 0이 아니면 복제한다.
- OP_DEPTH : 스택 항목 수를 스택에 넣는다.
- OP_DROP : 상단 스택 항목을 제거한다.
- OP_DUP : 상단 스택 항목을 복제한다.
- OP_NIP : 두 번째부터 끝까지 쌓인 항목을 제거한다.
- OP_OVER : 두 번째에서 위쪽까지 스택 항목을 맨 위에 복사한다.
- OP_PICK : 스택에 있는 항목 n이 맨 위로 복사된다.
- OP_ROLL : 스택에 있는 항목 n이 맨 위로 이동한다.
- OP_ROT : 스택의 맨 위 3개 항목이 왼쪽으로 회전한다.
- OP_SWAP : 스택의 맨 위 두 항목이 바뀐다.
- OP_TUCK : 스택의 맨 위에 있는 항목이 두 번째에서 맨 위 항목보다 먼저 복사되고 삽입된다.
- OP_2DROP 맨 위 두개의 스택 항목을 제거한다.
- OP_2DUP : 상위 2개의 스택 항목을 복제한다.
- OP_3DUP : 상위 3개의 스택 항목을 복제한다.
- OP_2OVER : 한 쌍의 항목을 스택의 앞뒤로 두 칸 복사한다.
- OP_2ROT : 5번째와 6번째 항목은 스택의 맨위로 이동한다.
- OP_25WAP : 상위 두 쌍의 항목을 교환한다.
접착
- OP_CAT : 두 개의 문자열을 연결한다. 비활성화 되었다.
- OP_SUBSTR : 문자열의 섹션을 반환한다. 비활성화 되었다.
- OP_LEFT : 문자열에서 지정된 지점의 왼쪽 문자만 유지한다. 비활성화 되었다.
- OP_RIGHT : 문자열에서 지정된 지점의 문자만 유지한다. 비활성화 되었다.
- OP_SIZE : 스택 맨 위 요소의 문자열 길이를 펼치지 않는다.
비트 논리
산수
암호화
잠금 시간
의사 단어
예약어
비활성화된 옵코드
2010년과 2011년에 심각한 버그가 발견되면서 비트코인 스크립트 언어에서 많은 옵코드가 비활성화되었다. 이러한 옵코드 중 일부가 비트코인 캐시(Bitcoin Cash)에서 제공 한 기능을 복원하고자 단순히 옵코드를 다시 활성화하는 대신, 제공하는 기능이 재검토되었으며 경우에 따라 옵코드가 다시 설계되었거나 특정 문제를 해결하기 위해 새로운 옵코드가 추가되었다.[2]
각주
- ↑ Corin Faife, 〈Nodes, Opcodes, and Satoshi's Vision: Today's Bitcoin Cash Hard Fork Explained〉, 《BREAKERMAG》, 2018-11-15
- ↑ 비트코인 캐시 공식 홈페이지 - https://www.bitcoincash.org/es/spec/may-2018-reenabled-opcodes.html
참고자료
- 비트코인 공식 홈페이지 - https://bitcoin.org/en/glossary/op-code
- 〈Script〉, 《비트코인위키》
- Corin Faife, 〈Nodes, Opcodes, and Satoshi's Vision: Today's Bitcoin Cash Hard Fork Explained〉, 《BREAKERMAG》, 2018-11-15
- 비트코인 캐시 공식 홈페이지 - https://www.bitcoincash.org/es/spec/may-2018-reenabled-opcodes.html