"옵코드"의 두 판 사이의 차이
(→상수) |
잔글 |
||
(사용자 2명의 중간 판 46개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''옵코드'''(OPCode)는 명령 또는 | + | '''옵코드'''<!--옵 코드-->(OPCode)는 명령 또는 함수라고 하는 모든 [[스크립트]] 단어의 목록이며, 데이터를 푸시하거나 Pubkey 스크립트 또는 서명 스크립트 내에서 기능을 수행하는 [[비트코인]](Bitcoin) 스크립트 언어의 작업 코드이다. '''오피코드'''<!--오피 코드-->라고도 한다. |
==개요== | ==개요== | ||
− | 비트코인 | + | 비트코인 [[노드]]에서 실행되는 [[소프트웨어]]는 프로그래밍 언어 [[C++]]로 작성되지만, 비트코인 [[트랜잭션]]에는 스크립트라는 비트코인 관련 언어로 작성된 명령이 포함될 수도 있다. [[이더리움]](Ethereum) [[플랫폼]]에는 분산 [[애플리케이션]] 및 [[스마트 계약]](Smart Contract)을 허용하는 [[Turing-complete]] 프로그래밍 언어가 있지만, 스크립트는 옵코드라는 일련의 명령으로 구성된 가능한 작은 범위의 작업만 허용하는 기본 언어이다.<ref>Corin Faife, 〈[https://breakermag.com/nodes-opcodes-and-satoshis-vision-the-bitcoin-cash-hard-fork-explained/ Nodes, Opcodes, and Satoshi's Vision: Today's Bitcoin Cash Hard Fork Explained]〉, 《BREAKERMAG》, 2018-11-15</ref> |
− | == | + | ==명령어== |
===상수=== | ===상수=== | ||
− | + | *'''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''' : 스택 맨 위 요소의 문자열 길이를 펼치지 않는다. | ||
+ | |||
+ | ===비트 논리=== | ||
+ | *'''OP_INVERT''' : 입력의 모든 비트를 뒤집는다. 비활성화 되었다. | ||
+ | *'''OP_AND''' : [[불린]](boolean)과 입력의 각 비트 사이. 비활성화되었다. | ||
+ | *'''OP_OR''' : 불린 또는 입력의 각 비트 사이. 비활성화 되었다. | ||
+ | *'''OP_XOR''' : 불린 단독 또는 입력의 각 비트 사이. 비활성화되었다. | ||
+ | *'''OP_EQUAL''' : 입력 값이 정확히 같으면 1을, 그렇지 않으면 0을 반환한다. | ||
+ | *'''OP_EQUALVERIFY''' : OP_EQUAL과 동일하지만 나중에 OP_VERIFY를 실행한다. | ||
+ | |||
+ | ===산수=== | ||
+ | *'''OP_1ADD''' : 1이 입력에 추가된다. | ||
+ | *'''OP_1SUB''' : 입력에서 1을 뺍니다. | ||
+ | *'''OP_2MUL''' : 입력에 2가 곱해진다. 비활성화 되었다. | ||
+ | *'''OP_2DIV''' : 입력은 2로 나뉜다. 비활성화 되었다. | ||
+ | *'''OP_NEGATE''' : 입력 부호가 뒤집힌다. | ||
+ | *'''OP_ABS''' : 입력은 양수이다. | ||
+ | *'''OP_NOT''' : 입력이 0 또는 1이면 뒤집힌다. 그렇지 않으면 출력은 0이다. | ||
+ | *'''OP_0NOTEQUAL''' : 입력이 0이면 0을, 그렇지 않으면 1을 반환한다. | ||
+ | *'''OP_ADD''' : a가 b에 추가된다. | ||
+ | *'''OP_SUB''' : b에서 a를 뺀다. | ||
+ | *'''OP_MUL''' : a에 b를 곱한다. 비활성화 되었다. | ||
+ | *'''OP_DIV''' : a는 b로 나뉜다. 비활성화 되었다. | ||
+ | *'''OP_MOD''' : a를 b로 나눈 후 나머지를 반환한다. 비활성화 되었다. | ||
+ | *'''OP_LSHIFT''' : 부호를 유지하면서 왼쪽 b 비트를 이동한다. 비활성화 되었다. | ||
+ | *'''OP_RSHIFT''' : 부호를 유지하면서 오른쪽 b 비트를 이동한다. 비활성화 되었다. | ||
+ | *'''OP_BOOLAND''' : a와 b가 모두 0이 아닌 경우 출력은 1이다. 그렇지 않으면 0이다. | ||
+ | *'''OP_BOOLOR''' : a 또는 b가 0이 아닌 경우 출력은 1이다. 그렇지 않으면 0이다. | ||
+ | *'''OP_NUMEQUAL''' : 숫자가 같으면 1을, 그렇지 않으면 0을 반환한다. | ||
+ | *'''OP_NUMEQUALVERIFY''' : OP_NUMEQUAL과 동일하지만 나중에 OP_VERIFY를 실행한다. | ||
+ | *'''OP_NUMNOTEQUAL''' : 숫자가 같지 않으면 1을, 그렇지 않으면 0을 반환한다. | ||
+ | *'''OP_LESSTHAN''' : a가 b보다 작은 경우 1을, 그렇지 않으면 0을 반환한다. | ||
+ | *'''OP_GREATERTHAN''' : a가 b보다 크면 1을, 그렇지 않으면 0을 반환한다. | ||
+ | *'''OP_LESSTHANOREQUAL''' : a가 b보다 작거나 같으면 1을, 그렇지 않으면 0을 반환한다. | ||
+ | *'''OP_GREATERTHANOREQUAL''' : a가 b보다 크거나 같으면 1을, 그렇지 않으면 0을 반환한다. | ||
+ | *'''OP_MIN''' : a와 b중 작은 값을 반환한다. | ||
+ | *'''OP_MAX''' : a와 b중 큰 값을 반환한다. | ||
+ | *'''OP_WITHIN''' : x가 지정된 범위내에 있으면 1을, 그렇지 않으면 0을 반환한다. | ||
+ | |||
+ | ===암호화=== | ||
+ | *'''OP_RIPEMD160''' : 입력은 RIPEMD-160을 사용하여 해시된다. | ||
+ | *'''OP_SHA1''' : 입력은 SHA-1을 사용하여 해시된다. | ||
+ | *'''OP_SHA256''' : 입력은 SHA-256을 사용하여 해시된다. | ||
+ | *'''OP_HASH160''' : 입력은 두 번 해시된다. 먼저 SHA-266을 사용한 다음 RIPEMD-160을 사용한다. | ||
+ | *'''OP_HASH256''' : 입력은 SHA-256으로 두 번 해시된다. | ||
+ | *'''OP_CODESEPARATOR''' : 모든 서명 확인 단어는 가장 최근에 실행 된 OP_CODESEPARATPR 이후의 데이터와만 서명을 일치시킨다. | ||
+ | *'''OP_CHECKSIG''' : 전체 트랜잭션의 출력, 입력 및 스크립트가 해시된다. OP_CHECKSIG에서 사용하는 서명은 이 해시와 공용키에 유효한 서명이어야 한다. 그래야만 1은 반환디고, 그렇지 않으면 0이 반환된다. | ||
+ | *'''OP_CHECKSIGVERIFY''' : OP_CHECKSIG와 동일하지만 나중에 OP_VERIFY가 실행된다. | ||
+ | *'''OP_CHECKMULTISIG''' : ECDSA 일치를 찾을 때 까지 첫 번째 서명을 각 공개키와 비교한다. 모든 서명이 유효하면 1이 반환되고 그렇지 않으면 0이 반환된다. 버그가 있어 스택에서 사용되지 않는 값이 하나 더 제거된다. | ||
+ | *'''OP_CHECKMULTISIGVERIFY''' : OP_CHECKMULTISIG와 동일하지만 나중에 OP_VERIFY가 실행된다. | ||
+ | |||
+ | ===잠금 시간=== | ||
+ | *'''OP_CHECKLOCKTIMEVERIFY'''(OP_NOP2) : 최상의 스택 항목이 트랜잭션의 nLockTime 필드보다 큰 경우 트랜잭션을 유효하지 않은 것으로 표시한다. 그렇지 않으면 OP_NOP사 실행 된 것처럼 스크립트 평가가 계속된다. 정확한 뜻은 BIP65에 설명되어 있다. | ||
+ | *'''OP_CHECKSEQUNECEVERIFY'''(OP_NOP3) : 입력의 상대 잠근 시간이 상위 스택 항목의 값보다 크거나 같지 않으면 트랜잭션을 유효하지 않은 것으로 표시한다. 정확한 뜻은 BIP112에 설명되어 있다. | ||
+ | |||
+ | ===유사어=== | ||
+ | *'''OP_PUBKEYHASH''' : OP_HASH160으로 해시 된 공개키를 나타낸다. | ||
+ | *'''OP_PUBKEY''' : OP_CHECKSIG와 호환되느 공개키를 나타낸다. | ||
+ | *'''OP_INVALIDOPCODE''' : 아직 할당되지 않은 옵코드와 일치한다. | ||
+ | |||
+ | ===예약어=== | ||
+ | *'''OP_RESERVED''' : 실행되지 않은 OP_IF 분기에서 발생 하지 않는 한 트랜잭션이 유효하지 않다. | ||
+ | *'''OP_VER''' : 실행되지 않은 OP_IF 분기에서 발생 하지 않는 한 트랜잭션이 유효하지 않다. | ||
+ | *'''OP_VERIF''' : 실행되지 않은 OP_IF 분기에서 발생하더라도 트랜잭션이 유효하지 않다. | ||
+ | *'''OP_VERNOTIF''' : 실행되지 않은 OP_IF 분기에서 발생하더라도 트랜잭션이 유효하지 않다. | ||
+ | *'''OP_RESERVED1''' : 실행되지 않은 OP_IF 분기에서 발생 하지 않느 한 트랜잭션이 유효하지 않다. | ||
+ | *'''OP_RESERVED2''' : 실행되지 않은 OP_IF 분기에서 발생 하지 않는 한 트랜잭션이 유효하지 않다. | ||
+ | *'''OP_NOP1''', '''OP_NOP4-OP_NOP10''' : 단어는 무시된다. 거래를 유효하지 않은 것으로 표시하지 않는다. | ||
==비활성화된 옵코드== | ==비활성화된 옵코드== | ||
− | 2010년과 2011년에 심각한 버그가 발견되면서 비트코인 스크립트 언어에서 많은 옵코드가 비활성화되었다. 이러한 옵코드 중 일부가 | + | 2010년과 2011년에 심각한 버그가 발견되면서 비트코인 스크립트 언어에서 많은 옵코드가 비활성화되었다. 이러한 옵코드 중 일부가 [[비트코인캐시]](BitcoinCash)에서 제공한 기능을 복원하고자 단순히 옵코드를 다시 활성화하는 대신, 제공하는 기능이 재검토되었으며 때에 따라 옵코드가 다시 설계되었거나 특정 문제를 해결하기 위해 새로운 옵코드가 추가되었다.<ref>비트코인 캐시 공식 홈페이지 - https://www.bitcoincash.org/es/spec/may-2018-reenabled-opcodes.html</ref> |
+ | ==활용== | ||
+ | *"이더리움 특징을 도입하기 위해 옵코드를 추가할 것"이라고 예고했다. 비트코인 캐시에 이더리움의 스마트 계약과 같은 비슷한 기능이 도입된다는 얘기다. 곧, 비트코인 캐시가 이더리움처럼 금융 이외에도 다양한 산업의 플랫폼으로 쓰일 수 있디는 의미다.<ref>고란 기자, 〈[https://news.joins.com/article/22599382 "비트코인은 도박?...6개월 투자해 두배 먹을 생각이면 사지 마라"]〉, 《중앙일보》, 2018-05-06</ref> | ||
+ | *비트코인캐시는 편리하게 결제하고 거래할 수 있는 화폐가 되기 위해 6개월마다 정기적으로 [[네트워크]] [[업그레이드]]를 위한 [[하드포크]]를 진행한다. 지난 5월 진행된 하드포크에서는 블록 크기를 32MB로 다시 한번 늘렸고, 확장성 및 안정성을 위해 다수의 옵코드를 도입했다.<ref>민서연 기자, 〈[http://news.zum.com/articles/48871397 (신비한 코인사전)<27>끝나지 않은 하드포크 전쟁 '비트코인 캐시']〉, 《뉴스줌》, 2018-11-14</ref> | ||
{{각주}} | {{각주}} | ||
==참고자료== | ==참고자료== | ||
− | * | + | * 비트코인재단 공식 홈페이지 - https://bitcoin.org/en/glossary/op-code |
+ | * 비트코인캐시 공식 홈페이지 - https://www.bitcoincash.org/es/spec/may-2018-reenabled-opcodes.html | ||
* 〈[https://en.bitcoin.it/wiki/Script Script]〉, 《비트코인위키》 | * 〈[https://en.bitcoin.it/wiki/Script Script]〉, 《비트코인위키》 | ||
* Corin Faife, 〈[https://breakermag.com/nodes-opcodes-and-satoshis-vision-the-bitcoin-cash-hard-fork-explained/ Nodes, Opcodes, and Satoshi's Vision: Today's Bitcoin Cash Hard Fork Explained]〉, 《BREAKERMAG》, 2018-11-15 | * Corin Faife, 〈[https://breakermag.com/nodes-opcodes-and-satoshis-vision-the-bitcoin-cash-hard-fork-explained/ Nodes, Opcodes, and Satoshi's Vision: Today's Bitcoin Cash Hard Fork Explained]〉, 《BREAKERMAG》, 2018-11-15 | ||
− | + | ||
− | == | + | ==같이 보기== |
+ | * [[오피리턴]] | ||
+ | * [[스크립트]] | ||
+ | |||
{{블록체인 기술|검토 필요}} | {{블록체인 기술|검토 필요}} |
2020년 8월 11일 (화) 22:14 기준 최신판
옵코드(OPCode)는 명령 또는 함수라고 하는 모든 스크립트 단어의 목록이며, 데이터를 푸시하거나 Pubkey 스크립트 또는 서명 스크립트 내에서 기능을 수행하는 비트코인(Bitcoin) 스크립트 언어의 작업 코드이다. 오피코드라고도 한다.
목차
개요[편집]
비트코인 노드에서 실행되는 소프트웨어는 프로그래밍 언어 C++로 작성되지만, 비트코인 트랜잭션에는 스크립트라는 비트코인 관련 언어로 작성된 명령이 포함될 수도 있다. 이더리움(Ethereum) 플랫폼에는 분산 애플리케이션 및 스마트 계약(Smart Contract)을 허용하는 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 : 스택 맨 위 요소의 문자열 길이를 펼치지 않는다.
비트 논리[편집]
- OP_INVERT : 입력의 모든 비트를 뒤집는다. 비활성화 되었다.
- OP_AND : 불린(boolean)과 입력의 각 비트 사이. 비활성화되었다.
- OP_OR : 불린 또는 입력의 각 비트 사이. 비활성화 되었다.
- OP_XOR : 불린 단독 또는 입력의 각 비트 사이. 비활성화되었다.
- OP_EQUAL : 입력 값이 정확히 같으면 1을, 그렇지 않으면 0을 반환한다.
- OP_EQUALVERIFY : OP_EQUAL과 동일하지만 나중에 OP_VERIFY를 실행한다.
산수[편집]
- OP_1ADD : 1이 입력에 추가된다.
- OP_1SUB : 입력에서 1을 뺍니다.
- OP_2MUL : 입력에 2가 곱해진다. 비활성화 되었다.
- OP_2DIV : 입력은 2로 나뉜다. 비활성화 되었다.
- OP_NEGATE : 입력 부호가 뒤집힌다.
- OP_ABS : 입력은 양수이다.
- OP_NOT : 입력이 0 또는 1이면 뒤집힌다. 그렇지 않으면 출력은 0이다.
- OP_0NOTEQUAL : 입력이 0이면 0을, 그렇지 않으면 1을 반환한다.
- OP_ADD : a가 b에 추가된다.
- OP_SUB : b에서 a를 뺀다.
- OP_MUL : a에 b를 곱한다. 비활성화 되었다.
- OP_DIV : a는 b로 나뉜다. 비활성화 되었다.
- OP_MOD : a를 b로 나눈 후 나머지를 반환한다. 비활성화 되었다.
- OP_LSHIFT : 부호를 유지하면서 왼쪽 b 비트를 이동한다. 비활성화 되었다.
- OP_RSHIFT : 부호를 유지하면서 오른쪽 b 비트를 이동한다. 비활성화 되었다.
- OP_BOOLAND : a와 b가 모두 0이 아닌 경우 출력은 1이다. 그렇지 않으면 0이다.
- OP_BOOLOR : a 또는 b가 0이 아닌 경우 출력은 1이다. 그렇지 않으면 0이다.
- OP_NUMEQUAL : 숫자가 같으면 1을, 그렇지 않으면 0을 반환한다.
- OP_NUMEQUALVERIFY : OP_NUMEQUAL과 동일하지만 나중에 OP_VERIFY를 실행한다.
- OP_NUMNOTEQUAL : 숫자가 같지 않으면 1을, 그렇지 않으면 0을 반환한다.
- OP_LESSTHAN : a가 b보다 작은 경우 1을, 그렇지 않으면 0을 반환한다.
- OP_GREATERTHAN : a가 b보다 크면 1을, 그렇지 않으면 0을 반환한다.
- OP_LESSTHANOREQUAL : a가 b보다 작거나 같으면 1을, 그렇지 않으면 0을 반환한다.
- OP_GREATERTHANOREQUAL : a가 b보다 크거나 같으면 1을, 그렇지 않으면 0을 반환한다.
- OP_MIN : a와 b중 작은 값을 반환한다.
- OP_MAX : a와 b중 큰 값을 반환한다.
- OP_WITHIN : x가 지정된 범위내에 있으면 1을, 그렇지 않으면 0을 반환한다.
암호화[편집]
- OP_RIPEMD160 : 입력은 RIPEMD-160을 사용하여 해시된다.
- OP_SHA1 : 입력은 SHA-1을 사용하여 해시된다.
- OP_SHA256 : 입력은 SHA-256을 사용하여 해시된다.
- OP_HASH160 : 입력은 두 번 해시된다. 먼저 SHA-266을 사용한 다음 RIPEMD-160을 사용한다.
- OP_HASH256 : 입력은 SHA-256으로 두 번 해시된다.
- OP_CODESEPARATOR : 모든 서명 확인 단어는 가장 최근에 실행 된 OP_CODESEPARATPR 이후의 데이터와만 서명을 일치시킨다.
- OP_CHECKSIG : 전체 트랜잭션의 출력, 입력 및 스크립트가 해시된다. OP_CHECKSIG에서 사용하는 서명은 이 해시와 공용키에 유효한 서명이어야 한다. 그래야만 1은 반환디고, 그렇지 않으면 0이 반환된다.
- OP_CHECKSIGVERIFY : OP_CHECKSIG와 동일하지만 나중에 OP_VERIFY가 실행된다.
- OP_CHECKMULTISIG : ECDSA 일치를 찾을 때 까지 첫 번째 서명을 각 공개키와 비교한다. 모든 서명이 유효하면 1이 반환되고 그렇지 않으면 0이 반환된다. 버그가 있어 스택에서 사용되지 않는 값이 하나 더 제거된다.
- OP_CHECKMULTISIGVERIFY : OP_CHECKMULTISIG와 동일하지만 나중에 OP_VERIFY가 실행된다.
잠금 시간[편집]
- OP_CHECKLOCKTIMEVERIFY(OP_NOP2) : 최상의 스택 항목이 트랜잭션의 nLockTime 필드보다 큰 경우 트랜잭션을 유효하지 않은 것으로 표시한다. 그렇지 않으면 OP_NOP사 실행 된 것처럼 스크립트 평가가 계속된다. 정확한 뜻은 BIP65에 설명되어 있다.
- OP_CHECKSEQUNECEVERIFY(OP_NOP3) : 입력의 상대 잠근 시간이 상위 스택 항목의 값보다 크거나 같지 않으면 트랜잭션을 유효하지 않은 것으로 표시한다. 정확한 뜻은 BIP112에 설명되어 있다.
유사어[편집]
- OP_PUBKEYHASH : OP_HASH160으로 해시 된 공개키를 나타낸다.
- OP_PUBKEY : OP_CHECKSIG와 호환되느 공개키를 나타낸다.
- OP_INVALIDOPCODE : 아직 할당되지 않은 옵코드와 일치한다.
예약어[편집]
- OP_RESERVED : 실행되지 않은 OP_IF 분기에서 발생 하지 않는 한 트랜잭션이 유효하지 않다.
- OP_VER : 실행되지 않은 OP_IF 분기에서 발생 하지 않는 한 트랜잭션이 유효하지 않다.
- OP_VERIF : 실행되지 않은 OP_IF 분기에서 발생하더라도 트랜잭션이 유효하지 않다.
- OP_VERNOTIF : 실행되지 않은 OP_IF 분기에서 발생하더라도 트랜잭션이 유효하지 않다.
- OP_RESERVED1 : 실행되지 않은 OP_IF 분기에서 발생 하지 않느 한 트랜잭션이 유효하지 않다.
- OP_RESERVED2 : 실행되지 않은 OP_IF 분기에서 발생 하지 않는 한 트랜잭션이 유효하지 않다.
- OP_NOP1, OP_NOP4-OP_NOP10 : 단어는 무시된다. 거래를 유효하지 않은 것으로 표시하지 않는다.
비활성화된 옵코드[편집]
2010년과 2011년에 심각한 버그가 발견되면서 비트코인 스크립트 언어에서 많은 옵코드가 비활성화되었다. 이러한 옵코드 중 일부가 비트코인캐시(BitcoinCash)에서 제공한 기능을 복원하고자 단순히 옵코드를 다시 활성화하는 대신, 제공하는 기능이 재검토되었으며 때에 따라 옵코드가 다시 설계되었거나 특정 문제를 해결하기 위해 새로운 옵코드가 추가되었다.[2]
활용[편집]
- "이더리움 특징을 도입하기 위해 옵코드를 추가할 것"이라고 예고했다. 비트코인 캐시에 이더리움의 스마트 계약과 같은 비슷한 기능이 도입된다는 얘기다. 곧, 비트코인 캐시가 이더리움처럼 금융 이외에도 다양한 산업의 플랫폼으로 쓰일 수 있디는 의미다.[3]
- 비트코인캐시는 편리하게 결제하고 거래할 수 있는 화폐가 되기 위해 6개월마다 정기적으로 네트워크 업그레이드를 위한 하드포크를 진행한다. 지난 5월 진행된 하드포크에서는 블록 크기를 32MB로 다시 한번 늘렸고, 확장성 및 안정성을 위해 다수의 옵코드를 도입했다.[4]
각주[편집]
- ↑ 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
- ↑ 고란 기자, 〈"비트코인은 도박?...6개월 투자해 두배 먹을 생각이면 사지 마라"〉, 《중앙일보》, 2018-05-06
- ↑ 민서연 기자, 〈(신비한 코인사전)<27>끝나지 않은 하드포크 전쟁 '비트코인 캐시'〉, 《뉴스줌》, 2018-11-14
참고자료[편집]
- 비트코인재단 공식 홈페이지 - https://bitcoin.org/en/glossary/op-code
- 비트코인캐시 공식 홈페이지 - https://www.bitcoincash.org/es/spec/may-2018-reenabled-opcodes.html
- 〈Script〉, 《비트코인위키》
- Corin Faife, 〈Nodes, Opcodes, and Satoshi's Vision: Today's Bitcoin Cash Hard Fork Explained〉, 《BREAKERMAG》, 2018-11-15
같이 보기[편집]