이전 기사 에서 설명한 것처럼 Qtum은 Bitcoin의 UTXO 모델을 기반으로하지만 Ethereum에서 제공하는 계정 모델을 사용하여 스마트 계약을 만들고 실행할 수 있습니다. 이 작업을 만드는 마법은 "Account Abstraction Layer"라고 불리는 것입니다. 이름에서 알 수 있듯이 EVM (또는 곧 나오는 Qtum x86 VM)과 같은 가상 머신이 Qtum의 힘을주는 UTXO 모델.
UTXO 모델에서는 변경 사항이 생성되고 트랜잭션이 동전을 이동함에 따라 종종 공개 키와 개인 키 쌍이 많이 있습니다. 지갑은 동전을 보유하는 공개 키 목록을 유지하며 10 개의 Bitcoins 또는 Qtum은 10 개의 다른 UTXO로 분할 될 수 있습니다. 계정 모델에서는 모든 것이 계정 주소 : 데이터베이스의 잔액으로 단순화되어 계약서만으로 잔액을 송금 / 수신 할 수 있습니다.
UTXO가 있다면 계약서의 가치에서 주소로 보낼 때 계약서에서 사용할 동전을 어떻게 선택할 수 있습니까?
문제의 계약 잔고를 조정하여 VM에서 일반적으로 수행되는 계약 간의 내부 거래는 어떻게됩니까?
모든 지출 거래를 명시 적으로 기록해야하는 UTXO 모델을 어떻게 모델링합니까?
트랜잭션이 글로벌 공유 컴퓨터에 제출되면 트랜잭션은 opcode 집합을 제공하는 "Bitcoin Script"와 함께 아래 이미지와 같이 디코드됩니다 .
cryptocurrency wallet 소프트웨어는 컴퓨터 에서이 opcode 를 실행 합니다. 이 예에서 명령은 제공된 공개 키가 트랜잭션의 서명과 일치하는지 확인하기 위해 트랜잭션을 확인하도록 소프트웨어에 지시합니다.
Qtum의 AAL은 Bitcoin opcode에 새로운 계약 코드 몇 개를 추가하여 현명한 계약을 지원합니다.
OP_CREATE : 새로운 스마트 계약을 생성하는 데 사용됩니다 .
OP_CALL : 기존 스마트 계약 내에서 코드를 실행하는 데 사용됩니다
. OP_SPEND : 스마트 계약 에서 값을 사용하는 데 사용됩니다 .
블록 작성 프로세스 중에는 유효성 검사기의 소프트웨어가 Qtum 트랜잭션의 스크립트를 구문 분석하고 이러한 opcode를 사용하는 트랜잭션을 처리 할 때이를 EVM을 통해 처리하도록 따로 설정합니다. 그런 다음 EVM 계약 트랜잭션은 유효성 검사기 노드에 의해 실행되는 특수 "예상 계약 트랜잭션 목록"으로 처리됩니다. 그런 다음 이러한 트랜잭션은 EVM에 대해 실행되고 출력 결과는 소비 가능한 Qtum tx로 변환됩니다. 계약을 실행하는 동안 계약서에서 다른 계약을 호출하면 해당 트랜잭션도 명시 적 Qtum tx로 변환되어 현재 블록에 연결됩니다.
참고 :이 이미지는 이전 버전의 opcodes를 특징으로하는 Qtum 백서에서 가져온 것입니다.
OP_EXEC_ASSIGN은 (는) OP_CREATE입니다.
OP_EXEC은 이제 OP_CALL입니다.
이제 OP_TXHASH이 (가) OP_SPEND입니다.
OP_CREATE, OP_CALL 및 OP_SPEND 트랜잭션을 모두 사용 가능하게함으로써 Qtum UTXO 세트의 크기를 실제로 관리 할 수 있습니다. 계약서 자체가 파괴되면 OP_CREATE 트랜잭션이 예를 들어 UTXO 풀에서 제거됩니다.
계약이 하나 이상의 UTXO를 소유하고있을 때 처리하는 또 다른 단순화가 있습니다. 계약에 대해 하나 이상의 UTXO가 존재할 때마다 계약서가 사용해야하는 코인을 선택하는 대신 (이전 버전의 Qtum처럼) 새로운 tx가 생성되어 하나의 UTXO로 결합됩니다.
UTXO 모델의 가스 요금 환급에 관한 문제도 존재합니다. Ethereum 용 가스 모델은 계약 이행 비용을 과대 평가하고 실행 후 나머지 금액을 지출 계좌 잔액으로 환원하여 환급합니다. 이것은 내부 거래를 통해 Accounts 모델에서 상대적으로 쉽게 이루어 지지만 UTXO 모델에서는 유효성 검사기가 모든 가스를 다 사용하지 않는 거래에 대한 수수료를 부분적으로 환불하는 것은 불가능합니다. 또한 가스가 고갈 된 거래를 롤백하고 사용 된 가스를 밸리데이터에게 크레딧 할 수 있어야합니다.
Qtum에서 가스 요금을 환급하는 것은 해당 블록에 대한 코인베이스 거래의 일부로 새로운 산출물을 생성하여 작동합니다. 입력 가스는 모두 소비되어 유효성 검사기에 전달되며 유효성 검사기는 거래 발송자에게 가스 환불액을 제공하는 출력을 코인베이스 거래에 포함해야합니다. 이러한 환불은 새로운 블록 유효성 확인 합의 규칙을 사용하여 시행됩니다. 그렇지 않으면 유효성 검사기가 가스를 전혀 반환하지 않을 수도 있습니다.
거래가 가스 요금을 실제로 지정하고 보내는 방법에 또 다른 문제가 있습니다. UTXO 모델에서 가스 및 거래 수수료는 함께 합쳐져서 보내 지므로 거래를 중계하는 수수료와 가스 사용량 및 사용 된 금액과 비교 한 환불 금액을 어떻게 분리 할 수 있습니까? 이것은 새로운 간단한 수수료 모델을 통해 수행됩니다.
계약 실행을 완료 한 후, 검증 자들이 블록 보상을 검색하기 위해 사용하는 코인베이스 트랜잭션에 출력을 추가하여 나머지 가스 수수료를 주어진 가스 반환 스크립트로 반환해야합니다.
AAL은 Bitcoin 스크립트에 몇 가지 새로운 opcode를 추가하여 Qtum UTXO 모델에서 계약 자금을 생성, 실행 및 처리 할 수있는 마술 소스입니다. UTXO 트랜잭션은 구문 분석 된 다음 EVM 트랜잭션으로 변환됩니다. 그런 다음이 EVM 트랜잭션이 처리되어 계약서에 따라 새로운 UTXO 트랜잭션이 생성됩니다. 그런 다음 AAL은 이러한 모든 EVM 트랜잭션을 처리하여 글로벌 상태를 업데이트하고 Qtum UTXO 트랜잭션을 새 블록에 추가합니다.
https://blog.qtum.org/qtums-account-abstraction-layer-aal-explanation-143cb06cf08