Ethereum 상호 운용성

원자 트랜잭션 워크플로우에 Ethereum 기반 트랜잭션을 포함할 수 있습니다.

퍼블릭 블록체인과 허가된 블록체인 모두에서 퍼블릭 블록체인과 토큰화 기능을 사용하면 상호 운용성이 요구됩니다. 일반적인 시나리오에는 다양한 원장 간 자산 교환, 공용 체인의 암호화폐 결제와 연결된 허가된 블록체인의 비즈니스 거래, 공용 블록체인에 허가된 블록체인 거래 증명 게시 등이 포함됩니다. 이러한 시나리오 및 기타 시나리오에 대한 상호 운용성을 가능하게 하기 위해 Oracle Blockchain Platform은 Ethereum 및 표준 web3 프로토콜을 지원하는 모든 EVM 기반 네트워크와의 상호 운용성을 제공합니다. 상호 운용성 기능은 Geth Ethereum 클라이언트를 REST 프록시에 통합하고 atomicTransactions이라는 단일 REST API를 통해 Oracle Blockchain Platform 및 Ethereum/EVM 트랜잭션을 모두 포함하는 최적화된 2상 커밋 프로토콜을 통합관리하는 방식으로 작동합니다. atomicTransactions API를 사용하여 여러 Oracle Blockchain Platform 채널에 대해 여러 체인코드 트랜잭션을 전송할 수 있으며, 선택적으로 Oracle Blockchain Platform 트랜잭션을 통해 원자적으로 실행되는 이더리움 트랜잭션을 추가할 수 있습니다.

Oracle Blockchain Platform 트랜잭션과 달리 Ethereum 트랜잭션은 2단계 커밋 프로토콜의 준비 및 커밋 단계로 나눌 수 없습니다. Ethereum 트랜잭션을 원자 워크플로우의 일부로 포함하기 위해 Oracle Blockchain Platform은 LRC(마지막 리소스 커밋) 최적화를 사용합니다. 모든 Oracle Blockchain Platform 거래가 준비됨 상태가 되면 Ethereum 거래가 시작됩니다. Ethereum 트랜잭션이 성공하면 Oracle Blockchain Platform 트랜잭션이 커밋됩니다. Ethereum 트랜잭션이 실패하면 Oracle Blockchain Platform 트랜잭션이 롤백됩니다.

Ethereum 트랜잭션에는 finality라는 개념이 있습니다. Ethereum 트랜잭션은 성공적으로 실행될 수 있지만 변경할 수 없는 블록의 일부가 될 때까지는 완료를 달성하지 못합니다. finalityParams 매개변수를 사용하여 유한성을 검사할지 여부와 블록 또는 초 단위로 기다릴 시간을 제어할 수 있습니다. 일반적으로 공용 Ethereum 블록체인 네트워크(Mainnet)에서 6개의 블록이 생성될 때까지 기다리는 경우 트랜잭션 완료가 달성되었다고 가정할 수 있습니다. 개인 Ethereum 네트워크에서는 일반적으로 최종성을 위해 오래 기다릴 필요가 없습니다.

NFT를 Ethereum 네트워크로 전송

또한 atomicTransactions API는 Ethereum 네트워크에 배포된 스마트 계약과의 상호 작용을 지원합니다. 이 기능을 사용하여 Oracle Blockchain Platform의 Hyperledger Fabric 체인코드에서 연동된 NFT(Non-fungible tokens)를 두 개의 트랜잭션을 원자적으로 호출하여 Ethereum 또는 Polygon 네트워크로 전송할 수 있습니다. 토큰 ID, 가격 및 토큰 내역과 같은 NFT 속성을 Oracle Blockchain Platform에서 Ethereum으로 원자적으로 전달할 수도 있습니다. Oracle Blockchain Platform에서 Ethereum으로 NFT를 전송한 후에는 NFT가 공개 NFT 마켓플레이스에 등재될 수 있습니다.

Oracle Blockchain Platform에서 Ethereum으로 NFT를 전송하려면 하나의 원자 트랜잭션에서 두 가지 기본 단계를 사용합니다.

  1. Oracle Blockchain Platform에서 NFT를 구울 수 있습니다. burnNFT 메소드를 호출하여 Oracle Blockchain Platform의 Hyperledger Fabric 체인 코드에서 NFT를 레코딩(삭제)합니다. Oracle Blockchain Platform은 Blockchain App Builder 툴을 사용하여 두 가지 표준인 ERC-721 및 ERC-1155의 향상된 버전에서 NFT를 지원합니다. burnNFT 메소드에 대한 자세한 내용은 해당 환경의 관련 항목을 참조하십시오.
  2. 이더리움에 NFT를 박하하십시오. burnNFT 메소드에서 반환된 매개변수를 사용하여 Ethereum 또는 Polygon 네트워크에서 스마트 계약을 호출하여 해당 네트워크에서 NFT를 민트합니다. NFT에 대한 Solidity 언어로 작성된 스마트 계약의 샘플 버전은 solidity-smartcontracts-fab253.zip 아카이브 파일에서 사용할 수 있습니다. 각 향상된 토큰 표준 ERC-721 및 ERC-1155에 대해 하나씩 스마트 계약에는 mintNFT 메소드가 포함되어 있습니다. 이 메소드는 이전 단계에서 burnNFT 메소드의 출력에서 인출할 수 있는 가격 및 토큰 내역과 같은 사용자정의 속성을 가진 NFT를 생성합니다.
    서명되지 않은 요청의 경우 사용자 정의 등록 정보가 ParamKeys 매개변수에 있고 해당 동적 매개변수가 params 매개변수에 전달된 경우 원자 트랜잭션 API는 burnNFT 메소드에서 매개변수를 인출하여 Ethereum 스마트 계약으로 전송할 수 있습니다. mintNFT 메소드는 다음 인수를 사용합니다.
    • to – NFT가 조율될 계정의 이더리움 주소입니다.
    • id – NFT의 토큰 ID입니다.
    • price – NFT의 가격.
    • tokenHistoryOracle Blockchain Platform 체인코드의 NFT 내역입니다.

    스마트 계약에서는 NFT의 토큰 ID가 숫자 문자열(정수로 변환할 수 있는 문자열)이어야 합니다. 예를 들어 토큰 ID는 2일 수 있지만 token2일 수는 없습니다.

    Oracle Blockchain Platform에 배포된 체인코드에 있는 NFT의 토큰 URI는 Solidity 스마트 계약과 호환되도록 특정 형식을 따라야 합니다.
    • ERC-1155: ID 대체를 사용하는 모든 토큰 유형에 대한 URI(예: https://token-cdn-domain/{id}.json)입니다.
    • ERC-721: 모든 토큰이 접두어(기본 URI)와 토큰 URI(예: http://api.myproject.example.com/token/<tokenURI>)를 공유하는 URI입니다.

    Remix IDE를 사용하여 스마트 계약에 대한 ABI(응용 프로그램 바이너리 인터페이스)를 생성할 수 있습니다. 그런 다음 ABI를 atomicTransactions API와 함께 사용할 수 있습니다. 스마트 계약의 방법을 변경하는 경우 계약을 재컴파일하고 ABI를 다시 생성해야 합니다.

NFT를 Ethereum 네트워크로 전송하는 예를 포함하여 원자 워크플로우에서 Ethereum 트랜잭션에 사용할 매개변수에 대한 자세한 내용은 원자 트랜잭션 REST 끝점을 참조하십시오.